@fragments-sdk/mcp 0.2.2 → 0.3.0
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 +53 -0
- package/package.json +14 -23
- package/dist/bin.d.ts +0 -1
- package/dist/bin.js +0 -37
- package/dist/bin.js.map +0 -1
- package/dist/chunk-7OMNY6JX.js +0 -6799
- package/dist/chunk-7OMNY6JX.js.map +0 -1
- package/dist/chunk-OQOBENAX.js +0 -1312
- package/dist/chunk-OQOBENAX.js.map +0 -1
- package/dist/dist-6B7Z5QLH.js +0 -57790
- package/dist/dist-6B7Z5QLH.js.map +0 -1
- package/dist/index.d.ts +0 -26
- package/dist/index.js +0 -11
- package/dist/index.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# @fragments-sdk/mcp
|
|
2
|
+
|
|
3
|
+
Standalone MCP server for the Fragments design system. Gives AI coding assistants (Claude Code, Cursor, etc.) semantic search over components, blocks, and tokens — no Playwright or build tools required.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
Add to your editor's MCP config:
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"mcpServers": {
|
|
12
|
+
"fragments": {
|
|
13
|
+
"command": "npx",
|
|
14
|
+
"args": ["@fragments-sdk/mcp"]
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The server auto-discovers `fragments.json` by walking up from cwd and scanning `node_modules`.
|
|
21
|
+
|
|
22
|
+
## Tools
|
|
23
|
+
|
|
24
|
+
| Tool | Description |
|
|
25
|
+
|------|-------------|
|
|
26
|
+
| `fragments_discover` | List, search, or get AI-powered component suggestions |
|
|
27
|
+
| `fragments_inspect` | Full component details — props, examples, guidelines |
|
|
28
|
+
| `fragments_blocks` | Composition patterns (e.g. "Login Form", "Settings Page") |
|
|
29
|
+
| `fragments_tokens` | CSS custom properties by category |
|
|
30
|
+
| `fragments_implement` | One-shot: components + blocks + tokens for a use case |
|
|
31
|
+
| `fragments_render` | Render a component screenshot (requires dev server) |
|
|
32
|
+
| `fragments_fix` | Generate token-compliance patches (requires dev server) |
|
|
33
|
+
|
|
34
|
+
## How search works
|
|
35
|
+
|
|
36
|
+
Queries run through **hybrid search** — Convex-hosted vector search (Voyage-Code-3 embeddings) fused with local keyword scoring via Reciprocal Rank Fusion. If Convex is unreachable, falls back silently to keyword-only.
|
|
37
|
+
|
|
38
|
+
## Options
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
-p, --project-root <path> Project root (default: cwd)
|
|
42
|
+
-u, --viewer-url <url> Dev server URL for render/fix tools
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Convex backend
|
|
46
|
+
|
|
47
|
+
The `convex/` directory contains the hosted search backend:
|
|
48
|
+
|
|
49
|
+
- **schema.ts** — `entries` table with vector index (components, blocks, tokens)
|
|
50
|
+
- **search.ts** — HTTP action that embeds queries with Voyage-Code-3 and runs vector search
|
|
51
|
+
- **ingest.ts** — Mutation to upsert entries at publish time
|
|
52
|
+
|
|
53
|
+
Index entries: `pnpm --filter @fragments-sdk/mcp index` (requires `VOYAGE_API_KEY` and `CONVEX_URL`).
|
package/package.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fragments-sdk/mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Standalone MCP server for Fragments design system — zero-config component discovery with semantic search",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"fragments-mcp": "./dist/bin.js"
|
|
8
8
|
},
|
|
9
|
+
"main": "./dist/server.js",
|
|
10
|
+
"module": "./dist/server.js",
|
|
11
|
+
"types": "./dist/server.d.ts",
|
|
9
12
|
"exports": {
|
|
10
13
|
".": {
|
|
11
|
-
"
|
|
12
|
-
"
|
|
14
|
+
"types": "./dist/server.d.ts",
|
|
15
|
+
"import": "./dist/server.js"
|
|
13
16
|
}
|
|
14
17
|
},
|
|
15
|
-
"main": "./dist/index.js",
|
|
16
|
-
"types": "./dist/index.d.ts",
|
|
17
18
|
"publishConfig": {
|
|
18
19
|
"access": "public"
|
|
19
20
|
},
|
|
@@ -24,27 +25,17 @@
|
|
|
24
25
|
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {
|
|
27
|
-
"@types/node": "^
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"@fragments/service": "0.1.1"
|
|
33
|
-
},
|
|
34
|
-
"peerDependencies": {
|
|
35
|
-
"typescript": "^5.0.0",
|
|
36
|
-
"playwright": "^1.40.0"
|
|
37
|
-
},
|
|
38
|
-
"peerDependenciesMeta": {
|
|
39
|
-
"playwright": {
|
|
40
|
-
"optional": true
|
|
41
|
-
}
|
|
28
|
+
"@types/node": "^22.0.0",
|
|
29
|
+
"convex": "^1.17.0",
|
|
30
|
+
"tsup": "^8.3.5",
|
|
31
|
+
"tsx": "^4.19.0",
|
|
32
|
+
"typescript": "^5.7.2"
|
|
42
33
|
},
|
|
43
34
|
"scripts": {
|
|
44
35
|
"build": "tsup",
|
|
45
36
|
"dev": "tsup --watch",
|
|
46
|
-
"test": "vitest run",
|
|
47
37
|
"typecheck": "tsc --noEmit",
|
|
48
|
-
"clean": "rm -rf dist"
|
|
38
|
+
"clean": "rm -rf dist",
|
|
39
|
+
"index": "tsx scripts/index-components.ts"
|
|
49
40
|
}
|
|
50
41
|
}
|
package/dist/bin.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
package/dist/bin.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
3
|
-
import {
|
|
4
|
-
startMcpServer
|
|
5
|
-
} from "./chunk-OQOBENAX.js";
|
|
6
|
-
import "./chunk-7OMNY6JX.js";
|
|
7
|
-
|
|
8
|
-
// src/bin.ts
|
|
9
|
-
var args = process.argv.slice(2);
|
|
10
|
-
var projectRoot = process.cwd();
|
|
11
|
-
var viewerUrl;
|
|
12
|
-
for (let i = 0; i < args.length; i++) {
|
|
13
|
-
const arg = args[i];
|
|
14
|
-
if (arg === "--project-root" || arg === "-p") {
|
|
15
|
-
projectRoot = args[++i] ?? projectRoot;
|
|
16
|
-
} else if (arg === "--viewer-url" || arg === "-u") {
|
|
17
|
-
viewerUrl = args[++i];
|
|
18
|
-
} else if (arg === "--help" || arg === "-h") {
|
|
19
|
-
console.log(`
|
|
20
|
-
Usage: fragments-mcp [options]
|
|
21
|
-
|
|
22
|
-
Options:
|
|
23
|
-
-p, --project-root <path> Project root directory (default: cwd)
|
|
24
|
-
-u, --viewer-url <url> Viewer URL (default: http://localhost:6006)
|
|
25
|
-
-h, --help Show this help message
|
|
26
|
-
`);
|
|
27
|
-
process.exit(0);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
startMcpServer({
|
|
31
|
-
projectRoot,
|
|
32
|
-
viewerUrl
|
|
33
|
-
}).catch((error) => {
|
|
34
|
-
console.error("Failed to start MCP server:", error);
|
|
35
|
-
process.exit(1);
|
|
36
|
-
});
|
|
37
|
-
//# sourceMappingURL=bin.js.map
|
package/dist/bin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bin.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { startMcpServer } from './server.js';\n\n// Parse command line arguments\nconst args = process.argv.slice(2);\nlet projectRoot = process.cwd();\nlet viewerUrl: string | undefined;\n\nfor (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n if (arg === '--project-root' || arg === '-p') {\n projectRoot = args[++i] ?? projectRoot;\n } else if (arg === '--viewer-url' || arg === '-u') {\n viewerUrl = args[++i];\n } else if (arg === '--help' || arg === '-h') {\n console.log(`\nUsage: fragments-mcp [options]\n\nOptions:\n -p, --project-root <path> Project root directory (default: cwd)\n -u, --viewer-url <url> Viewer URL (default: http://localhost:6006)\n -h, --help Show this help message\n`);\n process.exit(0);\n }\n}\n\n// Start server\nstartMcpServer({\n projectRoot,\n viewerUrl,\n}).catch((error) => {\n console.error('Failed to start MCP server:', error);\n process.exit(1);\n});\n"],"mappings":";;;;;;;;AAIA,IAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,IAAI,cAAc,QAAQ,IAAI;AAC9B,IAAI;AAEJ,SAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,QAAM,MAAM,KAAK,CAAC;AAElB,MAAI,QAAQ,oBAAoB,QAAQ,MAAM;AAC5C,kBAAc,KAAK,EAAE,CAAC,KAAK;AAAA,EAC7B,WAAW,QAAQ,kBAAkB,QAAQ,MAAM;AACjD,gBAAY,KAAK,EAAE,CAAC;AAAA,EACtB,WAAW,QAAQ,YAAY,QAAQ,MAAM;AAC3C,YAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAOf;AACG,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAGA,eAAe;AAAA,EACb;AAAA,EACA;AACF,CAAC,EAAE,MAAM,CAAC,UAAU;AAClB,UAAQ,MAAM,+BAA+B,KAAK;AAClD,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":[]}
|