@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.
Files changed (2) hide show
  1. package/README.md +58 -22
  2. package/package.json +26 -7
package/README.md CHANGED
@@ -1,30 +1,57 @@
1
- # @loupekit/mcp
1
+ <div align="center">
2
2
 
3
- **Model Context Protocol (MCP) server that hands [Loupe](https://github.com/mohamed-ashraf-elsaed/loupe)
4
- comments to Claude Code as an actionable, fully-contextualized backlog.**
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 — the request, the target element's HTML, its computed styles, and a
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 | Description |
24
- | --------------------------- | ------------------------------------------------------------------------------------------------------------ |
25
- | `list_comments(status?, url?)` | List comments, optionally filtered by status (`open` / `in_progress` / `done`) or page URL. |
26
- | `get_comment(id)` | The full Claude-ready package for one comment: request + element HTML + computed styles + screenshot URL. |
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`. To install from there,
36
- > add `@mohamed-ashraf-elsaed:registry=https://npm.pkg.github.com` to your `.npmrc`.
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 | Default | Description |
62
- | ------------------- | ------------------------- | -------------------------------------------------------------------- |
63
- | `LOUPE_API` | `http://localhost:8787` | Base URL of the Loupe backend API. |
64
- | `LOUPE_PROJECT_KEY` | `pk_demo_acme` | The project whose comments to expose. |
65
- | `LOUPE_ADMIN_KEY` | _(empty)_ | The project secret — authenticates the server as admin (`X-Loupe-Admin`). Required against a real backend. |
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
- - [`@loupekit/sdk`](https://www.npmjs.com/package/@loupekit/sdk) — the embeddable widget that
76
- captures the feedback.
77
- - [`@loupekit/shared`](https://www.npmjs.com/package/@loupekit/shared) — the canonical types.
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.0",
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": ["loupe", "mcp", "model-context-protocol", "claude", "claude-code", "visual-feedback", "product-management", "ai"],
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": { "type": "git", "url": "https://github.com/mohamed-ashraf-elsaed/loupe.git", "directory": "packages/mcp" },
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": { "access": "public" },
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
10
25
  "type": "module",
11
- "files": ["index.ts"],
12
- "bin": { "loupe-mcp": "./index.ts" },
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": "^0.2.0",
37
+ "@loupekit/shared": "0.2.1-next.2",
19
38
  "@modelcontextprotocol/sdk": "^1.12.0",
20
39
  "zod": "^3.24.1"
21
40
  }