mcp-probe-kit 3.0.17 โ†’ 3.0.19

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 (37) hide show
  1. package/README.md +77 -50
  2. package/build/lib/__tests__/agents-md-template.unit.test.d.ts +1 -0
  3. package/build/lib/__tests__/agents-md-template.unit.test.js +25 -0
  4. package/build/lib/__tests__/project-context-layout.unit.test.d.ts +1 -0
  5. package/build/lib/__tests__/project-context-layout.unit.test.js +80 -0
  6. package/build/lib/agents-md-template.d.ts +25 -0
  7. package/build/lib/agents-md-template.js +55 -0
  8. package/build/lib/memory-orchestration.d.ts +3 -1
  9. package/build/lib/memory-orchestration.js +71 -5
  10. package/build/lib/merge-agents-md.d.ts +6 -0
  11. package/build/lib/merge-agents-md.js +51 -0
  12. package/build/lib/project-context-layout.d.ts +78 -0
  13. package/build/lib/project-context-layout.js +350 -0
  14. package/build/lib/workspace-root.js +6 -1
  15. package/build/resources/ui-ux-data/metadata.json +1 -1
  16. package/build/schemas/index.d.ts +25 -3
  17. package/build/schemas/memory-tools.d.ts +1 -1
  18. package/build/schemas/memory-tools.js +1 -1
  19. package/build/schemas/project-tools.d.ts +24 -2
  20. package/build/schemas/project-tools.js +24 -2
  21. package/build/tools/__tests__/code_insight.unit.test.js +3 -3
  22. package/build/tools/__tests__/init_project_context.unit.test.js +32 -21
  23. package/build/tools/__tests__/start_feature.unit.test.js +2 -1
  24. package/build/tools/code_insight.js +11 -9
  25. package/build/tools/init_project_context.js +563 -506
  26. package/build/tools/start_bugfix.js +254 -248
  27. package/build/tools/start_feature.js +137 -131
  28. package/build/tools/start_ui.js +402 -402
  29. package/docs/.mcp-probe/layout.json +11 -0
  30. package/docs/i18n/en.json +36 -5
  31. package/docs/i18n/ja.json +9 -2
  32. package/docs/i18n/ko.json +9 -2
  33. package/docs/i18n/zh-CN.json +36 -5
  34. package/docs/memory-local-setup.md +314 -0
  35. package/docs/memory-local-setup.zh-CN.md +280 -0
  36. package/docs/pages/getting-started.html +249 -31
  37. package/package.json +1 -1
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 1,
3
+ "projectRootEnv": "MCP_PROJECT_ROOT",
4
+ "indexPath": "AGENTS.md",
5
+ "contextRoot": "docs",
6
+ "modularDir": "docs/project-context",
7
+ "graphDir": "docs/graph-insights",
8
+ "indexStyle": "agents",
9
+ "generatedBy": "init_project_context",
10
+ "generatedAt": "2026-05-26T07:57:19.543Z"
11
+ }
package/docs/i18n/en.json CHANGED
@@ -14,14 +14,14 @@
14
14
  "hero": {
15
15
  "title": "๐Ÿš€ MCP Probe Kit",
16
16
  "subtitle": "AI Development Enhancement Toolkit ยท Documentation Center",
17
- "version": "v3.0.17",
17
+ "version": "v3.0.19",
18
18
  "quickStart": "Quick Start",
19
19
  "visitMainSite": "Visit ByteZoneX"
20
20
  },
