mcp-probe-kit 3.0.24 → 3.2.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.
Files changed (142) hide show
  1. package/README.md +755 -779
  2. package/build/index.js +42 -41
  3. package/build/lib/__tests__/spec-validator.unit.test.js +115 -0
  4. package/build/lib/agents-md-template.js +32 -32
  5. package/build/lib/memory-orchestration.js +29 -8
  6. package/build/lib/skill-bridge.js +12 -12
  7. package/build/lib/spec-validator.d.ts +36 -0
  8. package/build/lib/spec-validator.js +103 -0
  9. package/build/lib/template-loader.js +149 -47
  10. package/build/lib/tool-annotations.d.ts +30 -0
  11. package/build/lib/tool-annotations.js +55 -0
  12. package/build/lib/toolset-manager.js +2 -0
  13. package/build/resources/index.d.ts +4 -0
  14. package/build/resources/index.js +4 -0
  15. package/build/resources/tool-params-guide.d.ts +571 -0
  16. package/build/resources/tool-params-guide.js +488 -0
  17. package/build/resources/ui-ux-data/guidelines/vercel-web-interface.json +1632 -1632
  18. package/build/resources/ui-ux-data/metadata.json +30 -30
  19. package/build/resources/ui-ux-data/shadcn/blocks.json +2541 -2541
  20. package/build/resources/ui-ux-data/shadcn/components.json +997 -997
  21. package/build/resources/ui-ux-data/themes/presets.json +483 -483
  22. package/build/schemas/index.d.ts +22 -22
  23. package/build/schemas/memory-tools.d.ts +0 -22
  24. package/build/schemas/memory-tools.js +0 -14
  25. package/build/schemas/project-tools.d.ts +22 -0
  26. package/build/schemas/project-tools.js +23 -0
  27. package/build/tools/analyze_project.d.ts +1 -0
  28. package/build/tools/analyze_project.js +527 -0
  29. package/build/tools/check_deps.d.ts +13 -0
  30. package/build/tools/check_deps.js +204 -0
  31. package/build/tools/check_spec.d.ts +7 -0
  32. package/build/tools/check_spec.js +81 -0
  33. package/build/tools/code_insight.js +41 -41
  34. package/build/tools/convert.d.ts +13 -0
  35. package/build/tools/convert.js +599 -0
  36. package/build/tools/css_order.d.ts +13 -0
  37. package/build/tools/css_order.js +81 -0
  38. package/build/tools/debug.d.ts +13 -0
  39. package/build/tools/debug.js +131 -0
  40. package/build/tools/design2code.d.ts +20 -0
  41. package/build/tools/design2code.js +426 -0
  42. package/build/tools/detect_shell.d.ts +6 -0
  43. package/build/tools/detect_shell.js +151 -0
  44. package/build/tools/explain.d.ts +13 -0
  45. package/build/tools/explain.js +390 -0
  46. package/build/tools/fix.d.ts +13 -0
  47. package/build/tools/fix.js +303 -0
  48. package/build/tools/fix_bug.js +161 -161
  49. package/build/tools/gen_mock.d.ts +22 -0
  50. package/build/tools/gen_mock.js +269 -0
  51. package/build/tools/gen_skill.d.ts +13 -0
  52. package/build/tools/gen_skill.js +560 -0
  53. package/build/tools/genapi.d.ts +13 -0
  54. package/build/tools/genapi.js +174 -0
  55. package/build/tools/genchangelog.d.ts +13 -0
  56. package/build/tools/genchangelog.js +250 -0
  57. package/build/tools/gencommit.js +60 -60
  58. package/build/tools/gendoc.d.ts +13 -0
  59. package/build/tools/gendoc.js +232 -0
  60. package/build/tools/genpr.d.ts +13 -0
  61. package/build/tools/genpr.js +194 -0
  62. package/build/tools/genreadme.d.ts +13 -0
  63. package/build/tools/genreadme.js +626 -0
  64. package/build/tools/gensql.d.ts +13 -0
  65. package/build/tools/gensql.js +320 -0
  66. package/build/tools/genui.d.ts +13 -0
  67. package/build/tools/genui.js +803 -0
  68. package/build/tools/index.d.ts +1 -1
  69. package/build/tools/index.js +1 -1
  70. package/build/tools/init_component_catalog.d.ts +22 -0
  71. package/build/tools/init_component_catalog.js +809 -0
  72. package/build/tools/init_project_context.js +432 -432
  73. package/build/tools/init_setting.d.ts +13 -0
  74. package/build/tools/init_setting.js +47 -0
  75. package/build/tools/perf.d.ts +13 -0
  76. package/build/tools/perf.js +409 -0
  77. package/build/tools/render_ui.d.ts +22 -0
  78. package/build/tools/render_ui.js +384 -0
  79. package/build/tools/resolve_conflict.d.ts +13 -0
  80. package/build/tools/resolve_conflict.js +349 -0
  81. package/build/tools/security_scan.d.ts +22 -0
  82. package/build/tools/security_scan.js +323 -0
  83. package/build/tools/split.d.ts +13 -0
  84. package/build/tools/split.js +599 -0
  85. package/build/tools/start_api.d.ts +13 -0
  86. package/build/tools/start_api.js +193 -0
  87. package/build/tools/start_bugfix.js +254 -243
  88. package/build/tools/start_doc.d.ts +13 -0
  89. package/build/tools/start_doc.js +207 -0
  90. package/build/tools/start_feature.js +162 -127
  91. package/build/tools/start_product.js +1 -1
  92. package/build/tools/start_refactor.d.ts +13 -0
  93. package/build/tools/start_refactor.js +188 -0
  94. package/build/tools/start_release.d.ts +13 -0
  95. package/build/tools/start_release.js +167 -0
  96. package/build/tools/start_review.d.ts +13 -0
  97. package/build/tools/start_review.js +175 -0
  98. package/build/tools/start_ui.js +426 -412
  99. package/build/tools/ui-ux-tools.js +290 -290
  100. package/build/utils/__tests__/vercel-guidelines-sync.unit.test.js +12 -12
  101. package/build/utils/themes-sync.js +8 -8
  102. package/package.json +81 -83
  103. package/build/lib/__tests__/memory-orchestration.unit.test.js +0 -88
  104. package/build/lib/__tests__/memory-payload.unit.test.js +0 -35
  105. package/build/lib/cursor-history-client.d.ts +0 -54
  106. package/build/lib/cursor-history-client.js +0 -240
  107. package/build/tools/__tests__/cursor-history.unit.test.js +0 -38
  108. package/build/tools/cursor_read_conversation.d.ts +0 -7
  109. package/build/tools/cursor_read_conversation.js +0 -36
  110. package/docs/.mcp-probe/layout.json +0 -11
  111. package/docs/CNAME +0 -1
  112. package/docs/assets/font/MaterialSymbolsOutlined.codepoints +0 -4102
  113. package/docs/assets/font/MaterialSymbolsOutlined.ttf +0 -0
  114. package/docs/assets/font/noto-sans-sc-400.ttf +0 -0
  115. package/docs/assets/font/noto-sans-sc-700.ttf +0 -0
  116. package/docs/assets/font/noto-sans-sc-900.ttf +0 -0
  117. package/docs/assets/js/i18n.js +0 -375
  118. package/docs/assets/js/tailwind.js +0 -83
  119. package/docs/assets/logo-zh.png +0 -0
  120. package/docs/assets/logo.png +0 -0
  121. package/docs/data/tools.js +0 -523
  122. package/docs/i18n/all-tools/en.json +0 -190
  123. package/docs/i18n/all-tools/ja.json +0 -171
  124. package/docs/i18n/all-tools/ko.json +0 -171
  125. package/docs/i18n/all-tools/zh-CN.json +0 -190
  126. package/docs/i18n/en.json +0 -626
  127. package/docs/i18n/ja.json +0 -602
  128. package/docs/i18n/ko.json +0 -602
  129. package/docs/i18n/zh-CN.json +0 -626
  130. package/docs/index.html +0 -327
  131. package/docs/memory-local-setup.md +0 -315
  132. package/docs/memory-local-setup.zh-CN.md +0 -283
  133. package/docs/pages/all-tools.html +0 -515
  134. package/docs/pages/examples.html +0 -717
  135. package/docs/pages/getting-started.html +0 -964
  136. package/docs/pages/migration.html +0 -308
  137. package/docs/specs/user-auth/design.md +0 -82
  138. package/docs/specs/user-auth/requirements.md +0 -52
  139. package/docs/specs/user-auth/tasks.md +0 -55
  140. /package/build/lib/__tests__/{memory-orchestration.unit.test.d.ts → spec-validator.unit.test.d.ts} +0 -0
  141. /package/build/{lib/__tests__/memory-payload.unit.test.d.ts → utils/design-docs-generator.d.ts} +0 -0
  142. /package/build/{tools/__tests__/cursor-history.unit.test.d.ts → utils/design-docs-generator.js} +0 -0
