@loupekit/mcp 0.2.0 → 0.2.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -22
- package/package.json +26 -7
package/README.md
CHANGED
|
@@ -1,30 +1,57 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
<a href="https://mohamed-ashraf-elsaed.github.io/loupe/">
|
|
4
|
+
<img src="https://raw.githubusercontent.com/mohamed-ashraf-elsaed/loupe/main/docs/store/promo-marquee-1400x560.jpg" alt="Loupe — Pin feedback to the live UI. Hand it to Claude." width="100%" />
|
|
5
|
+
</a>
|
|
6
|
+
|
|
7
|
+
<h1>@loupekit/mcp</h1>
|
|
8
|
+
|
|
9
|
+
<p><strong>The Model Context Protocol server that hands Loupe comments to Claude Code</strong><br />
|
|
10
|
+
as an actionable, fully-contextualized backlog — request + element HTML + styles + screenshot.</p>
|
|
11
|
+
|
|
12
|
+
<p>
|
|
13
|
+
<a href="https://www.npmjs.com/package/@loupekit/mcp"><img src="https://img.shields.io/npm/v/@loupekit/mcp?color=4a55d6&label=npm" alt="npm version" /></a>
|
|
14
|
+
<a href="https://www.npmjs.com/package/@loupekit/mcp"><img src="https://img.shields.io/npm/dm/@loupekit/mcp?color=4a55d6" alt="npm downloads" /></a>
|
|
15
|
+
<img src="https://img.shields.io/npm/l/@loupekit/mcp?color=4a55d6" alt="MIT license" />
|
|
16
|
+
<img src="https://img.shields.io/badge/MCP-stdio-4a55d6" alt="MCP stdio server" />
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p>
|
|
20
|
+
<a href="https://mohamed-ashraf-elsaed.github.io/loupe/"><b>Website</b></a> ·
|
|
21
|
+
<a href="https://github.com/mohamed-ashraf-elsaed/loupe"><b>GitHub</b></a> ·
|
|
22
|
+
<a href="https://github.com/mohamed-ashraf-elsaed/loupe/blob/main/CHANGELOG.md"><b>Changelog</b></a> ·
|
|
23
|
+
<a href="https://www.npmjs.com/package/@loupekit/sdk"><b>SDK</b></a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Overview
|
|
5
31
|
|
|
6
32
|
Product managers pin visual feedback on the live product with the
|
|
7
33
|
[Loupe SDK](https://www.npmjs.com/package/@loupekit/sdk) or browser extension. This MCP
|
|
8
34
|
server lets **Claude Code read that feedback**, open each comment with everything needed to
|
|
9
|
-
make the change
|
|
10
|
-
screenshot — and flow the status back when the work is done.
|
|
35
|
+
make the change, and flow the status back when the work is done — closing the loop.
|
|
11
36
|
|
|
12
|
-
|
|
37
|
+
<div align="center">
|
|
38
|
+
<img src="https://raw.githubusercontent.com/mohamed-ashraf-elsaed/loupe/main/docs/store/screenshot-3-claude.jpg" alt="Claude Code reading Loupe comments via MCP" width="90%" />
|
|
39
|
+
</div>
|
|
13
40
|
|
|
14
41
|
## What Claude gets
|
|
15
42
|
|
|
16
43
|
Each comment arrives as a ready-to-act package: the natural-language request, the page URL,
|
|
17
44
|
the target element (stable id / CSS path), its outer HTML, a curated slice of computed
|
|
18
|
-
styles, and a screenshot URL. No more "the header looks off somewhere" — Claude knows the
|
|
45
|
+
styles, and a screenshot URL. No more _"the header looks off somewhere"_ — Claude knows the
|
|
19
46
|
element, its state, and the page.
|
|
20
47
|
|
|
21
48
|
## Tools
|
|
22
49
|
|
|
23
|
-
| Tool
|
|
24
|
-
|
|
|
25
|
-
| `list_comments(status?, url?)` | List comments, optionally filtered by status (`open` / `in_progress` / `done`) or page URL.
|
|
26
|
-
| `get_comment(id)`
|
|
27
|
-
| `update_status(id, status)` | Move a comment across the workflow (`open` → `in_progress` → `done`) so triage state stays in sync.
|
|
50
|
+
| Tool | Description |
|
|
51
|
+
| --- | --- |
|
|
52
|
+
| `list_comments(status?, url?)` | List comments, optionally filtered by status (`open` / `in_progress` / `done`) or page URL. |
|
|
53
|
+
| `get_comment(id)` | The full Claude-ready package for one comment: request + element HTML + computed styles + screenshot URL. |
|
|
54
|
+
| `update_status(id, status)` | Move a comment across the workflow (`open` → `in_progress` → `done`) so triage state stays in sync. |
|
|
28
55
|
|
|
29
56
|
## Install
|
|
30
57
|
|
|
@@ -32,8 +59,8 @@ element, its state, and the page.
|
|
|
32
59
|
npm i -g @loupekit/mcp # exposes the `loupe-mcp` binary
|
|
33
60
|
```
|
|
34
61
|
|
|
35
|
-
> Also mirrored to **GitHub Packages** as `@mohamed-ashraf-elsaed/mcp
|
|
36
|
-
>
|
|
62
|
+
> Also mirrored to **GitHub Packages** as `@mohamed-ashraf-elsaed/mcp` — add
|
|
63
|
+
> `@mohamed-ashraf-elsaed:registry=https://npm.pkg.github.com` to your `.npmrc` to install from there.
|
|
37
64
|
|
|
38
65
|
## Configure Claude Code
|
|
39
66
|
|
|
@@ -58,11 +85,19 @@ Then ask Claude Code: _"List the open Loupe comments and fix the first one."_
|
|
|
58
85
|
|
|
59
86
|
## Environment variables
|
|
60
87
|
|
|
61
|
-
| Variable
|
|
62
|
-
|
|
|
63
|
-
| `LOUPE_API`
|
|
64
|
-
| `LOUPE_PROJECT_KEY` | `pk_demo_acme`
|
|
65
|
-
| `LOUPE_ADMIN_KEY`
|
|
88
|
+
| Variable | Default | Description |
|
|
89
|
+
| --- | --- | --- |
|
|
90
|
+
| `LOUPE_API` | `http://localhost:8787` | Base URL of the Loupe backend API. |
|
|
91
|
+
| `LOUPE_PROJECT_KEY` | `pk_demo_acme` | The project whose comments to expose. |
|
|
92
|
+
| `LOUPE_ADMIN_KEY` | _(empty)_ | The project secret — authenticates the server as admin (`X-Loupe-Admin`). Required against a real backend. |
|
|
93
|
+
|
|
94
|
+
## Where the comments come from
|
|
95
|
+
|
|
96
|
+
The dashboard is the human side of the same backlog Claude reads:
|
|
97
|
+
|
|
98
|
+
<div align="center">
|
|
99
|
+
<img src="https://raw.githubusercontent.com/mohamed-ashraf-elsaed/loupe/main/docs/store/screenshot-2-board.jpg" alt="Loupe triage board" width="90%" />
|
|
100
|
+
</div>
|
|
66
101
|
|
|
67
102
|
## Transport
|
|
68
103
|
|
|
@@ -72,9 +107,10 @@ Node 24+ runs the TypeScript entry directly (native type-stripping) — no build
|
|
|
72
107
|
|
|
73
108
|
## Related packages
|
|
74
109
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
110
|
+
| Package | Description |
|
|
111
|
+
| --- | --- |
|
|
112
|
+
| [`@loupekit/sdk`](https://www.npmjs.com/package/@loupekit/sdk) | The embeddable widget that captures the feedback. |
|
|
113
|
+
| [`@loupekit/shared`](https://www.npmjs.com/package/@loupekit/shared) | The canonical TypeScript types shared across the platform. |
|
|
78
114
|
|
|
79
115
|
## License
|
|
80
116
|
|
package/package.json
CHANGED
|
@@ -1,21 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loupekit/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1-next.2",
|
|
4
4
|
"description": "MCP server that exposes Loupe comments to Claude Code as an actionable, fully-contextualized backlog.",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"loupe",
|
|
7
|
+
"mcp",
|
|
8
|
+
"model-context-protocol",
|
|
9
|
+
"claude",
|
|
10
|
+
"claude-code",
|
|
11
|
+
"visual-feedback",
|
|
12
|
+
"product-management",
|
|
13
|
+
"ai"
|
|
14
|
+
],
|
|
6
15
|
"license": "MIT",
|
|
7
|
-
"repository": {
|
|
16
|
+
"repository": {
|
|
17
|
+
"type": "git",
|
|
18
|
+
"url": "https://github.com/mohamed-ashraf-elsaed/loupe.git",
|
|
19
|
+
"directory": "packages/mcp"
|
|
20
|
+
},
|
|
8
21
|
"homepage": "https://mohamed-ashraf-elsaed.github.io/loupe/",
|
|
9
|
-
"publishConfig": {
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
10
25
|
"type": "module",
|
|
11
|
-
"files": [
|
|
12
|
-
|
|
26
|
+
"files": [
|
|
27
|
+
"index.ts"
|
|
28
|
+
],
|
|
29
|
+
"bin": {
|
|
30
|
+
"loupe-mcp": "./index.ts"
|
|
31
|
+
},
|
|
13
32
|
"scripts": {
|
|
14
33
|
"start": "node index.ts",
|
|
15
34
|
"test:client": "node test-client.ts"
|
|
16
35
|
},
|
|
17
36
|
"dependencies": {
|
|
18
|
-
"@loupekit/shared": "
|
|
37
|
+
"@loupekit/shared": "0.2.1-next.2",
|
|
19
38
|
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
20
39
|
"zod": "^3.24.1"
|
|
21
40
|
}
|