mcp-probe-kit 3.0.18 โ 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.
- package/README.md +75 -50
- package/build/lib/__tests__/agents-md-template.unit.test.d.ts +1 -0
- package/build/lib/__tests__/agents-md-template.unit.test.js +25 -0
- package/build/lib/__tests__/project-context-layout.unit.test.d.ts +1 -0
- package/build/lib/__tests__/project-context-layout.unit.test.js +80 -0
- package/build/lib/agents-md-template.d.ts +25 -0
- package/build/lib/agents-md-template.js +55 -0
- package/build/lib/memory-orchestration.d.ts +3 -1
- package/build/lib/memory-orchestration.js +71 -5
- package/build/lib/merge-agents-md.d.ts +6 -0
- package/build/lib/merge-agents-md.js +51 -0
- package/build/lib/project-context-layout.d.ts +78 -0
- package/build/lib/project-context-layout.js +350 -0
- package/build/lib/workspace-root.js +6 -1
- package/build/resources/ui-ux-data/metadata.json +1 -1
- package/build/schemas/index.d.ts +25 -3
- package/build/schemas/memory-tools.d.ts +1 -1
- package/build/schemas/memory-tools.js +1 -1
- package/build/schemas/project-tools.d.ts +24 -2
- package/build/schemas/project-tools.js +24 -2
- package/build/tools/__tests__/code_insight.unit.test.js +3 -3
- package/build/tools/__tests__/init_project_context.unit.test.js +32 -21
- package/build/tools/__tests__/start_feature.unit.test.js +2 -1
- package/build/tools/code_insight.js +11 -9
- package/build/tools/init_project_context.js +563 -506
- package/build/tools/start_bugfix.js +254 -248
- package/build/tools/start_feature.js +137 -131
- package/build/tools/start_ui.js +402 -402
- package/docs/.mcp-probe/layout.json +11 -0
- package/docs/i18n/en.json +36 -5
- package/docs/i18n/ja.json +9 -2
- package/docs/i18n/ko.json +9 -2
- package/docs/i18n/zh-CN.json +36 -5
- package/docs/memory-local-setup.md +314 -0
- package/docs/memory-local-setup.zh-CN.md +280 -0
- package/docs/pages/getting-started.html +249 -31
- 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
|
+
"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.
|
|
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.
|
|
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": "
|
|
116
|
+
"title": "Recommended stack (steps above)"
|
|
96
117
|
},
|
|
97
118
|
"optionB": {
|
|
98
|
-
"title": "Option B: Qdrant +
|
|
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
|
+
"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.
|
|
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
|
+
"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.
|
|
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/zh-CN.json
CHANGED
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
"hero": {
|
|
15
15
|
"title": "๐ MCP Probe Kit",
|
|
16
16
|
"subtitle": "AI ๅผๅๅขๅผบๅทฅๅ
ท้ ยท ๆๆกฃไธญๅฟ",
|
|
17
|
-
"version": "v3.0.
|
|
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.
|
|
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.
|
|
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": "
|
|
116
|
+
"title": "ๆจ่ๆนๆก๏ผ่งไธๆๆญฅ้ชค๏ผ"
|
|
96
117
|
},
|
|
97
118
|
"optionB": {
|
|
98
|
-
"title": "ๆนๆก B๏ผQdrant +
|
|
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).
|