@@ -1,964 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>MCP Probe Kit - AI-Powered Complete Development Toolkit | 29 Tools Covering Entire Development Lifecycle</title>
7
- <meta name="i18n-title" content="meta.title">
8
-
9
- <!-- SEO Meta Tags -->
10
- <meta name="description" content="MCP Probe Kit quick start guide for Cursor, Cline, and Claude Desktop. Finish installation and configuration in 5 minutes.">
11
- <meta name="keywords" content="MCP Probe Kit installation, Cursor configuration, Cline configuration, Claude Desktop configuration">
12
- <meta name="author" content="Kyle - ByteZoneX">
13
-
14
- <script src="../assets/js/tailwind.js" data-cfasync="false"></script>
15
- <script>
16
- tailwind.config = {
17
- theme: {
18
- extend: {
19
- colors: {
20
- primary: {
21
- DEFAULT: '#2563EB',
22
- hover: '#1D4ED8',
23
- },
24
- text: {
25
- primary: '#0F172A',
26
- secondary: '#475569',
27
- tertiary: '#64748B',
28
- },
29
- bg: {
30
- page: '#F8FAFC',
31
- card: '#FFFFFF',
32
- },
33
- border: '#E2E8F0',
34
- },
35
- }
36
- }
37
- }
38
- </script>
39
- <style>
40
- html { scroll-behavior: smooth; }
41
- .code-block { overflow-x: auto; -webkit-overflow-scrolling: touch; }
42
- /* Mobile drawer */
43
- .sidebar-drawer { transition: transform 0.3s ease; }
44
- @media (max-width: 767px) {
45
- .sidebar-drawer { transform: translateX(-100%); }
46
- .sidebar-drawer.open { transform: translateX(0); }
47
- }
48
- .backdrop { opacity: 0; pointer-events: none; transition: opacity 0.3s ease; }
49
- .backdrop.active { opacity: 1; pointer-events: auto; }
50
-
51
- /* i18n loading optimization to avoid flashing */
52
- body:not(.i18n-ready) [data-i18n] {
53
- visibility: hidden;
54
- }
55
- body.i18n-ready [data-i18n] {
56
- visibility: visible;
57
- }
58
- </style>
59
- </head>
60
- <body class="font-sans bg-bg-page text-text-primary leading-relaxed min-h-screen flex flex-col">
61
- <!-- A. Top navigation -->
62
- <nav class="fixed top-0 left-0 right-0 h-14 bg-white/95 backdrop-blur-md border-b border-border z-50">
63
- <div class="h-full px-4 flex items-center justify-between">
64
- <a href="../index.html" class="flex items-center gap-2 text-base font-semibold text-text-primary no-underline">
65
- <span>🚀</span>
66
- <span class="sm:inline hidden">MCP Probe Kit</span>
67
- </a>
68
- <div class="flex items-center gap-3">
69
- <div id="lang-switcher-container"></div>
70
- <button onclick="toggleSidebar()" class="md:hidden p-2 text-text-secondary hover:text-primary transition-colors">
71
- <svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
72
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
73
- </svg>
74
- </button>
75
- </div>
76
- </div>
77
- </nav>
78
-
79
- <!-- Sidebar backdrop -->
80
- <div class="fixed inset-0 bg-black/50 z-40 backdrop opacity-0 pointer-events-none transition-opacity duration-300 md:opacity-100 md:pointer-events-auto md:hidden" onclick="toggleSidebar()" id="backdrop"></div>
81
-
82
- <!-- B. Sidebar -->
83
- <aside class="fixed left-0 top-14 bottom-0 w-64 bg-white border-r border-border z-50 sidebar-drawer overflow-y-auto md:translate-x-0 md:block" id="sidebar">
84
- <div class="p-4">
85
- <div class="mb-4">
86
- <div class="text-xs font-semibold text-text-tertiary uppercase tracking-wider mb-2 px-2" data-i18n="sidebar.quickStart">Quick Start</div>
87
- <a href="../index.html" class="flex items-center gap-2 px-3 py-2 rounded-md text-sm text-text-secondary hover:bg-bg-page hover:text-primary transition-colors no-underline">
88
- <span>🏠</span>
89
- <span data-i18n="sidebar.home">Documentation Home</span>
90
- </a>
91
- <a href="./getting-started.html" class="flex items-center gap-2 px-3 py-2 rounded-md text-sm font-medium bg-blue-50 text-primary no-underline border-l-3 border-primary">
92
- <span>📖</span>
93
- <span data-i18n="sidebar.installation">Installation & Configuration</span>
94
- </a>
95
- </div>
96
-
97
- <div class="mb-4">
98
- <div class="text-xs font-semibold text-text-tertiary uppercase tracking-wider mb-2 px-2" data-i18n="sidebar.toolsDocs">Tools Documentation</div>
99
- <a href="./all-tools.html" class="flex items-center gap-2 px-3 py-2 rounded-md text-sm text-text-secondary hover:bg-bg-page hover:text-primary transition-colors no-underline">
100
- <span>🛠️</span>
101
- <span data-i18n="sidebar.allTools">All Tools</span>
102
- <span class="ml-auto bg-bg-page text-xs px-2 py-0.5 rounded-full">29</span>
103
- </a>
104
- </div>
105
-
106
- <div class="mb-4">
107
- <div class="text-xs font-semibold text-text-tertiary uppercase tracking-wider mb-2 px-2" data-i18n="sidebar.guides">Guides</div>
108
- <a href="./migration.html" class="flex items-center gap-2 px-3 py-2 rounded-md text-sm text-text-secondary hover:bg-bg-page hover:text-primary transition-colors no-underline">
109
- <span>🚀</span>
110
- <span data-i18n="sidebar.migration">Migration Guide</span>
111
- </a>
112
- <a href="./examples.html" class="flex items-center gap-2 px-3 py-2 rounded-md text-sm text-text-secondary hover:bg-bg-page hover:text-primary transition-colors no-underline">
113
- <span>💡</span>
114
- <span data-i18n="sidebar.examples">Best Practices</span>
115
- </a>
116
- </div>
117
-
118
- <div class="pt-4 border-t border-border">
119
- <a href="https://github.com/mybolide/mcp-probe-kit" target="_blank" rel="noopener" class="flex items-center gap-2 px-3 py-2 rounded-md text-sm text-text-secondary hover:bg-bg-page hover:text-primary transition-colors no-underline">
120
- <span>💻</span>
121
- <span>GitHub</span>
122
- <span class="ml-auto text-xs">↗</span>
123
- </a>
124
- <a href="https://npmjs.com/package/mcp-probe-kit" target="_blank" rel="noopener" class="flex items-center gap-2 px-3 py-2 rounded-md text-sm text-text-secondary hover:bg-bg-page hover:text-primary transition-colors no-underline">
125
- <span>📦</span>
126
- <span>npm</span>
127
- <span class="ml-auto text-xs">↗</span>
128
- </a>
129
- </div>
130
-
131
- <!-- QR Code -->
132
- <div class="mt-4 pt-4 border-t border-border">
133
- <div class="text-center">
134
- <div class="text-xs font-semibold text-text-tertiary mb-2" data-i18n="sidebar.followUs">Follow Us</div>
135
- <img src="https://oss.bolzjb.com/wx_qrcode.jpg" alt="WeChat official account QR code" class="w-[100px] h-[100px] mx-auto rounded-lg border border-border" />
136
- <div class="text-xs text-text-tertiary mt-2" data-i18n="sidebar.getTechSharing">Get More Tech Insights</div>
137
- </div>
138
- </div>
139
- </div>
140
- </aside>
141
-
142
- <!-- C. Main content -->
143
- <main class="flex-1 mt-14 min-h-screen md:ml-64">
144
- <div class="max-w-4xl mx-auto p-4 sm:p-6 lg:p-8">
145
-
146
- <!-- Breadcrumb -->
147
- <nav class="flex items-center gap-1 text-sm text-text-secondary mb-4 overflow-x-auto whitespace-nowrap">
148
- <a href="../index.html" class="hover:text-primary transition-colors no-underline flex-shrink-0" data-i18n="gettingStarted.breadcrumb.home">Documentation</a>
149
- <span class="text-text-tertiary">/</span>
150
- <span class="text-text-primary flex-shrink-0" data-i18n="gettingStarted.breadcrumb.quickStart">Quick Start</span>
151
- <span class="text-text-tertiary">/</span>
152
- <span class="text-text-primary flex-shrink-0" data-i18n="gettingStarted.breadcrumb.installation">Installation</span>
153
- </nav>
154
-
155
- <!-- Page title -->
156
- <div class="mb-6">
157
- <h1 class="text-2xl sm:text-3xl font-bold text-text-primary mb-2" data-i18n="gettingStarted.title">Installation & Configuration</h1>
158
- <p class="text-sm sm:text-base text-text-secondary" data-i18n="gettingStarted.subtitle">Get started with MCP Probe Kit v3.0.16 in 5 minutes. Supports Cursor, Cline, and Claude Desktop</p>
159
- <div class="flex flex-wrap items-center gap-2 mt-3 text-xs text-text-tertiary">
160
- <span class="bg-blue-100 text-blue-700 px-2 py-0.5 rounded">v3.0.16</span>
161
- <span>MCP 2025-11-25</span>
162
- <span>SDK 1.27.1</span>
163
- </div>
164
- </div>
165
-
166
- <!-- Step 1: Choose installation method -->
167
- <section class="bg-white rounded-xl border border-border p-4 sm:p-6 mb-6 shadow-sm">
168
- <div class="flex items-start gap-3 mb-4">
169
- <div class="w-7 h-7 sm:w-8 sm:h-8 bg-gradient-to-br from-primary to-primary-hover text-white rounded-full flex items-center justify-center font-semibold text-sm sm:text-base flex-shrink-0">1</div>
170
- <h2 class="text-lg sm:text-xl font-semibold text-text-primary" data-i18n="gettingStarted.step1.title">Choose Installation Method</h2>
171
- </div>
172
-
173
- <!-- Installation method tabs -->
174
- <div class="space-y-4">
175
- <!-- npx method -->
176
- <div class="border border-border rounded-lg overflow-hidden">
177
- <button onclick="toggleInstall('npx')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
178
- <div class="flex items-center gap-2">
179
- <span class="text-lg">⚡</span>
180
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.step1.npx.title">Use npx Directly</span>
181
- <span class="bg-green-100 text-green-700 text-xs px-2 py-0.5 rounded font-medium" data-i18n="gettingStarted.step1.npx.recommended">Recommended</span>
182
- </div>
183
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="npx-icon" style="transform: rotate(180deg);" fill="none" stroke="currentColor" viewBox="0 0 24 24">
184
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
185
- </svg>
186
- </button>
187
- <div id="npx-content" class="p-4 border-t border-border">
188
- <p class="text-text-secondary mb-3 text-sm" data-i18n="gettingStarted.step1.npx.description">No installation required, use the latest version directly:</p>
189
- <div class="bg-slate-900 rounded-lg overflow-hidden">
190
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
191
- <span class="text-xs text-slate-300 font-medium">JSON</span>
192
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
193
- </div>
194
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>{
195
- "mcpServers": {
196
- "mcp-probe-kit": {
197
- "command": "npx",
198
- "args": ["-y", "mcp-probe-kit@latest"]
199
- }
200
- }
201
- }</code></pre>
202
- </div>
203
- <div class="mt-3 p-3 bg-blue-50 border-l-3 border-blue-500 rounded-r text-sm text-text-primary">
204
- <strong data-i18n="gettingStarted.step1.npx.advantage">Advantage:</strong><span data-i18n="gettingStarted.step1.npx.advantageText">No manual updates needed, automatically uses the latest version on each startup</span>
205
- </div>
206
- </div>
207
- </div>
208
-
209
- <!-- Global installation -->
210
- <div class="border border-border rounded-lg overflow-hidden">
211
- <button onclick="toggleInstall('global')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
212
- <div class="flex items-center gap-2">
213
- <span class="text-lg">📦</span>
214
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.step1.global.title">Global Installation</span>
215
- </div>
216
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="global-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
217
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
218
- </svg>
219
- </button>
220
- <div id="global-content" class="hidden p-4 border-t border-border">
221
- <p class="text-text-secondary mb-3 text-sm" data-i18n="gettingStarted.step1.global.description">Install globally to system:</p>
222
- <div class="bg-slate-900 rounded-lg overflow-hidden">
223
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
224
- <span class="text-xs text-slate-300 font-medium">Bash</span>
225
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
226
- </div>
227
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>npm install -g mcp-probe-kit</code></pre>
228
- </div>
229
- <p class="text-text-secondary mt-3 mb-2 text-sm" data-i18n="gettingStarted.step1.global.configFile">Configuration file:</p>
230
- <div class="bg-slate-900 rounded-lg overflow-hidden">
231
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
232
- <span class="text-xs text-slate-300 font-medium">JSON</span>
233
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
234
- </div>
235
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>{
236
- "mcpServers": {
237
- "mcp-probe-kit": {
238
- "command": "mcp-probe-kit"
239
- }
240
- }
241
- }</code></pre>
242
- </div>
243
- <div class="mt-3 p-3 bg-amber-50 border-l-3 border-amber-500 rounded-r text-sm text-text-primary">
244
- <strong data-i18n="gettingStarted.step1.global.note">Note:</strong><span data-i18n="gettingStarted.step1.global.noteText">Need to manually run</span> <code class="bg-gray-200 px-1 rounded text-xs">npm update -g mcp-probe-kit</code> <span data-i18n="gettingStarted.step1.global.updateText">to update version</span>
245
- </div>
246
- </div>
247
- </div>
248
-
249
- <div class="mt-5 p-4 bg-emerald-50 border-l-4 border-emerald-500 rounded-r text-sm text-text-primary">
250
- <h3 class="font-semibold mb-2" data-i18n="gettingStarted.step1.memory.title">Memory System Setup (Qdrant + Embedding)</h3>
251
- <p class="mb-3 text-text-secondary">
252
- <span data-i18n="gettingStarted.step1.memory.descriptionPrefix">If you want to use</span>
253
- <code class="bg-gray-200 px-1 rounded text-xs">search_memory</code>、
254
- <code class="bg-gray-200 px-1 rounded text-xs">memorize_asset</code>、
255
- <code class="bg-gray-200 px-1 rounded text-xs">read_memory_asset</code>、
256
- <code class="bg-gray-200 px-1 rounded text-xs">scan_and_extract_patterns</code>
257
- <span data-i18n="gettingStarted.step1.memory.descriptionSuffix">, you need to configure both a vector database and an embedding service.</span>
258
- </p>
259
- <p class="mb-3 text-text-secondary" data-i18n="gettingStarted.step1.memory.deployIntro">Copy the files below into two folders, start both services, then paste the MCP config. No Ollama required.</p>
260
- <p class="mb-3 text-text-secondary">
261
- <span data-i18n="gettingStarted.step1.memory.guideLink">Extended guide (troubleshooting, performance):</span>
262
- <a class="text-emerald-700 underline" href="https://github.com/mybolide/mcp-probe-kit/blob/main/docs/memory-local-setup.md" data-i18n="gettingStarted.step1.memory.guidePath">docs/memory-local-setup.md</a>
263
- · <a class="text-emerald-700 underline" href="https://github.com/mybolide/mcp-probe-kit/blob/main/docs/memory-local-setup.zh-CN.md">中文</a>
264
- </p>
265
-
266
- <p class="font-medium mb-1" data-i18n="gettingStarted.step1.memory.portTitle">Ports</p>
267
- <table class="w-full mb-4 text-xs border border-emerald-200 rounded overflow-hidden">
268
- <thead class="bg-emerald-100"><tr><th class="px-2 py-1 text-left">Service</th><th class="px-2 py-1 text-left">URL</th></tr></thead>
269
- <tbody>
270
- <tr class="border-t border-emerald-200"><td class="px-2 py-1">Qdrant HTTP</td><td class="px-2 py-1"><code>http://127.0.0.1:50008</code></td></tr>
271
- <tr class="border-t border-emerald-200"><td class="px-2 py-1">Qdrant gRPC</td><td class="px-2 py-1"><code>127.0.0.1:50009</code></td></tr>
272
- <tr class="border-t border-emerald-200"><td class="px-2 py-1">Nomic Embed</td><td class="px-2 py-1"><code>http://127.0.0.1:50012</code></td></tr>
273
- </tbody>
274
- </table>
275
-
276
- <p class="font-medium mb-1" data-i18n="gettingStarted.step1.memory.layoutTitle">0. Directory layout</p>
277
- <p class="mb-2 text-text-secondary" data-i18n="gettingStarted.step1.memory.layoutText">Create two folders anywhere on your machine (example: ~/mcp-memory/):</p>
278
- <pre class="code-block mb-4 p-3 text-sm text-slate-200 bg-slate-900 rounded overflow-x-auto"><code>mcp-memory/
279
- ├── qdrant/
280
- │ ├── docker-compose.yml
281
- │ ├── .env
282
- │ ├── data/
283
- │ └── snapshots/
284
- └── nomic-embed/
285
- ├── docker-compose.yml
286
- └── .env</code></pre>
287
-
288
- <!-- Qdrant -->
289
- <p class="font-semibold mb-2" data-i18n="gettingStarted.step1.memory.qdrantTitle">1. Qdrant (vector DB, port 50008)</p>
290
- <p class="text-xs text-text-secondary mb-1" data-i18n="gettingStarted.step1.memory.qdrantCompose">qdrant/docker-compose.yml</p>
291
- <div class="bg-slate-900 rounded-lg overflow-hidden mb-3">
292
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
293
- <span class="text-xs text-slate-300 font-medium">docker-compose.yml</span>
294
- <button type="button" onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
295
- </div>
296
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>services:
297
- qdrant:
298
- image: qdrant/qdrant:latest
299
- container_name: qdrant
300
- restart: always
301
- env_file:
302
- - .env
303
- ports:
304
- - "50008:6333"
305
- - "50009:6334"
306
- volumes:
307
- - ./data:/qdrant/storage
308
- - ./snapshots:/qdrant/snapshots
309
- environment:
310
- - QDRANT__SERVICE__HTTP_PORT=6333
311
- - QDRANT__SERVICE__GRPC_PORT=6334
312
- - QDRANT__LOG_LEVEL=INFO
313
- - QDRANT__SERVICE__API_KEY=${QDRANT_API_KEY}
314
- healthcheck:
315
- test:
316
- - "CMD"
317
- - "bash"
318
- - "-c"
319
- - "exec 3&lt;&gt;/dev/tcp/127.0.0.1/6333 &amp;&amp; printf 'GET /collections HTTP/1.1\r\nHost: localhost\r\napi-key: ${QDRANT_API_KEY}\r\nConnection: close\r\n\r\n' &gt;&amp;3 &amp;&amp; IFS= read -r line &lt;&amp;3 &amp;&amp; [[ \"$$line\" == *\"200\"* ]]"
320
- interval: 30s
321
- timeout: 10s
322
- retries: 5
323
- start_period: 30s</code></pre>
324
- </div>
325
- <p class="text-xs text-text-secondary mb-1" data-i18n="gettingStarted.step1.memory.qdrantEnv">qdrant/.env</p>
326
- <div class="bg-slate-900 rounded-lg overflow-hidden mb-3">
327
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
328
- <span class="text-xs text-slate-300 font-medium">.env</span>
329
- <button type="button" onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
330
- </div>
331
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code># Generate: python -c "import secrets; print(secrets.token_urlsafe(32))"
332
- QDRANT_API_KEY=change-me-to-a-long-random-string
333
- QDRANT_URL=http://127.0.0.1:50008</code></pre>
334
- </div>
335
- <p class="text-xs font-medium mb-1" data-i18n="gettingStarted.step1.memory.qdrantDeploy">Start Qdrant</p>
336
- <div class="bg-slate-900 rounded-lg overflow-hidden mb-3">
337
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
338
- <span class="text-xs text-slate-300 font-medium">PowerShell / Bash</span>
339
- <button type="button" onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
340
- </div>
341
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>cd qdrant
342
- mkdir data snapshots 2&gt;$null; mkdir -p data snapshots
343
- docker compose up -d
344
- docker compose ps</code></pre>
345
- </div>
346
- <p class="text-xs font-medium mb-1" data-i18n="gettingStarted.step1.memory.qdrantVerify">Verify Qdrant</p>
347
- <div class="bg-slate-900 rounded-lg overflow-hidden mb-2">
348
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
349
- <span class="text-xs text-slate-300 font-medium">curl</span>
350
- <button type="button" onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
351
- </div>
352
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>curl http://127.0.0.1:50008/collections \
353
- -H "api-key: YOUR_QDRANT_API_KEY"</code></pre>
354
- </div>
355
- <p class="mb-4 text-xs text-text-secondary" data-i18n="gettingStarted.step1.memory.qdrantNote">When API key is enabled, all requests need header api-key. Dashboard: http://127.0.0.1:50008/dashboard</p>
356
-
357
- <!-- Nomic Embed -->
358
- <p class="font-semibold mb-2" data-i18n="gettingStarted.step1.memory.nomicTitle">2. Nomic Embed / Infinity (embeddings, port 50012)</p>
359
- <p class="text-xs text-text-secondary mb-1" data-i18n="gettingStarted.step1.memory.nomicCompose">nomic-embed/docker-compose.yml</p>
360
- <div class="bg-slate-900 rounded-lg overflow-hidden mb-3">
361
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
362
- <span class="text-xs text-slate-300 font-medium">docker-compose.yml</span>
363
- <button type="button" onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
364
- </div>
365
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>services:
366
- nomic-embed:
367
- image: michaelf34/infinity:0.0.70
368
- container_name: nomic-embed
369
- restart: unless-stopped
370
- ports:
371
- - "50012:7997"
372
- volumes:
373
- - hf_cache:/app/.cache
374
- environment:
375
- INFINITY_API_KEY: ${INFINITY_API_KEY}
376
- command:
377
- - v2
378
- - --model-id
379
- - nomic-ai/nomic-embed-text-v1.5
380
- - --revision
381
- - main
382
- - --dtype
383
- - float32
384
- - --batch-size
385
- - "8"
386
- - --engine
387
- - torch
388
- - --port
389
- - "7997"
390
- - --no-bettertransformer
391
- healthcheck:
392
- test:
393
- - "CMD"
394
- - "curl"
395
- - "-f"
396
- - "http://127.0.0.1:7997/health"
397
- interval: 30s
398
- timeout: 10s
399
- retries: 5
400
- start_period: 120s
401
-
402
- volumes:
403
- hf_cache:</code></pre>
404
- </div>
405
- <p class="text-xs text-text-secondary mb-1" data-i18n="gettingStarted.step1.memory.nomicEnv">nomic-embed/.env</p>
406
- <div class="bg-slate-900 rounded-lg overflow-hidden mb-3">
407
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
408
- <span class="text-xs text-slate-300 font-medium">.env</span>
409
- <button type="button" onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
410
- </div>
411
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code># Generate: python -c "import secrets; print(secrets.token_urlsafe(32))"
412
- INFINITY_API_KEY=change-me-to-a-long-random-string</code></pre>
413
- </div>
414
- <p class="text-xs font-medium mb-1" data-i18n="gettingStarted.step1.memory.nomicDeploy">Start embedding service</p>
415
- <div class="bg-slate-900 rounded-lg overflow-hidden mb-3">
416
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
417
- <span class="text-xs text-slate-300 font-medium">PowerShell / Bash</span>
418
- <button type="button" onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
419
- </div>
420
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>cd nomic-embed
421
- docker compose up -d
422
- docker logs -f nomic-embed
423
- # Wait for: ready to batch requests</code></pre>
424
- </div>
425
- <p class="text-xs font-medium mb-1" data-i18n="gettingStarted.step1.memory.nomicVerify">Verify embeddings</p>
426
- <div class="bg-slate-900 rounded-lg overflow-hidden mb-2">
427
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
428
- <span class="text-xs text-slate-300 font-medium">curl</span>
429
- <button type="button" onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
430
- </div>
431
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>curl http://127.0.0.1:50012/health
432
-
433
- curl http://127.0.0.1:50012/embeddings \
434
- -H "Authorization: Bearer YOUR_INFINITY_API_KEY" \
435
- -H "Content-Type: application/json" \
436
- -d '{"model":"nomic-ai/nomic-embed-text-v1.5","input":"hello world"}'
437
- # Expect data[0].embedding length = 768</code></pre>
438
- </div>
439
- <p class="mb-4 text-xs text-text-secondary" data-i18n="gettingStarted.step1.memory.nomicNote">First start downloads the model (~2–5 min). Use POST /embeddings (not /v1/embeddings). Returns 768-dim vectors.</p>
440
-
441
- <!-- MCP -->
442
- <p class="font-semibold mb-2" data-i18n="gettingStarted.step1.memory.mcpTitle">3. MCP client configuration</p>
443
- <div class="bg-slate-900 rounded-lg overflow-hidden mb-2">
444
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
445
- <span class="text-xs text-slate-300 font-medium">Cursor / Claude Desktop mcpServers</span>
446
- <button type="button" onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
447
- </div>
448
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>{
449
- "mcpServers": {
450
- "mcp-probe-kit": {
451
- "command": "npx",
452
- "args": ["-y", "mcp-probe-kit@latest"],
453
- "env": {
454
- "MEMORY_QDRANT_URL": "http://127.0.0.1:50008",
455
- "MEMORY_QDRANT_API_KEY": "same-as-qdrant-.env-QDRANT_API_KEY",
456
- "MEMORY_QDRANT_COLLECTION": "mcp_probe_memory",
457
- "MEMORY_EMBEDDING_PROVIDER": "openai-compatible",
458
- "MEMORY_EMBEDDING_URL": "http://127.0.0.1:50012/embeddings",
459
- "MEMORY_EMBEDDING_MODEL": "nomic-ai/nomic-embed-text-v1.5",
460
- "MEMORY_EMBEDDING_API_KEY": "same-as-nomic-embed-.env-INFINITY_API_KEY",
461
- "MEMORY_SEARCH_LIMIT": "3",
462
- "MEMORY_SUMMARY_MAX_CHARS": "280"
463
- }
464
- }
465
- }
466
- }</code></pre>
467
- </div>
468
- <p class="mb-4 text-xs text-text-secondary" data-i18n="gettingStarted.step1.memory.mcpNote">Use the same keys as in qdrant/.env and nomic-embed/.env. Restart Cursor after saving.</p>
469
-
470
- <p class="font-medium mb-2" data-i18n="gettingStarted.step1.memory.alternativesTitle">Other embedding options</p>
471
- <div class="space-y-3">
472
- <div>
473
- <p class="font-medium mb-2" data-i18n="gettingStarted.step1.memory.optionB.title">Option B: Qdrant + Ollama</p>
474
- <pre class="code-block mb-2 p-3 text-sm text-slate-200 bg-slate-900 rounded overflow-x-auto"><code>docker run -d --name mcp-qdrant -p 6333:6333 qdrant/qdrant
475
- ollama pull nomic-embed-text</code></pre>
476
- <pre class="code-block p-3 text-sm text-slate-200 bg-slate-900 rounded overflow-x-auto"><code>"MEMORY_QDRANT_URL": "http://127.0.0.1:6333",
477
- "MEMORY_EMBEDDING_PROVIDER": "ollama",
478
- "MEMORY_EMBEDDING_URL": "http://127.0.0.1:11434/api/embeddings",
479
- "MEMORY_EMBEDDING_MODEL": "nomic-embed-text"</code></pre>
480
- </div>
481
- <div>
482
- <p class="font-medium mb-2" data-i18n="gettingStarted.step1.memory.optionC.title">Option C: Qdrant + hosted OpenAI-compatible API</p>
483
- <pre class="code-block p-3 text-sm text-slate-200 bg-slate-900 rounded overflow-x-auto"><code>"MEMORY_QDRANT_URL": "http://127.0.0.1:50008",
484
- "MEMORY_EMBEDDING_PROVIDER": "openai-compatible",
485
- "MEMORY_EMBEDDING_URL": "https://your-embedding-endpoint/v1/embeddings",
486
- "MEMORY_EMBEDDING_API_KEY": "your-api-key",
487
- "MEMORY_EMBEDDING_MODEL": "text-embedding-3-small"</code></pre>
488
- </div>
489
- </div>
490
- <div class="mt-3">
491
- <p class="font-medium mb-1" data-i18n="gettingStarted.step1.memory.env.title">Environment Variables</p>
492
- <ul class="list-disc list-inside space-y-1">
493
- <li><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_QDRANT_URL</code><span data-i18n="gettingStarted.step1.memory.env.item1">: Qdrant endpoint, required by all memory features</span></li>
494
- <li><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_QDRANT_API_KEY</code><span data-i18n="gettingStarted.step1.memory.env.item2">: Optional Qdrant API key</span></li>
495
- <li><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_QDRANT_COLLECTION</code><span data-i18n="gettingStarted.step1.memory.env.item3">: Collection name, default </span><code class="bg-gray-200 px-1 rounded text-xs">mcp_probe_memory</code></li>
496
- <li><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_EMBEDDING_PROVIDER</code><span data-i18n="gettingStarted.step1.memory.env.item4Prefix">: </span><code class="bg-gray-200 px-1 rounded text-xs">ollama</code><span data-i18n="gettingStarted.step1.memory.env.item4Middle"> or </span><code class="bg-gray-200 px-1 rounded text-xs">openai-compatible</code></li>
497
- <li><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_EMBEDDING_URL</code><span data-i18n="gettingStarted.step1.memory.env.item5">: Embedding API endpoint</span></li>
498
- <li><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_EMBEDDING_API_KEY</code><span data-i18n="gettingStarted.step1.memory.env.item6">: Embedding API key, usually empty for Ollama</span></li>
499
- <li><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_EMBEDDING_MODEL</code><span data-i18n="gettingStarted.step1.memory.env.item7Prefix">: Embedding model name, default </span><code class="bg-gray-200 px-1 rounded text-xs">nomic-embed-text</code></li>
500
- <li><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_SEARCH_LIMIT</code><span data-i18n="gettingStarted.step1.memory.env.item8Prefix">: Default search result limit, default </span><code class="bg-gray-200 px-1 rounded text-xs">3</code></li>
501
- <li><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_SUMMARY_MAX_CHARS</code><span data-i18n="gettingStarted.step1.memory.env.item9Prefix">: Summary max characters, default </span><code class="bg-gray-200 px-1 rounded text-xs">280</code></li>
502
- </ul>
503
- </div>
504
- <div class="mt-3">
505
- <p class="font-medium mb-1" data-i18n="gettingStarted.step1.memory.behavior.title">Behavior Notes</p>
506
- <ul class="list-disc list-inside space-y-1">
507
- <li><span data-i18n="gettingStarted.step1.memory.behavior.item1Prefix">Memory writes require </span><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_QDRANT_URL</code>, <code class="bg-gray-200 px-1 rounded text-xs">MEMORY_EMBEDDING_URL</code><span data-i18n="gettingStarted.step1.memory.behavior.item1Middle"> and </span><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_EMBEDDING_MODEL</code></li>
508
- <li><span data-i18n="gettingStarted.step1.memory.behavior.item2Prefix">Read-only memory access (such as read by ID) only requires </span><code class="bg-gray-200 px-1 rounded text-xs">MEMORY_QDRANT_URL</code></li>
509
- <li><span data-i18n="gettingStarted.step1.memory.behavior.item3Prefix">The first write auto-creates the Qdrant collection and uses </span><code class="bg-gray-200 px-1 rounded text-xs">Cosine</code></li>
510
- <li data-i18n="gettingStarted.step1.memory.behavior.item4">Vector dimension is inferred automatically from the first embedding response</li>
511
- </ul>
512
- </div>
513
- <div class="mt-3">
514
- <p class="font-medium mb-1" data-i18n="gettingStarted.step1.memory.cursor.title">Cursor History Tools</p>
515
- <ul class="list-disc list-inside space-y-1">
516
- <li><code class="bg-gray-200 px-1 rounded text-xs">cursor_read_conversation</code><span data-i18n="gettingStarted.step1.memory.cursor.item1"> do not depend on Qdrant or embeddings</span></li>
517
- <li data-i18n="gettingStarted.step1.memory.cursor.item2">Supports local Cursor installations on Windows / macOS / Linux</li>
518
- <li><span data-i18n="gettingStarted.step1.memory.cursor.item3Prefix">Reads the local Cursor database from </span><code class="bg-gray-200 px-1 rounded text-xs">User/globalStorage/state.vscdb</code></li>
519
- </ul>
520
- </div>
521
- </div>
522
-
523
- <!-- Source build -->
524
- <div class="border border-border rounded-lg overflow-hidden">
525
- <button onclick="toggleInstall('source')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
526
- <div class="flex items-center gap-2">
527
- <span class="text-lg">🔧</span>
528
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.step1.source.title">Build from Source</span>
529
- </div>
530
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="source-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
531
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
532
- </svg>
533
- </button>
534
- <div id="source-content" class="hidden p-4 border-t border-border">
535
- <p class="text-text-secondary mb-3 text-sm" data-i18n="gettingStarted.step1.source.description">Build from source code, suitable for developers:</p>
536
-
537
- <div class="mb-4">
538
- <p class="font-medium text-sm mb-2" data-i18n="gettingStarted.step1.source.step1">1. Clone repository</p>
539
- <div class="bg-slate-900 rounded-lg overflow-hidden">
540
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
541
- <span class="text-xs text-slate-300 font-medium">Bash</span>
542
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
543
- </div>
544
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>git clone https://github.com/mybolide/mcp-probe-kit.git
545
- cd mcp-probe-kit</code></pre>
546
- </div>
547
- </div>
548
-
549
- <div class="mb-4">
550
- <p class="font-medium text-sm mb-2" data-i18n="gettingStarted.step1.source.step2">2. Install dependencies and build</p>
551
- <div class="bg-slate-900 rounded-lg overflow-hidden">
552
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
553
- <span class="text-xs text-slate-300 font-medium">Bash</span>
554
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
555
- </div>
556
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>npm install
557
- npm run build</code></pre>
558
- </div>
559
- </div>
560
-
561
- <div class="mb-4">
562
- <p class="font-medium text-sm mb-2" data-i18n="gettingStarted.step1.source.step3">3. Configuration file</p>
563
- <div class="bg-slate-900 rounded-lg overflow-hidden">
564
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
565
- <span class="text-xs text-slate-300 font-medium">JSON</span>
566
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
567
- </div>
568
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>{
569
- "mcpServers": {
570
- "mcp-probe-kit": {
571
- "command": "node",
572
- "args": ["/path/to/mcp-probe-kit/build/index.js"]
573
- }
574
- }
575
- }</code></pre>
576
- </div>
577
- </div>
578
-
579
- <div class="p-3 bg-blue-50 border-l-3 border-blue-500 rounded-r text-sm text-text-primary mb-2">
580
- <strong data-i18n="gettingStarted.step1.source.tip">Tip:</strong><span data-i18n="gettingStarted.step1.source.tipText">Windows users should use full path, e.g.</span> <code class="bg-gray-200 px-1 rounded text-xs">D:/workspace/mcp-probe-kit/build/index.js</code>
581
- </div>
582
- <div class="p-3 bg-amber-50 border-l-3 border-amber-500 rounded-r text-sm text-text-primary">
583
- <strong data-i18n="gettingStarted.step1.source.note">Note:</strong><span data-i18n="gettingStarted.step1.source.noteText">After modifying code, need to re-run</span> <code class="bg-gray-200 px-1 rounded text-xs">npm run build</code> <span data-i18n="gettingStarted.step1.source.compileText">to compile</span>
584
- </div>
585
- </div>
586
- </div>
587
-
588
- <div class="mt-5 p-4 bg-blue-50 border-l-4 border-blue-500 rounded-r text-sm text-text-primary">
589
- <h3 class="font-semibold mb-2" data-i18n="gettingStarted.step1.windowsGraph.title">Windows Notes for Graph Tools</h3>
590
- <p class="mb-2 text-text-secondary" data-i18n="gettingStarted.step1.windowsGraph.description">Graph-aware tools may have a slower first run on Windows because GitNexus is started through npx by default.</p>
591
- <ul class="list-disc list-inside space-y-1 mb-3">
592
- <li data-i18n="gettingStarted.step1.windowsGraph.item1">The first cold start may take 20+ seconds while npx checks or downloads dependencies.</li>
593
- <li data-i18n="gettingStarted.step1.windowsGraph.item2">Some GitNexus dependencies use tree-sitter native modules and may require Visual Studio Build Tools.</li>
594
- <li data-i18n="gettingStarted.step1.windowsGraph.item3">If your MCP client supports env, prefer a preinstalled gitnexus CLI and raise GitNexus timeouts.</li>
595
- <li data-i18n="gettingStarted.step1.windowsGraph.item4">Quick install Build Tools on Windows: winget install Microsoft.VisualStudio.2022.BuildTools</li>
596
- </ul>
597
- <p class="mb-2" data-i18n="gettingStarted.step1.windowsGraph.quickInstallTitle">Quick install command:</p>
598
- <pre class="code-block mb-3 p-3 text-sm text-slate-200 bg-slate-900 rounded overflow-x-auto"><code>winget install Microsoft.VisualStudio.2022.BuildTools</code></pre>
599
- <p class="mb-2" data-i18n="gettingStarted.step1.windowsGraph.exampleTitle">Example using a preinstalled gitnexus CLI:</p>
600
- <div class="bg-slate-900 rounded-lg overflow-hidden">
601
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
602
- <span class="text-xs text-slate-300 font-medium">JSON</span>
603
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors">📋</button>
604
- </div>
605
- <pre class="code-block p-3 text-sm text-slate-200 overflow-x-auto"><code>{
606
- "mcpServers": {
607
- "mcp-probe-kit": {
608
- "command": "mcp-probe-kit",
609
- "env": {
610
- "MCP_GITNEXUS_COMMAND": "gitnexus",
611
- "MCP_GITNEXUS_ARGS": "mcp",
612
- "MCP_GITNEXUS_CONNECT_TIMEOUT_MS": "30000",
613
- "MCP_GITNEXUS_TIMEOUT_MS": "45000"
614
- }
615
- }
616
- }
617
- }</code></pre>
618
- </div>
619
- </div>
620
- </div>
621
- </section>
622
-
623
- <!-- Step 2: Configuration file locations -->
624
- <section class="bg-white rounded-xl border border-border p-4 sm:p-6 mb-6 shadow-sm">
625
- <div class="flex items-start gap-3 mb-4">
626
- <div class="w-7 h-7 sm:w-8 sm:h-8 bg-gradient-to-br from-primary to-primary-hover text-white rounded-full flex items-center justify-center font-semibold text-sm sm:text-base flex-shrink-0">2</div>
627
- <h2 class="text-lg sm:text-xl font-semibold text-text-primary" data-i18n="gettingStarted.step2.title">Locate Configuration File</h2>
628
- </div>
629
-
630
- <p class="text-text-secondary mb-4 text-sm" data-i18n="gettingStarted.step2.description">Find the corresponding configuration file based on your MCP client:</p>
631
-
632
- <!-- Client selection -->
633
- <div class="space-y-3">
634
- <!-- Cursor / Cline -->
635
- <div class="border border-border rounded-lg overflow-hidden">
636
- <button onclick="toggleClient('cursor')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
637
- <div class="flex items-center gap-2">
638
- <span class="text-lg">📝</span>
639
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.step2.cursor.title">Cursor / Cline</span>
640
- </div>
641
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="cursor-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
642
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
643
- </svg>
644
- </button>
645
- <div id="cursor-content" class="hidden p-4 border-t border-border">
646
- <p class="text-text-secondary text-sm mb-3"><span data-i18n="gettingStarted.step2.cursor.description">Create or edit in project root directory</span> <code class="bg-gray-200 px-1 rounded text-xs">.cursor/mcp.json</code> or <code class="bg-gray-200 px-1 rounded text-xs">.cline/mcp.json</code></p>
647
- <div class="p-3 bg-blue-50 border-l-3 border-blue-500 rounded-r text-sm">
648
- <strong>💡 <span data-i18n="gettingStarted.step2.cursor.tip">Tip:</span></strong><span data-i18n="gettingStarted.step2.cursor.tipText">Cursor and Cline use project-level configuration, each project can have independent MCP server configuration.</span>
649
- </div>
650
- </div>
651
- </div>
652
-
653
- <!-- Claude Desktop Windows -->
654
- <div class="border border-border rounded-lg overflow-hidden">
655
- <button onclick="toggleClient('claude-win')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
656
- <div class="flex items-center gap-2">
657
- <span class="text-lg">🪟</span>
658
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.step2.claudeWin.title">Claude Desktop (Windows)</span>
659
- </div>
660
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="claude-win-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
661
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
662
- </svg>
663
- </button>
664
- <div id="claude-win-content" class="hidden p-4 border-t border-border">
665
- <p class="text-text-secondary text-sm mb-2" data-i18n="gettingStarted.step2.claudeWin.path">Configuration file path:</p>
666
- <div class="bg-slate-900 rounded-lg overflow-hidden">
667
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
668
- <span class="text-xs text-slate-300 font-medium">Path</span>
669
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
670
- </div>
671
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>%APPDATA%\Claude\claude_desktop_config.json</code></pre>
672
- </div>
673
- <p class="text-text-secondary text-sm mt-2"><span data-i18n="gettingStarted.step2.claudeWin.example">Example:</span><code class="bg-gray-200 px-1 rounded text-xs">C:\Users\YourName\AppData\Roaming\Claude\claude_desktop_config.json</code></p>
674
- </div>
675
- </div>
676
-
677
- <!-- Claude Desktop macOS -->
678
- <div class="border border-border rounded-lg overflow-hidden">
679
- <button onclick="toggleClient('claude-mac')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
680
- <div class="flex items-center gap-2">
681
- <span class="text-lg">🍎</span>
682
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.step2.claudeMac.title">Claude Desktop (macOS)</span>
683
- </div>
684
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="claude-mac-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
685
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
686
- </svg>
687
- </button>
688
- <div id="claude-mac-content" class="hidden p-4 border-t border-border">
689
- <p class="text-text-secondary text-sm mb-2" data-i18n="gettingStarted.step2.claudeMac.path">Configuration file path:</p>
690
- <div class="bg-slate-900 rounded-lg overflow-hidden">
691
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
692
- <span class="text-xs text-slate-300 font-medium">Path</span>
693
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
694
- </div>
695
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>~/Library/Application Support/Claude/claude_desktop_config.json</code></pre>
696
- </div>
697
- </div>
698
- </div>
699
-
700
- <!-- OpenCode -->
701
- <div class="border border-border rounded-lg overflow-hidden">
702
- <button onclick="toggleClient('opencode')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
703
- <div class="flex items-center gap-2">
704
- <span class="text-lg">🤖</span>
705
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.step2.opencode.title">OpenCode</span>
706
- </div>
707
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="opencode-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
708
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
709
- </svg>
710
- </button>
711
- <div id="opencode-content" class="hidden p-4 border-t border-border">
712
- <p class="text-text-secondary text-sm mb-3"><span data-i18n="gettingStarted.step2.opencode.description">Create or edit</span> <code class="bg-gray-200 px-1 rounded text-xs">opencode.json</code> <span data-i18n="gettingStarted.step2.opencode.description2">in project root, or globally at</span> <code class="bg-gray-200 px-1 rounded text-xs">~/.config/opencode/opencode.json</code></p>
713
- <div class="bg-slate-900 rounded-lg overflow-hidden">
714
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
715
- <span class="text-xs text-slate-300 font-medium">opencode.json</span>
716
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors" data-i18n="gettingStarted.common.copy">Copy</button>
717
- </div>
718
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>{
719
- "mcp": {
720
- "mcp-probe-kit": {
721
- "type": "local",
722
- "command": ["npx", "-y", "mcp-probe-kit@latest"],
723
- "enabled": true
724
- }
725
- }
726
- }</code></pre>
727
- </div>
728
- <div class="p-3 mt-3 bg-blue-50 border-l-3 border-blue-500 rounded-r text-sm text-text-primary">
729
- <strong>💡 <span data-i18n="gettingStarted.step2.opencode.note">Note:</span></strong><span data-i18n="gettingStarted.step2.opencode.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>.</span>
730
- </div>
731
- </div>
732
- </div>
733
- </div>
734
- </section>
735
-
736
- <!-- Step 3: Verify installation -->
737
- <section class="bg-white rounded-xl border border-border p-4 sm:p-6 mb-6 shadow-sm">
738
- <div class="flex items-start gap-3 mb-4">
739
- <div class="w-7 h-7 sm:w-8 sm:h-8 bg-gradient-to-br from-primary to-primary-hover text-white rounded-full flex items-center justify-center font-semibold text-sm sm:text-base flex-shrink-0">3</div>
740
- <h2 class="text-lg sm:text-xl font-semibold text-text-primary" data-i18n="gettingStarted.step3.title">Verify Installation</h2>
741
- </div>
742
-
743
- <div class="pl-0 sm:pl-0">
744
- <p class="text-text-secondary mb-3 text-sm" data-i18n="gettingStarted.step3.description">After completing configuration, verify with the following steps:</p>
745
- <ol class="list-decimal list-inside space-y-2 text-sm text-text-primary mb-4">
746
- <li data-i18n="gettingStarted.step3.step1">Restart MCP client (Cursor / Cline / Claude Desktop)</li>
747
- <li><span data-i18n="gettingStarted.step3.step2">Type in chat window:</span><code class="bg-gray-200 px-1 rounded text-xs" data-i18n="gettingStarted.step3.step2Command">Please use gencommit tool to generate a test commit message</code></li>
748
- <li data-i18n="gettingStarted.step3.step3">If it returns a commit message following Conventional Commits specification, installation is successful!</li>
749
- </ol>
750
-
751
- <div class="p-3 bg-green-50 border-l-3 border-green-500 rounded-r text-sm text-text-primary mb-2">
752
- <strong>✅ <span data-i18n="gettingStarted.step3.success">Success example:</span></strong><span data-i18n="gettingStarted.step3.successText">AI returns something like</span> <code class="bg-gray-200 px-1 rounded text-xs" data-i18n="gettingStarted.step3.successCode">feat: add user authentication</code> <span data-i18n="gettingStarted.step3.successExample">message</span>
753
- </div>
754
- <div class="p-3 bg-red-50 border-l-3 border-red-500 rounded-r text-sm">
755
- <strong>❌ <span data-i18n="gettingStarted.step3.issues">Common issues:</span></strong>
756
- <ul class="list-disc list-inside mt-1 text-text-primary">
757
- <li data-i18n="gettingStarted.step3.issue1">"Tool not found" → Check configuration file format</li>
758
- <li data-i18n="gettingStarted.step3.issue2">"Command not found" → Confirm Node.js is installed</li>
759
- <li data-i18n="gettingStarted.step3.issue3">Windows users → Ensure using npx method</li>
760
- </ul>
761
- </div>
762
- </div>
763
- </section>
764
-
765
- <!-- Step 4: Delegated orchestration -->
766
- <section class="bg-white rounded-xl border border-border p-4 sm:p-6 mb-6 shadow-sm">
767
- <div class="flex items-start gap-3 mb-4">
768
- <div class="w-7 h-7 sm:w-8 sm:h-8 bg-gradient-to-br from-primary to-primary-hover text-white rounded-full flex items-center justify-center font-semibold text-sm sm:text-base flex-shrink-0">4</div>
769
- <h2 class="text-lg sm:text-xl font-semibold text-text-primary" data-i18n="gettingStarted.step4.title">Delegated Orchestration Protocol</h2>
770
- </div>
771
-
772
- <div class="pl-0 sm:pl-0 text-sm text-text-primary space-y-3">
773
- <p><code class="bg-gray-200 px-1 rounded text-xs">start_*</code> <span data-i18n="gettingStarted.step4.description">orchestration tools do not execute operations directly, but return an executable plan.</span></p>
774
- <p><strong data-i18n="gettingStarted.step4.keyFields">Key fields:</strong><code class="bg-gray-200 px-1 rounded text-xs">mode: "delegated"</code>, <code class="bg-gray-200 px-1 rounded text-xs">steps[]</code>, <code class="bg-gray-200 px-1 rounded text-xs">outputs[]</code></p>
775
-
776
- <div class="bg-slate-900 rounded-lg overflow-hidden">
777
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
778
- <span class="text-xs text-slate-300 font-medium" data-i18n="gettingStarted.step4.planExample">Plan Example</span>
779
- </div>
780
- <pre class="code-block p-4 text-sm text-slate-200 overflow-x-auto"><code>{
781
- "mode": "delegated",
782
- "steps": [
783
- {
784
- "id": "spec",
785
- "tool": "add_feature",
786
- "args": { "feature_name": "user-auth" },
787
- "outputs": ["docs/specs/user-auth/requirements.md"]
788
- }
789
- ]
790
- }</code></pre>
791
- </div>
792
-
793
- <div class="p-3 bg-blue-50 border-l-3 border-blue-500 rounded-r text-sm">
794
- <strong>💡 <span data-i18n="gettingStarted.step4.tip">Key point:</span></strong><span data-i18n="gettingStarted.step4.tipText">Execute</span> <code class="bg-gray-200 px-1 rounded text-xs">steps</code><span data-i18n="gettingStarted.step4.tipText2">in order, and ensure</span> <code class="bg-gray-200 px-1 rounded text-xs">outputs</code> <span data-i18n="gettingStarted.step4.tipText3">files are actually written to disk</span>
795
- </div>
796
- </div>
797
- </section>
798
-
799
- <!-- Common issues -->
800
- <section class="bg-white rounded-xl border border-border p-4 sm:p-6 mb-6 shadow-sm">
801
- <h2 class="text-lg sm:text-xl font-semibold text-text-primary mb-4" data-i18n="gettingStarted.faq.title">⚠️ Common Issues</h2>
802
-
803
- <!-- Issue 1 -->
804
- <div class="border border-border rounded-lg overflow-hidden mb-4">
805
- <button onclick="toggleFaq('faq1')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
806
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.faq.q1.title">Issue 1: Module resolution error caused by npx cache</span>
807
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="faq1-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
808
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
809
- </svg>
810
- </button>
811
- <div id="faq1-content" class="hidden p-4 border-t border-border">
812
- <div class="p-3 bg-red-50 border-l-3 border-red-500 rounded-r text-sm text-text-primary mb-3">
813
- <strong data-i18n="gettingStarted.faq.q1.error">Error message:</strong>
814
- <pre class="code-block mt-2 text-xs text-slate-200 bg-slate-900 p-2 rounded overflow-x-auto"><code>Error: Cannot find package 'yallist'</code></pre>
815
- </div>
816
- <p class="text-sm text-text-primary mb-2"><strong data-i18n="gettingStarted.faq.q1.solution">Solution:</strong><span data-i18n="gettingStarted.faq.q1.solutionText">Clear npx cache</span></p>
817
- <div class="space-y-2">
818
- <div class="bg-slate-900 rounded-lg overflow-hidden">
819
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
820
- <span class="text-xs text-slate-300 font-medium">Windows CMD</span>
821
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors">📋</button>
822
- </div>
823
- <pre class="code-block p-3 text-sm text-slate-200 overflow-x-auto"><code>rmdir /s /q %LOCALAPPDATA%\npm-cache\_npx</code></pre>
824
- </div>
825
- <div class="bg-slate-900 rounded-lg overflow-hidden">
826
- <div class="flex items-center justify-between px-3 py-2 bg-slate-800">
827
- <span class="text-xs text-slate-300 font-medium">macOS/Linux</span>
828
- <button onclick="copyCode(this)" class="text-xs text-slate-300 hover:text-white transition-colors">📋</button>
829
- </div>
830
- <pre class="code-block p-3 text-sm text-slate-200 overflow-x-auto"><code>rm -rf ~/.npm/_npx</code></pre>
831
- </div>
832
- </div>
833
- <p class="text-sm text-text-secondary mt-2" data-i18n="gettingStarted.faq.q1.restart">Then restart MCP client</p>
834
- </div>
835
- </div>
836
-
837
- <!-- Issue 2 -->
838
- <div class="border border-border rounded-lg overflow-hidden">
839
- <button onclick="toggleFaq('faq2')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
840
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.faq.q2.title">Issue 2: MCP server connection failed</span>
841
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="faq2-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
842
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
843
- </svg>
844
- </button>
845
- <div id="faq2-content" class="hidden p-4 border-t border-border">
846
- <div class="p-3 bg-red-50 border-l-3 border-red-500 rounded-r text-sm text-text-primary mb-3">
847
- <strong data-i18n="gettingStarted.faq.q2.possibleReasons">Possible reasons:</strong>
848
- <ul class="list-disc list-inside mt-1">
849
- <li data-i18n="gettingStarted.faq.q2.reason1">Node.js version too low (requires >= 16.0.0)</li>
850
- <li data-i18n="gettingStarted.faq.q2.reason2">Dependencies not installed or corrupted</li>
851
- <li data-i18n="gettingStarted.faq.q2.reason3">Configuration file format error</li>
852
- </ul>
853
- </div>
854
- <p class="text-sm text-text-primary mb-2"><strong data-i18n="gettingStarted.faq.q2.solution">Solution:</strong></p>
855
- <ol class="list-decimal list-inside space-y-2 text-sm text-text-primary">
856
- <li><span data-i18n="gettingStarted.faq.q2.step1">Check Node.js version:</span>
857
- <div class="bg-slate-900 rounded-lg overflow-hidden mt-1">
858
- <pre class="code-block p-3 text-sm text-slate-200 overflow-x-auto"><code>node --version</code></pre>
859
- </div>
860
- </li>
861
- <li data-i18n="gettingStarted.faq.q2.step2">If below v16, please upgrade Node.js</li>
862
- <li><span data-i18n="gettingStarted.faq.q2.step3">Clear cache and reinstall:</span>
863
- <div class="bg-slate-900 rounded-lg overflow-hidden mt-1">
864
- <pre class="code-block p-3 text-sm text-slate-200 overflow-x-auto"><code>npm cache clean --force</code></pre>
865
- </div>
866
- </li>
867
- <li data-i18n="gettingStarted.faq.q2.step4">Check if configuration file JSON format is correct</li>
868
- </ol>
869
- </div>
870
- </div>
871
-
872
- <div class="border border-border rounded-lg overflow-hidden mt-4">
873
- <button onclick="toggleFaq('faq3')" class="w-full px-4 py-3 bg-bg-page flex items-center justify-between text-left hover:bg-gray-100 transition-colors">
874
- <span class="font-medium text-text-primary" data-i18n="gettingStarted.faq.q3.title">Issue 3: Graph-aware tools are slow or time out on first run on Windows</span>
875
- <svg class="w-5 h-5 text-text-tertiary transition-transform" id="faq3-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
876
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>
877
- </svg>
878
- </button>
879
- <div id="faq3-content" class="hidden p-4 border-t border-border">
880
- <div class="p-3 bg-yellow-50 border-l-3 border-yellow-500 rounded-r text-sm text-text-primary mb-3">
881
- <strong data-i18n="gettingStarted.faq.q3.affected">Affected tools:</strong>
882
- <div class="mt-1"><code class="bg-gray-200 px-1 rounded text-xs">code_insight</code>, <code class="bg-gray-200 px-1 rounded text-xs">start_feature</code>, <code class="bg-gray-200 px-1 rounded text-xs">start_bugfix</code>, <code class="bg-gray-200 px-1 rounded text-xs">init_project_context</code></div>
883
- </div>
884
- <div class="p-3 bg-red-50 border-l-3 border-red-500 rounded-r text-sm text-text-primary mb-3">
885
- <strong data-i18n="gettingStarted.faq.q3.error">Typical error:</strong>
886
- <pre class="code-block mt-2 text-xs text-slate-200 bg-slate-900 p-2 rounded overflow-x-auto"><code>gyp ERR! find VS could not find a version of Visual Studio 2017 or newer to use
887
- gyp ERR! find VS - missing any VC++ toolset</code></pre>
888
- </div>
889
- <p class="text-sm text-text-primary mb-2"><strong data-i18n="gettingStarted.faq.q3.reasons">Common causes:</strong></p>
890
- <ul class="list-disc list-inside space-y-1 text-sm text-text-primary mb-3">
891
- <li data-i18n="gettingStarted.faq.q3.reason1">npx -y gitnexus@latest mcp may spend 20+ seconds checking or downloading dependencies on cold start.</li>
892
- <li data-i18n="gettingStarted.faq.q3.reason2">GitNexus depends on tree-sitter native modules, which may require Visual Studio Build Tools on Windows.</li>
893
- </ul>
894
- <p class="text-sm text-text-primary mb-2"><strong data-i18n="gettingStarted.faq.q3.solution">Recommended actions:</strong></p>
895
- <ol class="list-decimal list-inside space-y-2 text-sm text-text-primary">
896
- <li data-i18n="gettingStarted.faq.q3.step1">Install Visual Studio Build Tools with the C++ workload.</li>
897
- <li data-i18n="gettingStarted.faq.q3.step2">Retry once after dependencies finish installing so the first cold start is not mistaken for steady-state latency.</li>
898
- <li data-i18n="gettingStarted.faq.q3.step3">If your client supports env, prefer a preinstalled gitnexus CLI and raise MCP_GITNEXUS_CONNECT_TIMEOUT_MS plus MCP_GITNEXUS_TIMEOUT_MS.</li>
899
- </ol>
900
- </div>
901
- </div>
902
- </section>
903
-
904
- <!-- Footer -->
905
- <footer class="text-center text-sm text-text-tertiary py-4 border-t border-border">
906
- <p>Made with ❤️ by <a href="https://www.bytezonex.com/" target="_blank" rel="noopener" class="text-primary hover:underline">Kyle</a></p>
907
- <p class="mt-1">© 2024-2026 MCP Probe Kit · <a href="https://github.com/mybolide/mcp-probe-kit" target="_blank" rel="noopener" class="text-primary hover:underline">GitHub ↗</a></p>
908
- </footer>
909
- </div>
910
- </main>
911
-
912
- <script>
913
- // Sidebar toggle
914
- function toggleSidebar() {
915
- const sidebar = document.getElementById('sidebar');
916
- const backdrop = document.getElementById('backdrop');
917
- const isOpen = sidebar.classList.contains('open');
918
- if (isOpen) {
919
- sidebar.classList.remove('open');
920
- backdrop.classList.remove('active');
921
- } else {
922
- sidebar.classList.add('open');
923
- backdrop.classList.add('active');
924
- }
925
- }
926
-
927
- // Installation accordion
928
- function toggleInstall(type) {
929
- const content = document.getElementById(type + '-content');
930
- const icon = document.getElementById(type + '-icon');
931
- content.classList.toggle('hidden');
932
- icon.style.transform = content.classList.contains('hidden') ? '' : 'rotate(180deg)';
933
- }
934
-
935
- // Client accordion
936
- function toggleClient(type) {
937
- const content = document.getElementById(type + '-content');
938
- const icon = document.getElementById(type + '-icon');
939
- content.classList.toggle('hidden');
940
- icon.style.transform = content.classList.contains('hidden') ? '' : 'rotate(180deg)';
941
- }
942
-
943
- // FAQ accordion
944
- function toggleFaq(id) {
945
- const content = document.getElementById(id + '-content');
946
- const icon = document.getElementById(id + '-icon');
947
- content.classList.toggle('hidden');
948
- icon.style.transform = content.classList.contains('hidden') ? '' : 'rotate(180deg)';
949
- }
950
-
951
- // Copy code block
952
- function copyCode(btn) {
953
- const code = btn.closest('.bg-slate-900').querySelector('code');
954
- navigator.clipboard.writeText(code.textContent).then(() => {
955
- const originalText = btn.textContent;
956
- const copiedText = typeof t === 'function' ? t('gettingStarted.common.copied') : 'Copied';
957
- btn.textContent = copiedText;
958
- setTimeout(() => btn.textContent = originalText, 2000);
959
- });
960
- }
961
- </script>
962
- <script src="../assets/js/i18n.js"></script>
963
- </body>
964
- </html>