21
21
  "sections": {
22
22
  "quickStart": {
23
23
  "title": "Quick Start",
24
- "description": "Get started with MCP Probe Kit v3.0.17 in 5 minutes",
24
+ "description": "Get started with MCP Probe Kit v3.0.19 in 5 minutes",
25
25
  "installConfig": "Installation & Configuration"
26
26
  },
27
27
  "tools": {
@@ -63,7 +63,7 @@
63
63
  },
64
64
  "gettingStarted": {
65
65
  "title": "Installation & Configuration",
66
- "subtitle": "Get started with MCP Probe Kit v3.0.17 in 5 minutes. Supports Cursor, Cline, and Claude Desktop",
66
+ "subtitle": "Get started with MCP Probe Kit v3.0.19 in 5 minutes. Supports Cursor, Cline, and Claude Desktop",
67
67
  "breadcrumb": {
68
68
  "home": "Documentation",
69
69
  "quickStart": "Quick Start",
@@ -91,11 +91,35 @@
91
91
  "title": "Memory System Setup (Qdrant + Embedding)",
92
92
  "descriptionPrefix": "If you want to use",
93
93
  "descriptionSuffix": ", you need to configure both a vector database and an embedding service.",
94
+ "guideLink": "Extended guide (troubleshooting, performance):",
95
+ "guidePath": "docs/memory-local-setup.md",
96
+ "deployIntro": "Copy the files below into two folders, start both services, then paste the MCP config. No Ollama required.",
97
+ "portTitle": "Ports",
98
+ "layoutTitle": "0. Directory layout",
99
+ "layoutText": "Create two folders anywhere on your machine (example: ~/mcp-memory/):",
100
+ "qdrantTitle": "1. Qdrant (vector DB, port 50008)",
101
+ "qdrantCompose": "qdrant/docker-compose.yml",
102
+ "qdrantEnv": "qdrant/.env",
103
+ "qdrantDeploy": "Start Qdrant",
104
+ "qdrantVerify": "Verify Qdrant",
105
+ "qdrantNote": "When API key is enabled, all requests need header api-key. Dashboard: http://127.0.0.1:50008/dashboard",
106
+ "nomicTitle": "2. Nomic Embed / Infinity (embeddings, port 50012)",
107
+ "nomicCompose": "nomic-embed/docker-compose.yml",
108
+ "nomicEnv": "nomic-embed/.env",
109
+ "nomicDeploy": "Start embedding service",
110
+ "nomicVerify": "Verify embeddings",
111
+ "nomicNote": "First start downloads the model (~2โ€“5 min). Use POST /embeddings (not /v1/embeddings). Returns 768-dim vectors.",
112
+ "mcpTitle": "3. MCP client configuration",
113
+ "mcpNote": "Use the same keys as in qdrant/.env and nomic-embed/.env. Restart Cursor after saving.",
114
+ "alternativesTitle": "Other embedding options",
94
115
  "optionA": {
95
- "title": "Option A: Qdrant + Ollama (recommended)"
116
+ "title": "Recommended stack (steps above)"
96
117
  },
97
118
  "optionB": {
98
- "title": "Option B: Qdrant + OpenAI-Compatible Embedding API"
119
+ "title": "Option B: Qdrant + Ollama"
120
+ },
121
+ "optionC": {
122
+ "title": "Option C: Qdrant + hosted OpenAI-compatible API"
99
123
  },
100
124
  "env": {
101
125
  "title": "Environment Variables",
@@ -165,6 +189,13 @@
165
189
  "claudeMac": {
166
190
  "title": "Claude Desktop (macOS)",
167
191
  "path": "Configuration file path:"
192
+ },
193
+ "opencode": {
194
+ "title": "OpenCode",
195
+ "description": "Create or edit",
196
+ "description2": "in project root, or globally at",
197
+ "note": "Note:",
198
+ "noteText": "OpenCode uses <code>\"environment\"</code> (not <code>\"env\"</code>) for env vars, <code>\"mcp\"</code> (not <code>\"mcpServers\"</code>), and <code>\"command\"</code> as an array with <code>\"type\": \"local\"</code> required. See <a href=\"https://opencode.ai/docs/mcp\" target=\"_blank\" rel=\"noopener\" class=\"text-primary hover:underline\">OpenCode MCP docs</a>."
168
199
  }
169
200
  },
170
201
  "step3": {
package/docs/i18n/ja.json CHANGED
@@ -14,14 +14,14 @@
14
14
  "hero": {
15
15
  "title": "๐Ÿš€ MCP Probe Kit",
16
16
  "subtitle": "AI้–‹็™บๅผทๅŒ–ใƒ„ใƒผใƒซใ‚ญใƒƒใƒˆ ยท ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚ปใƒณใ‚ฟใƒผ",
17
- "version": "v3.0.17",
17
+ "version": "v3.0.19",
18
18
  "quickStart": "ใ‚ฏใ‚คใƒƒใ‚ฏใ‚นใ‚ฟใƒผใƒˆ",
19
19
  "visitMainSite": "ByteZoneXใ‚’่จชๅ•"
20
20
  },
21
21
  "sections": {
22
22
  "quickStart": {
23
23
  "title": "ใ‚ฏใ‚คใƒƒใ‚ฏใ‚นใ‚ฟใƒผใƒˆ",
24
- "description": "5ๅˆ†ใงMCP Probe Kit v3.0.17ใ‚’ๅง‹ใ‚ใ‚‹",
24
+ "description": "5ๅˆ†ใงMCP Probe Kit v3.0.19ใ‚’ๅง‹ใ‚ใ‚‹",
25
25
  "installConfig": "ใ‚คใƒณใ‚นใƒˆใƒผใƒซใจ่จญๅฎš"
26
26
  },
27
27
  "tools": {
@@ -165,6 +165,13 @@
165
165
  "claudeMac": {
166
166
  "title": "Claude Desktop (macOS)",
167
167
  "path": "่จญๅฎšใƒ•ใ‚กใ‚คใƒซใƒ‘ใ‚น๏ผš"
168
+ },
169
+ "opencode": {
170
+ "title": "OpenCode",
171
+ "description": "ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใƒซใƒผใƒˆใซไฝœๆˆใƒป็ทจ้›†",
172
+ "description2": "ใ€ใพใŸใฏใ‚ฐใƒญใƒผใƒใƒซใƒ‘ใ‚น๏ผš",
173
+ "note": "ๆณจๆ„๏ผš",
174
+ "noteText": "OpenCode ใฏ <code>\"environment\"</code>๏ผˆ<code>\"env\"</code> ใงใฏใ‚ใ‚Šใพใ›ใ‚“๏ผ‰ใง็’ฐๅขƒๅค‰ๆ•ฐใ‚’ๆŒ‡ๅฎšใ—ใ€<code>\"mcp\"</code>๏ผˆ<code>\"mcpServers\"</code> ใงใฏใ‚ใ‚Šใพใ›ใ‚“๏ผ‰ใ€<code>\"command\"</code> ใฏ้…ๅˆ—ใง <code>\"type\": \"local\"</code> ใŒๅฟ…้ ˆใงใ™ใ€‚่ฉณใ—ใใฏ <a href=\"https://opencode.ai/docs/mcp\" target=\"_blank\" rel=\"noopener\" class=\"text-primary hover:underline\">OpenCode MCP ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ</a> ใ‚’ๅ‚็…งใ€‚"
168
175
  }
169
176
  },
170
177
  "step3": {
package/docs/i18n/ko.json CHANGED
@@ -14,14 +14,14 @@
14
14
  "hero": {
15
15
  "title": "๐Ÿš€ MCP Probe Kit",
16
16
  "subtitle": "AI ๊ฐœ๋ฐœ ๊ฐ•ํ™” ํˆดํ‚ท ยท ๋ฌธ์„œ ์„ผํ„ฐ",
17
- "version": "v3.0.17",
17
+ "version": "v3.0.19",
18
18
  "quickStart": "๋น ๋ฅธ ์‹œ์ž‘",
19
19
  "visitMainSite": "ByteZoneX ๋ฐฉ๋ฌธ"
20
20
  },
21
21
  "sections": {
22
22
  "quickStart": {
23
23
  "title": "๋น ๋ฅธ ์‹œ์ž‘",
24
- "description": "5๋ถ„ ์•ˆ์— MCP Probe Kit v3.0.17 ์‹œ์ž‘ํ•˜๊ธฐ",
24
+ "description": "5๋ถ„ ์•ˆ์— MCP Probe Kit v3.0.19 ์‹œ์ž‘ํ•˜๊ธฐ",
25
25
  "installConfig": "์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ"
26
26
  },
27
27
  "tools": {
@@ -165,6 +165,13 @@
165
165
  "claudeMac": {
166
166
  "title": "Claude Desktop (macOS)",
167
167
  "path": "๊ตฌ์„ฑ ํŒŒ์ผ ๊ฒฝ๋กœ๏ผš"
168
+ },
169
+ "opencode": {
170
+ "title": "OpenCode",
171
+ "description": "ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ ์ƒ์„ฑ ๋˜๋Š” ํŽธ์ง‘",
172
+ "description2": ", ๋˜๋Š” ์ „์—ญ ๊ฒฝ๋กœ๏ผš",
173
+ "note": "์ฐธ๊ณ ๏ผš",
174
+ "noteText": "OpenCode๋Š” <code>\"environment\"</code>๏ผˆ<code>\"env\"</code>๊ฐ€ ์•„๋‹˜๏ผ‰๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ณ , <code>\"mcp\"</code>๏ผˆ<code>\"mcpServers\"</code>๊ฐ€ ์•„๋‹˜๏ผ‰, <code>\"command\"</code>๋Š” ๋ฐฐ์—ด์ด๋ฉฐ <code>\"type\": \"local\"</code>์ด ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ <a href=\"https://opencode.ai/docs/mcp\" target=\"_blank\" rel=\"noopener\" class=\"text-primary hover:underline\">OpenCode MCP ๋ฌธ์„œ</a>๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”."
168
175
  }
169
176
  },
170
177
  "step3": {
@@ -14,14 +14,14 @@
14
14
  "hero": {
15
15
  "title": "๐Ÿš€ MCP Probe Kit",
16
16
  "subtitle": "AI ๅผ€ๅ‘ๅขžๅผบๅทฅๅ…ท้›† ยท ๆ–‡ๆกฃไธญๅฟƒ",
17
- "version": "v3.0.17",
17
+ "version": "v3.0.19",
18
18
  "quickStart": "ๅฟซ้€Ÿๅผ€ๅง‹",
19
19
  "visitMainSite": "่ฎฟ้—ฎไธป็ซ™ ByteZoneX"
20
20
  },
21
21
  "sections": {
22
22
  "quickStart": {
23
23
  "title": "ๅฟซ้€Ÿๅผ€ๅง‹",
24
- "description": "5 ๅˆ†้’Ÿๅฟซ้€ŸไธŠๆ‰‹ MCP Probe Kit v3.0.17",
24
+ "description": "5 ๅˆ†้’Ÿๅฟซ้€ŸไธŠๆ‰‹ MCP Probe Kit v3.0.19",
25
25
  "installConfig": "ๅฎ‰่ฃ…้…็ฝฎ"
26
26
  },
27
27
  "tools": {
@@ -63,7 +63,7 @@
63
63
  },
64
64
  "gettingStarted": {
65
65
  "title": "ๅฎ‰่ฃ…้…็ฝฎ",
66
- "subtitle": "5 ๅˆ†้’Ÿๅฟซ้€ŸไธŠๆ‰‹ MCP Probe Kit v3.0.17๏ผŒๆ”ฏๆŒ Cursorใ€Cline ๅ’Œ Claude Desktop",
66
+ "subtitle": "5 ๅˆ†้’Ÿๅฟซ้€ŸไธŠๆ‰‹ MCP Probe Kit v3.0.19๏ผŒๆ”ฏๆŒ Cursorใ€Cline ๅ’Œ Claude Desktop",
67
67
  "breadcrumb": {
68
68
  "home": "ๆ–‡ๆกฃ้ฆ–้กต",
69
69
  "quickStart": "ๅฟซ้€Ÿๅผ€ๅง‹",
@@ -91,11 +91,35 @@
91
91
  "title": "่ฎฐๅฟ†็ณป็ปŸๅฎ‰่ฃ…้…็ฝฎ๏ผˆQdrant + Embedding๏ผ‰",
92
92
  "descriptionPrefix": "ๅฆ‚ๆžœไฝ ่ฆไฝฟ็”จ",
93
93
  "descriptionSuffix": "๏ผŒ้œ€่ฆๅŒๆ—ถ้…็ฝฎๅ‘้‡ๆ•ฐๆฎๅบ“ๅ’Œ embedding ๆœๅŠกใ€‚",
94
+ "guideLink": "ๆ‰ฉๅฑ•่ฏดๆ˜Ž๏ผˆๆŽ’้”™ใ€ๆ€ง่ƒฝ๏ผ‰๏ผš",
95
+ "guidePath": "docs/memory-local-setup.zh-CN.md",
96
+ "deployIntro": "ๆŒ‰ไธ‹้ขๅˆ›ๅปบไธคไธช็›ฎๅฝ•ใ€ๅคๅˆถ compose ไธŽ .envใ€ๅฏๅŠจๆœๅŠก๏ผŒๅ†้…็ฝฎ MCPใ€‚ๆ— ้œ€ๅฎ‰่ฃ… Ollamaใ€‚",
97
+ "portTitle": "็ซฏๅฃ",
98
+ "layoutTitle": "0. ็›ฎๅฝ•็ป“ๆž„",
99
+ "layoutText": "ๅœจไปปๆ„่ทฏๅพ„ๅˆ›ๅปบไธคไธชๆ–‡ไปถๅคน๏ผˆ็คบไพ‹ ~/mcp-memory/๏ผ‰๏ผš",
100
+ "qdrantTitle": "1. Qdrant๏ผˆๅ‘้‡ๅบ“๏ผŒ็ซฏๅฃ 50008๏ผ‰",
101
+ "qdrantCompose": "qdrant/docker-compose.yml",
102
+ "qdrantEnv": "qdrant/.env",
103
+ "qdrantDeploy": "ๅฏๅŠจ Qdrant",
104
+ "qdrantVerify": "้ชŒ่ฏ Qdrant",
105
+ "qdrantNote": "ๅผ€ๅฏ API Key ๅŽ๏ผŒ่ฏทๆฑ‚้กปๅธฆ api-key ๅคดใ€‚้ขๆฟ๏ผšhttp://127.0.0.1:50008/dashboard",
106
+ "nomicTitle": "2. Nomic Embed / Infinity๏ผˆๅ‘้‡็”Ÿๆˆ๏ผŒ็ซฏๅฃ 50012๏ผ‰",
107
+ "nomicCompose": "nomic-embed/docker-compose.yml",
108
+ "nomicEnv": "nomic-embed/.env",
109
+ "nomicDeploy": "ๅฏๅŠจ Embedding ๆœๅŠก",
110
+ "nomicVerify": "้ชŒ่ฏ Embedding",
111
+ "nomicNote": "้ฆ–ๆฌกๅฏๅŠจไผšไธ‹่ฝฝๆจกๅž‹๏ผˆ็บฆ 2โ€“5 ๅˆ†้’Ÿ๏ผ‰ใ€‚่ทฏๅพ„ไธบ POST /embeddings๏ผˆไธๆ˜ฏ /v1/embeddings๏ผ‰๏ผŒๅ‘้‡็ปดๅบฆ 768ใ€‚",
112
+ "mcpTitle": "3. MCP ๅฎขๆˆท็ซฏ้…็ฝฎ",
113
+ "mcpNote": "ๅฏ†้’ฅไธŽ qdrant/.envใ€nomic-embed/.env ไฟๆŒไธ€่‡ดใ€‚ไฟๅญ˜ๅŽ่ฏทๅฎŒๅ…จ้‡ๅฏ Cursorใ€‚",
114
+ "alternativesTitle": "ๅ…ถๅฎƒ Embedding ๆ–นๆกˆ",
94
115
  "optionA": {
95
- "title": "ๆ–นๆกˆ A๏ผšQdrant + Ollama๏ผˆ้ป˜่ฎคๆŽจ่๏ผ‰"
116
+ "title": "ๆŽจ่ๆ–นๆกˆ๏ผˆ่งไธŠๆ–‡ๆญฅ้ชค๏ผ‰"
96
117
  },
97
118
  "optionB": {
98
- "title": "ๆ–นๆกˆ B๏ผšQdrant + OpenAI-Compatible Embedding API"
119
+ "title": "ๆ–นๆกˆ B๏ผšQdrant + Ollama"
120
+ },
121
+ "optionC": {
122
+ "title": "ๆ–นๆกˆ C๏ผšQdrant + ไบ‘็ซฏ OpenAI ๅ…ผๅฎน Embedding API"
99
123
  },
100
124
  "env": {
101
125
  "title": "็Žฏๅขƒๅ˜้‡่ฏดๆ˜Ž",
@@ -165,6 +189,13 @@
165
189
  "claudeMac": {
166
190
  "title": "Claude Desktop (macOS)",
167
191
  "path": "้…็ฝฎๆ–‡ไปถ่ทฏๅพ„๏ผš"
192
+ },
193
+ "opencode": {
194
+ "title": "OpenCode",
195
+ "description": "ๅœจ้กน็›ฎๆ น็›ฎๅฝ•ๅˆ›ๅปบๆˆ–็ผ–่พ‘",
196
+ "description2": "๏ผŒๆˆ–ๅ…จๅฑ€่ทฏๅพ„๏ผš",
197
+ "note": "ๆณจๆ„๏ผš",
198
+ "noteText": "OpenCode ไฝฟ็”จ <code>\"environment\"</code>๏ผˆ้ž <code>\"env\"</code>๏ผ‰้…็ฝฎ็Žฏๅขƒๅ˜้‡๏ผŒไฝฟ็”จ <code>\"mcp\"</code>๏ผˆ้ž <code>\"mcpServers\"</code>๏ผ‰๏ผŒ<code>\"command\"</code> ไธบๆ•ฐ็ป„ไธ”้œ€ๆŒ‡ๅฎš <code>\"type\": \"local\"</code>ใ€‚่ฏฆ่ง <a href=\"https://opencode.ai/docs/mcp\" target=\"_blank\" rel=\"noopener\" class=\"text-primary hover:underline\">OpenCode MCP ๆ–‡ๆกฃ</a>ใ€‚"
168
199
  }
169
200
  },
170
201
  "step3": {
@@ -0,0 +1,314 @@
1
+ # Local Memory Stack (Qdrant + Nomic Embed)
2
+
3
+ This guide documents a **lightweight local setup** for mcp-probe-kit memory tools (`memorize_asset`, `read_memory_asset`, `scan_and_extract_patterns`):
4
+
5
+ - **Qdrant** โ€” vector database (port `50008`)
6
+ - **Infinity (nomic-embed)** โ€” embedding API (port `50012`), replaces Ollama for users who want a smaller footprint
7
+
8
+ Both services are typically deployed with Docker Compose under a shared `docker-start` layout. Ports use the `500xx` convention to avoid conflicts.
9
+
10
+ | Service | Host port | Container port | Purpose |
11
+ |---------|-----------|----------------|---------|
12
+ | Qdrant HTTP | `50008` | `6333` | REST API, dashboard |
13
+ | Qdrant gRPC | `50009` | `6334` | gRPC API |
14
+ | Nomic Embed (Infinity) | `50012` | `7997` | OpenAI-compatible embeddings |
15
+
16
+ ---
17
+
18
+ ## 1. Qdrant
19
+
20
+ ### Service info
21
+
22
+ | Item | Value |
23
+ |------|-------|
24
+ | Image | `qdrant/qdrant:latest` |
25
+ | Container name | `qdrant` |
26
+ | HTTP | `http://127.0.0.1:50008` |
27
+ | gRPC | `127.0.0.1:50009` |
28
+ | Data | `./data` โ†’ `/qdrant/storage` |
29
+ | Snapshots | `./snapshots` โ†’ `/qdrant/snapshots` |
30
+ | Auth | `QDRANT_API_KEY` in `.env` (header `api-key`) |
31
+
32
+ ### `docker-compose.yml`
33
+
34
+ ```yaml
35
+ services:
36
+ qdrant:
37
+ image: qdrant/qdrant:latest
38
+ container_name: qdrant
39
+ restart: always
40
+ env_file:
41
+ - .env
42
+ ports:
43
+ - "50008:6333"
44
+ - "50009:6334"
45
+ volumes:
46
+ - ./data:/qdrant/storage
47
+ - ./snapshots:/qdrant/snapshots
48
+ environment:
49
+ - QDRANT__SERVICE__HTTP_PORT=6333
50
+ - QDRANT__SERVICE__GRPC_PORT=6334
51
+ - QDRANT__LOG_LEVEL=INFO
52
+ - QDRANT__SERVICE__API_KEY=${QDRANT_API_KEY}
53
+ healthcheck:
54
+ test:
55
+ - "CMD"
56
+ - "bash"
57
+ - "-c"
58
+ - "exec 3<>/dev/tcp/127.0.0.1/6333 && printf 'GET /collections HTTP/1.1\r\nHost: localhost\r\napi-key: ${QDRANT_API_KEY}\r\nConnection: close\r\n\r\n' >&3 && IFS= read -r line <&3 && [[ \"$$line\" == *\"200\"* ]]"
59
+ interval: 30s
60
+ timeout: 10s
61
+ retries: 5
62
+ start_period: 30s
63
+ ```
64
+
65
+ ### `.env.example`
66
+
67
+ ```bash
68
+ # copy: cp .env.example .env
69
+ # generate key: python -c "import secrets; print(secrets.token_urlsafe(32))"
70
+
71
+ QDRANT_API_KEY=change-me-to-a-long-random-string
72
+ QDRANT_URL=http://127.0.0.1:50008
73
+ ```
74
+
75
+ ### First deploy
76
+
77
+ ```powershell
78
+ cd qdrant
79
+ copy .env.example .env
80
+ # Edit .env โ€” set a long random QDRANT_API_KEY
81
+ docker compose up -d
82
+ ```
83
+
84
+ ### Verify
85
+
86
+ ```bash
87
+ # Health / collections (requires api-key when API_KEY is enabled)
88
+ curl http://127.0.0.1:50008/collections \
89
+ -H "api-key: YOUR_QDRANT_API_KEY"
90
+
91
+ # Web UI (enter the same key in the dashboard)
92
+ # http://127.0.0.1:50008/dashboard
93
+ ```
94
+
95
+ ### Common commands
96
+
97
+ ```powershell
98
+ docker compose up -d # start
99
+ docker compose down # stop
100
+ docker compose logs -f qdrant # logs
101
+ docker compose restart qdrant # restart
102
+ ```
103
+
104
+ ### Notes
105
+
106
+ - After enabling `QDRANT__SERVICE__API_KEY`, **all** REST/gRPC requests must include header `api-key`.
107
+ - mcp-probe-kit sends this via `MEMORY_QDRANT_API_KEY`.
108
+ - Collection `mcp_probe_memory` is created automatically on first `memorize_asset` write (Cosine distance; vector size inferred from the first embedding).
109
+
110
+ ---
111
+
112
+ ## 2. Nomic Embed (Infinity)
113
+
114
+ Lightweight embedding server based on [Infinity](https://github.com/michaelfeil/infinity). Model: `nomic-ai/nomic-embed-text-v1.5` (768 dimensions). No Ollama required.
115
+
116
+ ### Service info
117
+
118
+ | Item | Value |
119
+ |------|-------|
120
+ | Image | `michaelf34/infinity:0.0.70` |
121
+ | Container name | `nomic-embed` |
122
+ | Host port | `50012` โ†’ container `7997` |
123
+ | Model | `nomic-ai/nomic-embed-text-v1.5` |
124
+ | Vector dim | **768** |
125
+ | Engine | `torch` (CPU if no GPU) |
126
+ | Auth | `INFINITY_API_KEY` โ†’ `Authorization: Bearer <key>` |
127
+ | Model cache | Docker volume `hf_cache` โ†’ `/app/.cache` |
128
+
129
+ ### `docker-compose.yml`
130
+
131
+ ```yaml
132
+ services:
133
+ nomic-embed:
134
+ image: michaelf34/infinity:0.0.70
135
+ container_name: nomic-embed
136
+ restart: unless-stopped
137
+ ports:
138
+ - "50012:7997"
139
+ volumes:
140
+ - hf_cache:/app/.cache
141
+ environment:
142
+ INFINITY_API_KEY: ${INFINITY_API_KEY}
143
+ command:
144
+ - v2
145
+ - --model-id
146
+ - nomic-ai/nomic-embed-text-v1.5
147
+ - --revision
148
+ - main
149
+ - --dtype
150
+ - float32
151
+ - --batch-size
152
+ - "8"
153
+ - --engine
154
+ - torch
155
+ - --port
156
+ - "7997"
157
+ - --no-bettertransformer
158
+ healthcheck:
159
+ test:
160
+ - "CMD"
161
+ - "curl"
162
+ - "-f"
163
+ - "http://127.0.0.1:7997/health"
164
+ interval: 30s
165
+ timeout: 10s
166
+ retries: 5
167
+ start_period: 120s
168
+
169
+ volumes:
170
+ hf_cache:
171
+ ```
172
+
173
+ ### `.env.example`
174
+
175
+ ```bash
176
+ INFINITY_API_KEY=change-me-to-a-long-random-string
177
+ ```
178
+
179
+ ### First deploy
180
+
181
+ ```powershell
182
+ cd nomic-embed
183
+ copy .env.example .env
184
+ # Edit .env โ€” set INFINITY_API_KEY (long random string)
185
+ docker compose up -d
186
+ docker logs -f nomic-embed # wait for "ready to batch requests"
187
+ ```
188
+
189
+ First start downloads the HuggingFace model (**~2โ€“5 minutes** cold start).
190
+
191
+ ### Verify
192
+
193
+ ```bash
194
+ curl http://127.0.0.1:50012/health
195
+
196
+ curl http://127.0.0.1:50012/models \
197
+ -H "Authorization: Bearer YOUR_INFINITY_API_KEY"
198
+
199
+ # Important: path is /embeddings โ€” NOT /v1/embeddings
200
+ curl http://127.0.0.1:50012/embeddings \
201
+ -H "Authorization: Bearer YOUR_INFINITY_API_KEY" \
202
+ -H "Content-Type: application/json" \
203
+ -d '{"model":"nomic-ai/nomic-embed-text-v1.5","input":"hello world"}'
204
+ ```
205
+
206
+ Response: `data[0].embedding` is a **768**-float array.
207
+
208
+ Swagger: `http://127.0.0.1:50012/docs`
209
+
210
+ ### Performance (CPU, indicative)
211
+
212
+ | Scenario | ~Latency |
213
+ |----------|----------|
214
+ | Single short text (warm) | 30โ€“50 ms |
215
+ | First request | ~150 ms |
216
+ | Batch 8 | ~150 ms |
217
+ | Resident memory | ~1 GB |
218
+
219
+ Suitable for MCP memory and occasional writes; not for high-concurrency bulk indexing.
220
+
221
+ ---
222
+
223
+ ## 3. mcp-probe-kit MCP configuration
224
+
225
+ **Recommended:** Qdrant on `50008` + Infinity on `50012` with `openai-compatible` provider.
226
+
227
+ ```json
228
+ {
229
+ "mcpServers": {
230
+ "mcp-probe-kit": {
231
+ "command": "npx",
232
+ "args": ["-y", "mcp-probe-kit@latest"],
233
+ "env": {
234
+ "MEMORY_QDRANT_URL": "http://127.0.0.1:50008",
235
+ "MEMORY_QDRANT_API_KEY": "YOUR_QDRANT_API_KEY",
236
+ "MEMORY_QDRANT_COLLECTION": "mcp_probe_memory",
237
+ "MEMORY_EMBEDDING_PROVIDER": "openai-compatible",
238
+ "MEMORY_EMBEDDING_URL": "http://127.0.0.1:50012/embeddings",
239
+ "MEMORY_EMBEDDING_MODEL": "nomic-ai/nomic-embed-text-v1.5",
240
+ "MEMORY_EMBEDDING_API_KEY": "YOUR_INFINITY_API_KEY",
241
+ "MEMORY_SEARCH_LIMIT": "3",
242
+ "MEMORY_SUMMARY_MAX_CHARS": "280"
243
+ }
244
+ }
245
+ }
246
+ }
247
+ ```
248
+
249
+ Claude Code: put the same keys under `mcpServers.mcp-probe-kit.env` in `.mcp.json`.
250
+
251
+ After changing env, **fully restart** your MCP client (e.g. quit and reopen Cursor).
252
+
253
+ ### Environment variable reference
254
+
255
+ | Variable | Required | Description |
256
+ |----------|----------|-------------|
257
+ | `MEMORY_QDRANT_URL` | Yes (read/write) | Qdrant base URL, e.g. `http://127.0.0.1:50008` |
258
+ | `MEMORY_QDRANT_API_KEY` | If Qdrant auth enabled | Sent as `api-key` header |
259
+ | `MEMORY_QDRANT_COLLECTION` | No | Default `mcp_probe_memory` |
260
+ | `MEMORY_EMBEDDING_URL` | Yes (write/search) | e.g. `http://127.0.0.1:50012/embeddings` |
261
+ | `MEMORY_EMBEDDING_MODEL` | Yes (write/search) | `nomic-ai/nomic-embed-text-v1.5` |
262
+ | `MEMORY_EMBEDDING_PROVIDER` | No | Must be `openai-compatible` for Infinity |
263
+ | `MEMORY_EMBEDDING_API_KEY` | Yes for Infinity | Bearer token = `INFINITY_API_KEY` |
264
+ | `MEMORY_SEARCH_LIMIT` | No | Default `3` |
265
+ | `MEMORY_SUMMARY_MAX_CHARS` | No | Default `280` |
266
+
267
+ ---
268
+
269
+ ## 4. End-to-end smoke test
270
+
271
+ ```bash
272
+ # 1) Qdrant
273
+ curl -s http://127.0.0.1:50008/collections -H "api-key: YOUR_QDRANT_API_KEY"
274
+
275
+ # 2) Embedding
276
+ curl -s -X POST http://127.0.0.1:50012/embeddings \
277
+ -H "Authorization: Bearer YOUR_INFINITY_API_KEY" \
278
+ -H "Content-Type: application/json" \
279
+ -d '{"model":"nomic-ai/nomic-embed-text-v1.5","input":"mcp-probe-kit test"}' \
280
+ | jq '.data[0].embedding | length'
281
+ # Expected: 768
282
+ ```
283
+
284
+ Then in the IDE, call `memorize_asset` once and `read_memory_asset` / semantic search via orchestration tools.
285
+
286
+ ---
287
+
288
+ ## 5. Troubleshooting
289
+
290
+ | Symptom | Fix |
291
+ |---------|-----|
292
+ | Qdrant `401` | Set `MEMORY_QDRANT_API_KEY` to match `qdrant/.env` |
293
+ | Embedding `401` | Use `Authorization: Bearer` + correct `INFINITY_API_KEY` |
294
+ | Embedding `404` | URL must be `http://127.0.0.1:50012/embeddings`, not `/v1/embeddings` |
295
+ | `nomic-embed` health stuck on `starting` | First model download; check `docker logs nomic-embed` |
296
+ | Log `No CUDA runtime` | Normal on CPU |
297
+ | Dimension mismatch in Qdrant | Collection was created with another model; delete collection or use a new `MEMORY_QDRANT_COLLECTION` name |
298
+ | Memory write disabled | Ensure all three are set: `MEMORY_QDRANT_URL`, `MEMORY_EMBEDDING_URL`, `MEMORY_EMBEDDING_MODEL` |
299
+
300
+ ---
301
+
302
+ ## 6. Alternatives
303
+
304
+ | Stack | When to use |
305
+ |-------|-------------|
306
+ | **Qdrant + Infinity (this guide)** | Default for local dev; lighter than Ollama |
307
+ | Qdrant + Ollama | If you already run Ollama for chat models |
308
+ | Qdrant + hosted OpenAI-compatible API | No local embedding container |
309
+
310
+ See also [README โ€” Optional Memory System Setup](../README.md#optional-memory-system-setup).
311
+
312
+ ---
313
+
314
+ **ไธญๆ–‡่ฏดๆ˜Ž**: ๅŒๅ†…ๅฎนไธญๆ–‡็‰ˆ่ง [memory-local-setup.zh-CN.md](./memory-local-setup.zh-CN.md).