mcp-probe-kit 3.0.23 → 3.0.24
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 +2 -2
- package/build/lib/__tests__/memory-injection.unit.test.js +1 -0
- package/build/lib/__tests__/memory-orchestration.unit.test.js +4 -0
- package/build/lib/memory-client.d.ts +2 -0
- package/build/lib/memory-client.js +1 -0
- package/build/lib/memory-config.d.ts +2 -0
- package/build/lib/memory-config.js +1 -0
- package/build/lib/memory-orchestration.d.ts +4 -0
- package/build/lib/memory-orchestration.js +28 -5
- package/build/tools/__tests__/read_memory_asset.unit.test.d.ts +1 -0
- package/build/tools/__tests__/read_memory_asset.unit.test.js +75 -0
- package/build/tools/__tests__/search_memory.unit.test.js +7 -1
- package/build/tools/read_memory_asset.js +2 -1
- package/build/tools/search_memory.js +1 -0
- package/docs/data/tools.js +2 -2
- package/docs/i18n/all-tools/en.json +2 -2
- package/docs/i18n/all-tools/zh-CN.json +2 -2
- package/docs/i18n/en.json +3 -3
- package/docs/i18n/ja.json +2 -2
- package/docs/i18n/ko.json +2 -2
- package/docs/i18n/zh-CN.json +3 -3
- package/docs/memory-local-setup.md +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -100,9 +100,9 @@ A powerful MCP (Model Context Protocol) server providing **27 tools** covering t
|
|
|
100
100
|
- Linux: `~/.config/Cursor/User/globalStorage/state.vscdb`
|
|
101
101
|
|
|
102
102
|
**Memory tools:**
|
|
103
|
-
- `search_memory` - Semantic search across the shared memory pool (optionally prefer `type` / `tags`);
|
|
103
|
+
- `search_memory` - Semantic search across the shared memory pool (optionally prefer `type` / `tags`); text output includes `id`, `score`, summary, description, and a `--- content ---` body (default up to 1500 chars via `MEMORY_SEARCH_CONTENT_MAX_CHARS`)
|
|
104
104
|
- `memorize_asset` - Persist reusable code/spec/pattern assets into vector memory
|
|
105
|
-
- `read_memory_asset` - Read full asset content by `asset_id`
|
|
105
|
+
- `read_memory_asset` - Read full asset content by `asset_id` (text output includes the full `content` body)
|
|
106
106
|
- `scan_and_extract_patterns` - Extract reusable patterns from code/file/directory before deciding whether to persist
|
|
107
107
|
|
|
108
108
|
**Cross-repo memory pools:** do not rely on `source_project` / `source_path` for shared retrieval; put file paths in `content` instead. Search injection hides foreign `sourcePath` unless `MEMORY_REPO_ID` matches or `MEMORY_SEARCH_SHOW_SOURCE=true`.
|
|
@@ -20,6 +20,7 @@ describe('memory injection auto-load', () => {
|
|
|
20
20
|
type: 'bugfix',
|
|
21
21
|
description: 'Feishu proxy mismatch',
|
|
22
22
|
summary: 'proxy caused 400 on HTTPS',
|
|
23
|
+
content: '【现象】submit 成功但 sync_failed\n【根因】HTTP_PROXY 污染\n【修复】proxy:false',
|
|
23
24
|
tags: ['bugfix', 'proxy'],
|
|
24
25
|
},
|
|
25
26
|
],
|
|
@@ -20,6 +20,7 @@ describe('memory-orchestration', () => {
|
|
|
20
20
|
type: 'bugfix',
|
|
21
21
|
description: 'desc',
|
|
22
22
|
summary: 'summary',
|
|
23
|
+
content: '',
|
|
23
24
|
tags: ['bugfix'],
|
|
24
25
|
sourceProject: 'zhixing/gongyingshang',
|
|
25
26
|
sourcePath: 'admin-api/app.js',
|
|
@@ -41,6 +42,7 @@ describe('memory-orchestration', () => {
|
|
|
41
42
|
type: 'bugfix',
|
|
42
43
|
description: '',
|
|
43
44
|
summary: '',
|
|
45
|
+
content: '',
|
|
44
46
|
tags: [],
|
|
45
47
|
sourceProject: 'zhixing/gongyingshang',
|
|
46
48
|
sourcePath: 'admin-api/app.js',
|
|
@@ -52,6 +54,7 @@ describe('memory-orchestration', () => {
|
|
|
52
54
|
type: 'bugfix',
|
|
53
55
|
description: '',
|
|
54
56
|
summary: '',
|
|
57
|
+
content: '',
|
|
55
58
|
tags: [],
|
|
56
59
|
sourceProject: 'other/repo',
|
|
57
60
|
sourcePath: 'src/index.ts',
|
|
@@ -73,6 +76,7 @@ describe('memory-orchestration', () => {
|
|
|
73
76
|
type: 'bugfix',
|
|
74
77
|
description: '',
|
|
75
78
|
summary: 's',
|
|
79
|
+
content: '',
|
|
76
80
|
tags: [],
|
|
77
81
|
sourcePath: 'admin-api/app.js',
|
|
78
82
|
},
|
|
@@ -23,6 +23,8 @@ export interface MemorySearchResult {
|
|
|
23
23
|
type: string;
|
|
24
24
|
description: string;
|
|
25
25
|
summary: string;
|
|
26
|
+
/** Full payload content from Qdrant (may be empty on legacy points) */
|
|
27
|
+
content: string;
|
|
26
28
|
tags: string[];
|
|
27
29
|
sourceProject?: string;
|
|
28
30
|
sourcePath?: string;
|
|
@@ -245,6 +245,7 @@ export class MemoryClient {
|
|
|
245
245
|
type: fields.type,
|
|
246
246
|
description: fields.description,
|
|
247
247
|
summary: truncate(fields.summary, this.config.summaryMaxChars),
|
|
248
|
+
content: fields.content,
|
|
248
249
|
tags: fields.tags,
|
|
249
250
|
sourceProject: fields.sourceProject,
|
|
250
251
|
sourcePath: fields.sourcePath,
|
|
@@ -16,6 +16,8 @@ export interface MemoryConfig {
|
|
|
16
16
|
repoId: string;
|
|
17
17
|
/** Max chars of each asset content injected into start_* guides */
|
|
18
18
|
injectionContentMaxChars: number;
|
|
19
|
+
/** Max chars of content in search_memory text; 0 = omit content block */
|
|
20
|
+
searchContentMaxChars: number;
|
|
19
21
|
}
|
|
20
22
|
export declare function getMemoryConfig(): MemoryConfig;
|
|
21
23
|
export declare function isMemoryEnabled(config?: MemoryConfig): boolean;
|
|
@@ -40,6 +40,7 @@ export function getMemoryConfig() {
|
|
|
40
40
|
searchMinScore: getOptionalNumberEnv('MEMORY_SEARCH_MIN_SCORE', 0),
|
|
41
41
|
repoId: (process.env.MEMORY_REPO_ID || '').trim(),
|
|
42
42
|
injectionContentMaxChars: getNumberEnv('MEMORY_INJECTION_CONTENT_MAX_CHARS', 1500),
|
|
43
|
+
searchContentMaxChars: getOptionalNumberEnv('MEMORY_SEARCH_CONTENT_MAX_CHARS', 1500),
|
|
43
44
|
};
|
|
44
45
|
}
|
|
45
46
|
export function isMemoryEnabled(config = getMemoryConfig()) {
|
|
@@ -15,6 +15,10 @@ export declare function truncateInjectionText(value: string, maxChars: number):
|
|
|
15
15
|
export declare function loadMemoryInjectionContext(query: string, kind?: MemoryPlanKind): Promise<MemoryInjectionContext>;
|
|
16
16
|
export declare function formatSearchMemoryResultsText(results: MemorySearchResult[], config?: MemoryConfig): string;
|
|
17
17
|
export declare function shouldShowSourceInSearch(item: MemorySearchResult, config?: MemoryConfig): boolean;
|
|
18
|
+
export declare function formatMemoryAssetText(asset: MemoryAsset, options?: {
|
|
19
|
+
maxContentChars?: number;
|
|
20
|
+
}): string;
|
|
21
|
+
export declare function formatReadMemoryAssetText(asset: MemoryAsset): string;
|
|
18
22
|
export declare function renderMemoryGuideSection(context: MemoryInjectionContext): string;
|
|
19
23
|
export declare function buildMemoryPlanStep(kind?: MemoryPlanKind): {
|
|
20
24
|
id: string;
|
|
@@ -93,7 +93,17 @@ export function formatSearchMemoryResultsText(results, config = getMemoryConfig(
|
|
|
93
93
|
if (shouldShowSourceInSearch(item, config) && item.sourcePath) {
|
|
94
94
|
lines.push(` - 来源: ${item.sourcePath}`);
|
|
95
95
|
}
|
|
96
|
-
|
|
96
|
+
if (config.searchContentMaxChars > 0) {
|
|
97
|
+
const body = truncateInjectionText(item.content || '', config.searchContentMaxChars);
|
|
98
|
+
lines.push(' --- content ---');
|
|
99
|
+
lines.push(body
|
|
100
|
+
? body
|
|
101
|
+
.split('\n')
|
|
102
|
+
.map((line) => ` ${line}`)
|
|
103
|
+
.join('\n')
|
|
104
|
+
: ' (empty)');
|
|
105
|
+
}
|
|
106
|
+
lines.push(` - 更长全文: read_memory_asset {"asset_id": "${item.id}"}`);
|
|
97
107
|
return lines.filter(Boolean).join('\n');
|
|
98
108
|
});
|
|
99
109
|
return `${header}\n\n${items.join('\n\n')}`;
|
|
@@ -113,23 +123,36 @@ function formatSourceHint(item, config) {
|
|
|
113
123
|
}
|
|
114
124
|
return `\n - 来源: ${item.sourcePath}`;
|
|
115
125
|
}
|
|
116
|
-
function
|
|
126
|
+
export function formatMemoryAssetText(asset, options) {
|
|
127
|
+
const content = options?.maxContentChars !== undefined
|
|
128
|
+
? truncateInjectionText(asset.content, options.maxContentChars)
|
|
129
|
+
: asset.content;
|
|
117
130
|
const lines = [
|
|
118
131
|
`### ${asset.name}`,
|
|
119
132
|
`- asset_id: ${asset.id}`,
|
|
133
|
+
asset.type ? `- type: ${asset.type}` : '',
|
|
134
|
+
asset.summary ? `- 摘要: ${asset.summary}` : '',
|
|
120
135
|
asset.description ? `- 描述: ${asset.description}` : '',
|
|
121
136
|
asset.usage ? `- 适用: ${asset.usage}` : '',
|
|
122
137
|
asset.tags.length > 0 ? `- 标签: ${asset.tags.join(', ')}` : '',
|
|
138
|
+
asset.sourcePath ? `- 来源: ${asset.sourcePath}` : '',
|
|
123
139
|
'',
|
|
124
|
-
|
|
140
|
+
'--- content ---',
|
|
141
|
+
content || '(empty)',
|
|
125
142
|
].filter(Boolean);
|
|
126
143
|
return lines.join('\n');
|
|
127
144
|
}
|
|
145
|
+
export function formatReadMemoryAssetText(asset) {
|
|
146
|
+
return `已读取记忆资产: ${asset.name}\n\n${formatMemoryAssetText(asset)}`;
|
|
147
|
+
}
|
|
148
|
+
function formatAssetBody(asset, config) {
|
|
149
|
+
return formatMemoryAssetText(asset, { maxContentChars: config.injectionContentMaxChars });
|
|
150
|
+
}
|
|
128
151
|
function formatResultBlock(item, index, context, config) {
|
|
129
152
|
const label = formatMemoryResultLabel(item);
|
|
130
153
|
const asset = context.assetsById[item.id];
|
|
131
154
|
const header = `${index + 1}. ${label} score=${item.score.toFixed(3)}\n - 摘要: ${item.summary}${formatSourceHint(item, config)}`;
|
|
132
|
-
if (asset
|
|
155
|
+
if (asset) {
|
|
133
156
|
return `${header}\n\n${formatAssetBody(asset, config)}\n`;
|
|
134
157
|
}
|
|
135
158
|
return `${header}\n - 全文加载失败,可手动: read_memory_asset {"asset_id": "${item.id}"}\n`;
|
|
@@ -145,7 +168,7 @@ export function renderMemoryGuideSection(context) {
|
|
|
145
168
|
if (context.results.length === 0) {
|
|
146
169
|
return `\n\n## 🧠 记忆系统\n- 状态: 已启用\n- 检索结果: 未找到高相关记录(含历史 Bug 修复与可复用模式)\n- 处理: 继续主流程;Bug 修复验证通过后必须 \`memorize_asset\` 沉淀;功能/UI 有可复用产出再沉淀\n`;
|
|
147
170
|
}
|
|
148
|
-
const loadedCount = context.results.filter((item) => context.assetsById[item.id]
|
|
171
|
+
const loadedCount = context.results.filter((item) => Boolean(context.assetsById[item.id])).length;
|
|
149
172
|
const items = context.results
|
|
150
173
|
.map((item, index) => formatResultBlock(item, index, context, config))
|
|
151
174
|
.join('\n');
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
|
|
2
|
+
const getAssetMock = vi.fn();
|
|
3
|
+
const isReadEnabledMock = vi.fn();
|
|
4
|
+
vi.mock('../../lib/memory-client.js', () => ({
|
|
5
|
+
createMemoryClient: () => ({
|
|
6
|
+
isReadEnabled: isReadEnabledMock,
|
|
7
|
+
getAsset: getAssetMock,
|
|
8
|
+
}),
|
|
9
|
+
}));
|
|
10
|
+
import { readMemoryAsset } from '../read_memory_asset.js';
|
|
11
|
+
import { formatReadMemoryAssetText } from '../../lib/memory-orchestration.js';
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
isReadEnabledMock.mockReset();
|
|
14
|
+
getAssetMock.mockReset();
|
|
15
|
+
});
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
vi.clearAllMocks();
|
|
18
|
+
});
|
|
19
|
+
describe('formatReadMemoryAssetText', () => {
|
|
20
|
+
test('includes full content body', () => {
|
|
21
|
+
const text = formatReadMemoryAssetText({
|
|
22
|
+
id: 'asset-1',
|
|
23
|
+
name: 'playwright-e2e-testing-speed-pattern',
|
|
24
|
+
type: 'pattern',
|
|
25
|
+
description: 'Speed up Playwright E2E suites',
|
|
26
|
+
summary: 'Playwright E2E parallelization pattern',
|
|
27
|
+
content: 'export const parallelWorkers = 4;\n// use sharding',
|
|
28
|
+
tags: ['pattern', 'e2e'],
|
|
29
|
+
confidence: 0.9,
|
|
30
|
+
createdAt: '2026-01-01T00:00:00.000Z',
|
|
31
|
+
updatedAt: '2026-01-01T00:00:00.000Z',
|
|
32
|
+
});
|
|
33
|
+
expect(text).toContain('已读取记忆资产: playwright-e2e-testing-speed-pattern');
|
|
34
|
+
expect(text).toContain('--- content ---');
|
|
35
|
+
expect(text).toContain('export const parallelWorkers = 4;');
|
|
36
|
+
expect(text).toContain('asset_id: asset-1');
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('read_memory_asset 单元测试', () => {
|
|
40
|
+
test('记忆服务未开启时返回跳过结果', async () => {
|
|
41
|
+
isReadEnabledMock.mockReturnValue(false);
|
|
42
|
+
const result = await readMemoryAsset({ asset_id: 'asset-1' });
|
|
43
|
+
expect(result.isError).toBe(false);
|
|
44
|
+
expect('structuredContent' in result).toBe(true);
|
|
45
|
+
if (!('structuredContent' in result)) {
|
|
46
|
+
throw new Error('structuredContent 缺失');
|
|
47
|
+
}
|
|
48
|
+
expect(result.content[0].text).toContain('记忆服务未开启');
|
|
49
|
+
expect(getAssetMock).not.toHaveBeenCalled();
|
|
50
|
+
});
|
|
51
|
+
test('命中资产时文本输出包含完整 content', async () => {
|
|
52
|
+
isReadEnabledMock.mockReturnValue(true);
|
|
53
|
+
getAssetMock.mockResolvedValue({
|
|
54
|
+
id: 'asset-1',
|
|
55
|
+
name: 'feishu-proxy-bug',
|
|
56
|
+
type: 'bugfix',
|
|
57
|
+
description: 'Feishu proxy mismatch',
|
|
58
|
+
summary: 'proxy caused 400 on HTTPS',
|
|
59
|
+
content: '【现象】submit 成功\n【根因】HTTP_PROXY 污染\n【修复】proxy:false',
|
|
60
|
+
tags: ['bugfix'],
|
|
61
|
+
confidence: 0.9,
|
|
62
|
+
createdAt: '2026-01-01T00:00:00.000Z',
|
|
63
|
+
updatedAt: '2026-01-01T00:00:00.000Z',
|
|
64
|
+
});
|
|
65
|
+
const result = await readMemoryAsset({ asset_id: 'asset-1' });
|
|
66
|
+
expect(result.isError).toBe(false);
|
|
67
|
+
expect('structuredContent' in result).toBe(true);
|
|
68
|
+
if (!('structuredContent' in result)) {
|
|
69
|
+
throw new Error('structuredContent 缺失');
|
|
70
|
+
}
|
|
71
|
+
expect(result.content[0].text).toContain('【现象】submit 成功');
|
|
72
|
+
expect(result.content[0].text).toContain('【修复】proxy:false');
|
|
73
|
+
expect(result.structuredContent.asset.content).toContain('【根因】HTTP_PROXY 污染');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -17,7 +17,7 @@ afterEach(() => {
|
|
|
17
17
|
vi.clearAllMocks();
|
|
18
18
|
});
|
|
19
19
|
describe('formatSearchMemoryResultsText', () => {
|
|
20
|
-
test('renders id, summary, description and read hint', () => {
|
|
20
|
+
test('renders id, summary, description, content and read hint', () => {
|
|
21
21
|
const text = formatSearchMemoryResultsText([
|
|
22
22
|
{
|
|
23
23
|
id: '6c97bd10-654e-4f25-a560-99f7469dc11a',
|
|
@@ -26,6 +26,7 @@ describe('formatSearchMemoryResultsText', () => {
|
|
|
26
26
|
type: 'pattern',
|
|
27
27
|
description: 'Speed up Playwright E2E suites',
|
|
28
28
|
summary: 'Playwright E2E parallelization pattern',
|
|
29
|
+
content: 'export const parallelWorkers = 4;\n// use project-based sharding',
|
|
29
30
|
tags: ['pattern', 'e2e'],
|
|
30
31
|
},
|
|
31
32
|
]);
|
|
@@ -33,6 +34,8 @@ describe('formatSearchMemoryResultsText', () => {
|
|
|
33
34
|
expect(text).toContain('id: 6c97bd10-654e-4f25-a560-99f7469dc11a');
|
|
34
35
|
expect(text).toContain('摘要: Playwright E2E parallelization pattern');
|
|
35
36
|
expect(text).toContain('描述: Speed up Playwright E2E suites');
|
|
37
|
+
expect(text).toContain('--- content ---');
|
|
38
|
+
expect(text).toContain('export const parallelWorkers = 4;');
|
|
36
39
|
expect(text).toContain('read_memory_asset {"asset_id": "6c97bd10-654e-4f25-a560-99f7469dc11a"}');
|
|
37
40
|
});
|
|
38
41
|
test('returns empty-state text', () => {
|
|
@@ -62,6 +65,7 @@ describe('search_memory 单元测试', () => {
|
|
|
62
65
|
type: 'bugfix',
|
|
63
66
|
description: 'Feishu proxy mismatch',
|
|
64
67
|
summary: 'proxy caused 400 on HTTPS',
|
|
68
|
+
content: '【现象】HTTPS 400\n【修复】修正 proxy 配置',
|
|
65
69
|
tags: ['bugfix', 'proxy'],
|
|
66
70
|
},
|
|
67
71
|
]);
|
|
@@ -74,6 +78,8 @@ describe('search_memory 单元测试', () => {
|
|
|
74
78
|
expect(result.content[0].text).toContain('id: asset-1');
|
|
75
79
|
expect(result.content[0].text).toContain('摘要: proxy caused 400 on HTTPS');
|
|
76
80
|
expect(result.content[0].text).toContain('描述: Feishu proxy mismatch');
|
|
81
|
+
expect(result.content[0].text).toContain('--- content ---');
|
|
82
|
+
expect(result.content[0].text).toContain('【修复】修正 proxy 配置');
|
|
77
83
|
expect(result.structuredContent.results[0]).toEqual(expect.objectContaining({
|
|
78
84
|
id: 'asset-1',
|
|
79
85
|
description: 'Feishu proxy mismatch',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { okStructured } from '../lib/response.js';
|
|
2
2
|
import { createMemoryClient } from '../lib/memory-client.js';
|
|
3
|
+
import { formatReadMemoryAssetText } from '../lib/memory-orchestration.js';
|
|
3
4
|
import { handleToolError } from '../utils/error-handler.js';
|
|
4
5
|
export async function readMemoryAsset(args) {
|
|
5
6
|
try {
|
|
@@ -15,7 +16,7 @@ export async function readMemoryAsset(args) {
|
|
|
15
16
|
if (!asset) {
|
|
16
17
|
return okStructured(`未找到记忆资产: ${assetId}`, { enabled: true, asset: null });
|
|
17
18
|
}
|
|
18
|
-
return okStructured(
|
|
19
|
+
return okStructured(formatReadMemoryAssetText(asset), {
|
|
19
20
|
enabled: true,
|
|
20
21
|
asset,
|
|
21
22
|
});
|
package/docs/data/tools.js
CHANGED
|
@@ -412,7 +412,7 @@ verbose: true`
|
|
|
412
412
|
{ name: 'tags', type: 'array', required: false, desc: '优先匹配的标签' },
|
|
413
413
|
{ name: 'limit', type: 'number', required: false, desc: '返回条数' }
|
|
414
414
|
],
|
|
415
|
-
usage: '在 start_* 之外主动查找历史 Bug
|
|
415
|
+
usage: '在 start_* 之外主动查找历史 Bug 修复或可复用模式;文本含 id/score/摘要/描述及 --- content --- 正文(默认最多 1500 字,可用 MEMORY_SEARCH_CONTENT_MAX_CHARS 调整)',
|
|
416
416
|
example: `// 使用示例
|
|
417
417
|
你: 请使用 search_memory 搜索 proxy 相关 bugfix
|
|
418
418
|
|
|
@@ -427,7 +427,7 @@ limit: 5`
|
|
|
427
427
|
params: [
|
|
428
428
|
{ name: 'asset_id', type: 'string', required: true, desc: '资产唯一 ID' }
|
|
429
429
|
],
|
|
430
|
-
usage: '当工作流或搜索结果已经找到 memory
|
|
430
|
+
usage: '当工作流或搜索结果已经找到 memory 摘要后,用它读取完整可复用资产;文本输出含 --- content --- 全文与 structuredContent.asset',
|
|
431
431
|
example: `// 使用示例
|
|
432
432
|
你: 请使用 read_memory_asset 工具读取资产
|
|
433
433
|
|
|
@@ -168,11 +168,11 @@
|
|
|
168
168
|
},
|
|
169
169
|
"search_memory": {
|
|
170
170
|
"description": "Semantic search across the shared memory pool, with optional type/tags preference",
|
|
171
|
-
"usage": "Use outside start_* to find historical bugfixes or patterns; text output includes id/score/summary/description;
|
|
171
|
+
"usage": "Use outside start_* to find historical bugfixes or patterns; text output includes id/score/summary/description and a --- content --- body (default 1500 chars; use read_memory_asset for unlimited full text)"
|
|
172
172
|
},
|
|
173
173
|
"read_memory_asset": {
|
|
174
174
|
"description": "Read the full content and metadata of a stored memory asset by asset ID",
|
|
175
|
-
"usage": "Use
|
|
175
|
+
"usage": "Use after search_memory or orchestration hits; text output includes the full --- content --- body plus structuredContent.asset"
|
|
176
176
|
},
|
|
177
177
|
"memorize_asset": {
|
|
178
178
|
"description": "Persist high-value code, spec, or pattern assets into the vector memory system for later reuse",
|
|
@@ -168,11 +168,11 @@
|
|
|
168
168
|
},
|
|
169
169
|
"search_memory": {
|
|
170
170
|
"description": "按语义检索共享记忆库,支持 type/tags 优先排序",
|
|
171
|
-
"usage": "在 start_* 之外主动查找历史 Bug 修复或可复用模式;文本输出含 id/score
|
|
171
|
+
"usage": "在 start_* 之外主动查找历史 Bug 修复或可复用模式;文本输出含 id/score/摘要/描述及 --- content --- 正文(默认最多 1500 字,更长全文用 read_memory_asset)"
|
|
172
172
|
},
|
|
173
173
|
"read_memory_asset": {
|
|
174
174
|
"description": "按资产 ID 读取已沉淀记忆的完整内容与元数据",
|
|
175
|
-
"usage": "
|
|
175
|
+
"usage": "当编排阶段已经命中记忆摘要时使用;文本输出含 --- content --- 全文(代码/配置/详细描述)"
|
|
176
176
|
},
|
|
177
177
|
"memorize_asset": {
|
|
178
178
|
"description": "把高价值代码、规范或模式写入向量记忆系统,供后续复用",
|
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.24",
|
|
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.24 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.24 in 5 minutes. Supports Cursor, Cline, and Claude Desktop",
|
|
67
67
|
"breadcrumb": {
|
|
68
68
|
"home": "Documentation",
|
|
69
69
|
"quickStart": "Quick Start",
|
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.24",
|
|
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.24を始める",
|
|
25
25
|
"installConfig": "インストールと設定"
|
|
26
26
|
},
|
|
27
27
|
"tools": {
|
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.24",
|
|
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.24 시작하기",
|
|
25
25
|
"installConfig": "설치 및 구성"
|
|
26
26
|
},
|
|
27
27
|
"tools": {
|
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.24",
|
|
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.24",
|
|
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.24,支持 Cursor、Cline 和 Claude Desktop",
|
|
67
67
|
"breadcrumb": {
|
|
68
68
|
"home": "文档首页",
|
|
69
69
|
"quickStart": "快速开始",
|
|
@@ -262,6 +262,7 @@ After changing env, **fully restart** your MCP client (e.g. quit and reopen Curs
|
|
|
262
262
|
| `MEMORY_EMBEDDING_PROVIDER` | No | Must be `openai-compatible` for Infinity |
|
|
263
263
|
| `MEMORY_EMBEDDING_API_KEY` | Yes for Infinity | Bearer token = `INFINITY_API_KEY` |
|
|
264
264
|
| `MEMORY_SEARCH_LIMIT` | No | Default `3` |
|
|
265
|
+
| `MEMORY_SEARCH_CONTENT_MAX_CHARS` | No | Max `content` chars in `search_memory` text; default `1500`, `0` = summary only |
|
|
265
266
|
| `MEMORY_SUMMARY_MAX_CHARS` | No | Default `280` |
|
|
266
267
|
|
|
267
268
|
---
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-probe-kit",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.24",
|
|
4
4
|
"description": "AI-Powered Development Toolkit - MCP Server with 27 tools covering code quality, development efficiency, project management, and UI/UX design. Features: Structured Output, Workflow Orchestration, UI/UX Pro Max, and Requirements Interview.",
|
|
5
5
|
"mcpName": "io.github.mybolide/mcp-probe-kit",
|
|
6
6
|
"type": "module",
|