@cyanheads/cyanheads-mcp-server 0.4.2 → 0.4.3
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/AGENTS.md +13 -12
- package/CLAUDE.md +13 -12
- package/Dockerfile +38 -29
- package/README.md +15 -14
- package/changelog/0.4.x/0.4.3.md +34 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/describe-entry.tool.d.ts +23 -0
- package/dist/mcp-server/tools/definitions/describe-entry.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/describe-entry.tool.js +116 -95
- package/dist/mcp-server/tools/definitions/describe-entry.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-catalog.tool.d.ts +11 -0
- package/dist/mcp-server/tools/definitions/search-catalog.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-catalog.tool.js +82 -20
- package/dist/mcp-server/tools/definitions/search-catalog.tool.js.map +1 -1
- package/dist/services/catalog/catalog-service.d.ts +2 -2
- package/dist/services/catalog/catalog-service.d.ts.map +1 -1
- package/dist/services/catalog/catalog-service.js +29 -11
- package/dist/services/catalog/catalog-service.js.map +1 -1
- package/dist/services/catalog/remote-catalog-provider.d.ts +2 -2
- package/dist/services/catalog/remote-catalog-provider.d.ts.map +1 -1
- package/dist/services/catalog/remote-catalog-provider.js +34 -5
- package/dist/services/catalog/remote-catalog-provider.js.map +1 -1
- package/dist/services/catalog/self-record.js +3 -3
- package/dist/services/catalog/types.d.ts +2 -2
- package/dist/services/catalog/types.d.ts.map +1 -1
- package/manifest.json +1 -1
- package/package.json +10 -9
- package/server.json +3 -3
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
9
9
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
10
|
+
import { markdown } from '@cyanheads/mcp-ts-core/utils';
|
|
10
11
|
import { getCatalogService } from '../../../services/catalog/service-instance.js';
|
|
11
12
|
import { buildAllSnippets } from '../../../services/catalog/snippets.js';
|
|
12
13
|
/**
|
|
@@ -19,7 +20,7 @@ const NAME_MAX_LENGTH = 64;
|
|
|
19
20
|
export const describeEntryTool = tool('cyanheads_describe_entry', {
|
|
20
21
|
title: 'Describe Fleet Tool or Server',
|
|
21
22
|
description: 'Return the description and install snippets for a named tool or server. For tools: the ' +
|
|
22
|
-
'description
|
|
23
|
+
'description, owning server, and connection metadata. For either kind: local (stdio, via npx) install ' +
|
|
23
24
|
'snippets for every published server, plus remote (HTTP) connection snippets when a hosted ' +
|
|
24
25
|
'endpoint exists — for every supported client, or one client via the client parameter.',
|
|
25
26
|
annotations: { readOnlyHint: true, openWorldHint: false },
|
|
@@ -31,7 +32,7 @@ export const describeEntryTool = tool('cyanheads_describe_entry', {
|
|
|
31
32
|
.max(NAME_MAX_LENGTH)
|
|
32
33
|
.describe('Tool name (snake_case, e.g. "earthquake_search") or server name ' +
|
|
33
34
|
'(kebab-case, e.g. "earthquake-mcp-server"). 1-' +
|
|
34
|
-
`${NAME_MAX_LENGTH} characters. Use cyanheads_search_catalog to discover valid names.`),
|
|
35
|
+
`${NAME_MAX_LENGTH} characters. Exact names win; unique case-insensitive names resolve to canonical names. Use cyanheads_search_catalog to discover valid names.`),
|
|
35
36
|
kind: z
|
|
36
37
|
.enum(['tool', 'server'])
|
|
37
38
|
.optional()
|
|
@@ -49,15 +50,44 @@ export const describeEntryTool = tool('cyanheads_describe_entry', {
|
|
|
49
50
|
z
|
|
50
51
|
.object({
|
|
51
52
|
kind: z.literal('tool').describe('Resolved as a tool entry.'),
|
|
52
|
-
name: z.string().describe('
|
|
53
|
+
name: z.string().describe('Canonical resolved tool name.'),
|
|
53
54
|
description: z.string().describe('Brief description of what the tool does.'),
|
|
54
55
|
server: z.string().describe('Server package name that owns this tool.'),
|
|
56
|
+
npm: z.string().describe('Owning server npm package for local installation.'),
|
|
57
|
+
github: z.string().describe('Owning server GitHub repository URL.'),
|
|
58
|
+
endpoint: z
|
|
59
|
+
.string()
|
|
60
|
+
.optional()
|
|
61
|
+
.describe('Owning server hosted HTTP endpoint, when available.'),
|
|
62
|
+
auth: z.string().describe('Owning server hosted authentication requirement.'),
|
|
63
|
+
requiredEnvVars: z
|
|
64
|
+
.array(z.string())
|
|
65
|
+
.optional()
|
|
66
|
+
.describe('Environment variable names required for local installation.'),
|
|
67
|
+
installNotice: z
|
|
68
|
+
.string()
|
|
69
|
+
.optional()
|
|
70
|
+
.describe('Actionable guidance when the requested client has no compatible installation snippet.'),
|
|
71
|
+
installSnippets: z
|
|
72
|
+
.array(z
|
|
73
|
+
.object({
|
|
74
|
+
client: z
|
|
75
|
+
.enum(['claude-code', 'codex', 'cursor', 'curl', 'gemini', 'streamable-http'])
|
|
76
|
+
.describe('Target MCP client.'),
|
|
77
|
+
transport: z
|
|
78
|
+
.enum(['stdio', 'http'])
|
|
79
|
+
.describe('Local stdio or hosted HTTP transport.'),
|
|
80
|
+
label: z.string().describe('Install method label.'),
|
|
81
|
+
payload: z.string().describe('Install command or configuration.'),
|
|
82
|
+
})
|
|
83
|
+
.describe('An installation snippet for the owning server.'))
|
|
84
|
+
.describe('Owning server install snippets, filtered by client when supplied.'),
|
|
55
85
|
})
|
|
56
86
|
.describe('A resolved tool entry — its description and the server that owns it.'),
|
|
57
87
|
z
|
|
58
88
|
.object({
|
|
59
89
|
kind: z.literal('server').describe('Resolved as a server entry.'),
|
|
60
|
-
name: z.string().describe('
|
|
90
|
+
name: z.string().describe('Canonical resolved server name.'),
|
|
61
91
|
displayName: z.string().describe('Human-readable server label.'),
|
|
62
92
|
description: z.string().describe('Brief description of what the server does.'),
|
|
63
93
|
version: z.string().describe('Published version captured at fleet-generation time.'),
|
|
@@ -76,6 +106,10 @@ export const describeEntryTool = tool('cyanheads_describe_entry', {
|
|
|
76
106
|
.array(z.string())
|
|
77
107
|
.optional()
|
|
78
108
|
.describe('Env var names the local (stdio) install requires (e.g. ["MAILCHIMP_API_KEY"]). Absent when none.'),
|
|
109
|
+
installNotice: z
|
|
110
|
+
.string()
|
|
111
|
+
.optional()
|
|
112
|
+
.describe('Actionable guidance when the requested client has no compatible installation snippet.'),
|
|
79
113
|
toolCount: z.number().describe('Number of tools exposed by this server.'),
|
|
80
114
|
tools: z
|
|
81
115
|
.array(z
|
|
@@ -151,113 +185,100 @@ export const describeEntryTool = tool('cyanheads_describe_entry', {
|
|
|
151
185
|
// Ambiguity check (can happen if resolvedKind is undefined and name has neither _ nor -).
|
|
152
186
|
if (toolEntry && serverEntry) {
|
|
153
187
|
throw ctx.fail('ambiguous_kind', `"${input.name}" matches both a tool and a server`, {
|
|
154
|
-
...ctx.recoveryFor('ambiguous_kind'),
|
|
155
188
|
name: input.name,
|
|
156
189
|
});
|
|
157
190
|
}
|
|
191
|
+
const owner = toolEntry?.serverRecord ?? serverEntry;
|
|
192
|
+
if (!owner) {
|
|
193
|
+
throw ctx.fail('not_found', `No tool or server named "${input.name}" in the catalog`, {
|
|
194
|
+
name: input.name,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
const allSnippets = buildAllSnippets(owner);
|
|
198
|
+
const snippets = input.client
|
|
199
|
+
? allSnippets.filter((s) => s.client === input.client)
|
|
200
|
+
: allSnippets;
|
|
201
|
+
const connection = {
|
|
202
|
+
npm: owner.npm,
|
|
203
|
+
github: owner.github,
|
|
204
|
+
...(owner.endpoint ? { endpoint: owner.endpoint } : {}),
|
|
205
|
+
auth: owner.auth,
|
|
206
|
+
...(owner.requiredEnvVars?.length ? { requiredEnvVars: owner.requiredEnvVars } : {}),
|
|
207
|
+
installSnippets: snippets,
|
|
208
|
+
...(input.client && snippets.length === 0
|
|
209
|
+
? {
|
|
210
|
+
installNotice: 'curl requires a hosted HTTP endpoint. This server supports local stdio installation; call cyanheads_describe_entry again with client "codex" for an install command.',
|
|
211
|
+
}
|
|
212
|
+
: {}),
|
|
213
|
+
};
|
|
158
214
|
if (toolEntry) {
|
|
159
215
|
return {
|
|
160
216
|
result: {
|
|
161
217
|
kind: 'tool',
|
|
162
|
-
name:
|
|
218
|
+
name: toolEntry.name,
|
|
163
219
|
description: toolEntry.description,
|
|
164
220
|
server: toolEntry.serverRecord.name,
|
|
221
|
+
...connection,
|
|
165
222
|
},
|
|
166
223
|
};
|
|
167
224
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
:
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
npm: serverEntry.npm,
|
|
181
|
-
github: serverEntry.github,
|
|
182
|
-
...(serverEntry.endpoint ? { endpoint: serverEntry.endpoint } : {}),
|
|
183
|
-
auth: serverEntry.auth,
|
|
184
|
-
...(serverEntry.requiredEnvVars?.length
|
|
185
|
-
? { requiredEnvVars: serverEntry.requiredEnvVars }
|
|
186
|
-
: {}),
|
|
187
|
-
toolCount: serverEntry.tools.length,
|
|
188
|
-
tools: serverEntry.tools.map((t) => ({ name: t.name, description: t.description })),
|
|
189
|
-
installSnippets: snippets,
|
|
190
|
-
},
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
throw ctx.fail('not_found', `No tool or server named "${input.name}" in the catalog`, {
|
|
194
|
-
...ctx.recoveryFor('not_found'),
|
|
195
|
-
name: input.name,
|
|
196
|
-
});
|
|
225
|
+
return {
|
|
226
|
+
result: {
|
|
227
|
+
kind: 'server',
|
|
228
|
+
name: owner.name,
|
|
229
|
+
displayName: owner.displayName,
|
|
230
|
+
description: owner.description,
|
|
231
|
+
version: owner.version,
|
|
232
|
+
...connection,
|
|
233
|
+
toolCount: owner.tools.length,
|
|
234
|
+
tools: owner.tools.map((t) => ({ name: t.name, description: t.description })),
|
|
235
|
+
},
|
|
236
|
+
};
|
|
197
237
|
},
|
|
198
238
|
format: ({ result }) => {
|
|
199
|
-
const
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
lines.push(`## Description`);
|
|
207
|
-
lines.push(result.description);
|
|
208
|
-
}
|
|
239
|
+
const md = markdown();
|
|
240
|
+
const label = (value) => /[\r\n]/u.test(value)
|
|
241
|
+
? `\n\n${markdown().codeBlock(value).build()}`
|
|
242
|
+
: markdown().inlineCode(value).build();
|
|
243
|
+
md.h1(`${result.kind === 'tool' ? 'Tool' : 'Server'}: ${label(result.name)}`).keyValue('Kind', result.kind);
|
|
244
|
+
if (result.kind === 'tool')
|
|
245
|
+
md.keyValue('Server', label(result.server));
|
|
209
246
|
else {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
lines.push('```');
|
|
244
|
-
lines.push('');
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
if (result.endpoint) {
|
|
248
|
-
lines.push('## Remote install (HTTP)');
|
|
249
|
-
lines.push(`**Endpoint:** ${result.endpoint}`);
|
|
250
|
-
lines.push('');
|
|
251
|
-
for (const snippet of remote) {
|
|
252
|
-
lines.push(`### ${snippet.label} (${snippet.client})`);
|
|
253
|
-
lines.push('```');
|
|
254
|
-
lines.push(snippet.payload);
|
|
255
|
-
lines.push('```');
|
|
256
|
-
lines.push('');
|
|
257
|
-
}
|
|
258
|
-
}
|
|
247
|
+
md.keyValue('Display name', label(result.displayName))
|
|
248
|
+
.keyValue('Version', label(result.version))
|
|
249
|
+
.keyValue('Tool count', result.toolCount);
|
|
250
|
+
}
|
|
251
|
+
md.keyValue('npm', label(result.npm))
|
|
252
|
+
.keyValue('GitHub', label(result.github))
|
|
253
|
+
.keyValue('Auth', label(result.auth))
|
|
254
|
+
.h2('Description')
|
|
255
|
+
.codeBlock(result.description);
|
|
256
|
+
if (result.kind === 'server' && result.tools.length) {
|
|
257
|
+
md.h2('Tools');
|
|
258
|
+
for (const entry of result.tools)
|
|
259
|
+
md.h3(label(entry.name)).codeBlock(entry.description);
|
|
260
|
+
}
|
|
261
|
+
if (result.requiredEnvVars?.length) {
|
|
262
|
+
md.h2('Required env vars');
|
|
263
|
+
for (const name of result.requiredEnvVars)
|
|
264
|
+
md.codeBlock(name);
|
|
265
|
+
md.paragraph('Set these environment variables before starting the local server.');
|
|
266
|
+
}
|
|
267
|
+
if (result.installNotice)
|
|
268
|
+
md.paragraph(result.installNotice);
|
|
269
|
+
const local = result.installSnippets.filter((s) => s.transport === 'stdio');
|
|
270
|
+
const remote = result.installSnippets.filter((s) => s.transport === 'http');
|
|
271
|
+
if (local.length) {
|
|
272
|
+
md.h2('Local install (stdio)');
|
|
273
|
+
for (const snippet of local)
|
|
274
|
+
md.h3(label(snippet.label)).keyValue('Client', snippet.client).codeBlock(snippet.payload);
|
|
275
|
+
}
|
|
276
|
+
if (result.endpoint) {
|
|
277
|
+
md.h2('Remote install (HTTP)').keyValue('Endpoint', label(result.endpoint));
|
|
278
|
+
for (const snippet of remote)
|
|
279
|
+
md.h3(label(snippet.label)).keyValue('Client', snippet.client).codeBlock(snippet.payload);
|
|
259
280
|
}
|
|
260
|
-
return [{ type: 'text', text:
|
|
281
|
+
return [{ type: 'text', text: md.build() }];
|
|
261
282
|
},
|
|
262
283
|
});
|
|
263
284
|
//# sourceMappingURL=describe-entry.tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe-entry.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/describe-entry.tool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE;;;;;GAKG;AACH,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,EAAE;IAChE,KAAK,EAAE,+BAA+B;IACtC,WAAW,EACT,yFAAyF;QACzF,
|
|
1
|
+
{"version":3,"file":"describe-entry.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/describe-entry.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,13 @@ export declare const searchCatalogTool: import("@cyanheads/mcp-ts-core").ToolDef
|
|
|
19
19
|
utility: "utility";
|
|
20
20
|
}>>;
|
|
21
21
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
22
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
23
|
+
serversOffset: z.ZodDefault<z.ZodNumber>;
|
|
22
24
|
}, z.core.$strip>, z.ZodObject<{
|
|
25
|
+
offset: z.ZodNumber;
|
|
26
|
+
nextOffset: z.ZodNullable<z.ZodNumber>;
|
|
27
|
+
serversOffset: z.ZodOptional<z.ZodNumber>;
|
|
28
|
+
nextServersOffset: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
23
29
|
results: z.ZodArray<z.ZodObject<{
|
|
24
30
|
name: z.ZodString;
|
|
25
31
|
server: z.ZodString;
|
|
@@ -50,6 +56,11 @@ export declare const searchCatalogTool: import("@cyanheads/mcp-ts-core").ToolDef
|
|
|
50
56
|
}, z.core.$strip>>>;
|
|
51
57
|
serversTotal: z.ZodOptional<z.ZodNumber>;
|
|
52
58
|
}, z.core.$strip>, readonly [{
|
|
59
|
+
readonly reason: "invalid_servers_offset";
|
|
60
|
+
readonly code: JsonRpcErrorCode.ValidationError;
|
|
61
|
+
readonly when: "A nonzero serversOffset is supplied in servers scope.";
|
|
62
|
+
readonly recovery: "Set serversOffset to zero in servers scope; use offset to page server results.";
|
|
63
|
+
}, {
|
|
53
64
|
readonly reason: "catalog_empty";
|
|
54
65
|
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
55
66
|
readonly when: "Catalog has not finished loading.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-catalog.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-catalog.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"search-catalog.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-catalog.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAYjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqS5B,CAAC"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
8
8
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
9
|
+
import { markdown } from '@cyanheads/mcp-ts-core/utils';
|
|
9
10
|
import { getCatalogService } from '../../../services/catalog/service-instance.js';
|
|
10
11
|
/**
|
|
11
12
|
* Upper bound on the query string. A natural-language capability description
|
|
@@ -26,8 +27,9 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
26
27
|
.string()
|
|
27
28
|
.min(1)
|
|
28
29
|
.max(QUERY_MAX_LENGTH)
|
|
30
|
+
.regex(/\S/u, 'Query must contain a non-whitespace character.')
|
|
29
31
|
.describe('Natural language search query. Describe what you want to accomplish, a workflow, or a ' +
|
|
30
|
-
`capability area. 1-${QUERY_MAX_LENGTH} characters.`),
|
|
32
|
+
`capability area. 1-${QUERY_MAX_LENGTH} raw characters; surrounding whitespace is trimmed. Must contain non-whitespace text.`),
|
|
31
33
|
scope: z
|
|
32
34
|
.enum(['tools', 'servers'])
|
|
33
35
|
.default('tools')
|
|
@@ -43,8 +45,34 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
43
45
|
.max(20)
|
|
44
46
|
.default(5)
|
|
45
47
|
.describe('Maximum number of results to return (1-20). Default 5.'),
|
|
48
|
+
offset: z
|
|
49
|
+
.number()
|
|
50
|
+
.int()
|
|
51
|
+
.min(0)
|
|
52
|
+
.default(0)
|
|
53
|
+
.describe('Result offset. Use nextOffset with the same query, scope, category, and limit; pages use the current catalog.'),
|
|
54
|
+
serversOffset: z
|
|
55
|
+
.number()
|
|
56
|
+
.int()
|
|
57
|
+
.min(0)
|
|
58
|
+
.default(0)
|
|
59
|
+
.describe('Independent server roll-up offset (10 per page). Use nextServersOffset; must be zero in servers scope.'),
|
|
46
60
|
}),
|
|
47
61
|
output: z.object({
|
|
62
|
+
offset: z.number().describe('Current ranked-result offset.'),
|
|
63
|
+
nextOffset: z
|
|
64
|
+
.number()
|
|
65
|
+
.nullable()
|
|
66
|
+
.describe('Next ranked-result offset, or null when exhausted.'),
|
|
67
|
+
serversOffset: z
|
|
68
|
+
.number()
|
|
69
|
+
.optional()
|
|
70
|
+
.describe('Current server roll-up offset; tools scope only.'),
|
|
71
|
+
nextServersOffset: z
|
|
72
|
+
.number()
|
|
73
|
+
.nullable()
|
|
74
|
+
.optional()
|
|
75
|
+
.describe('Next server roll-up offset, or null when exhausted; tools scope only.'),
|
|
48
76
|
results: z
|
|
49
77
|
.array(z
|
|
50
78
|
.object({
|
|
@@ -82,7 +110,7 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
82
110
|
})
|
|
83
111
|
.describe('A server roll-up entry.'))
|
|
84
112
|
.optional()
|
|
85
|
-
.describe('
|
|
113
|
+
.describe('Server roll-up from the full match set, independent of result offset/limit. Tools scope only. Ordered by topScore desc (name-tiebroken); 10 per page starting at serversOffset. Use nextServersOffset to continue and serversTotal for the full distinct count.'),
|
|
86
114
|
serversTotal: z
|
|
87
115
|
.number()
|
|
88
116
|
.optional()
|
|
@@ -96,9 +124,15 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
96
124
|
notice: z
|
|
97
125
|
.string()
|
|
98
126
|
.optional()
|
|
99
|
-
.describe('Guidance
|
|
127
|
+
.describe('Guidance for zero matches or an exhausted result page. Absent on nonempty result pages.'),
|
|
100
128
|
},
|
|
101
129
|
errors: [
|
|
130
|
+
{
|
|
131
|
+
reason: 'invalid_servers_offset',
|
|
132
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
133
|
+
when: 'A nonzero serversOffset is supplied in servers scope.',
|
|
134
|
+
recovery: 'Set serversOffset to zero in servers scope; use offset to page server results.',
|
|
135
|
+
},
|
|
102
136
|
{
|
|
103
137
|
reason: 'catalog_empty',
|
|
104
138
|
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
@@ -112,25 +146,37 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
112
146
|
},
|
|
113
147
|
],
|
|
114
148
|
async handler(input, ctx) {
|
|
149
|
+
if (input.scope === 'servers' && input.serversOffset !== 0) {
|
|
150
|
+
throw ctx.fail('invalid_servers_offset');
|
|
151
|
+
}
|
|
152
|
+
const query = input.query.trim();
|
|
115
153
|
ctx.log.info('Searching catalog', {
|
|
116
|
-
query
|
|
154
|
+
query,
|
|
117
155
|
scope: input.scope,
|
|
118
156
|
limit: input.limit,
|
|
119
157
|
});
|
|
120
158
|
const catalog = getCatalogService();
|
|
121
159
|
const allResults = await catalog.search({
|
|
122
|
-
query
|
|
160
|
+
query,
|
|
123
161
|
scope: input.scope,
|
|
124
162
|
...(input.category ? { category: input.category } : {}),
|
|
125
163
|
});
|
|
126
164
|
const totalMatched = allResults.length;
|
|
127
|
-
ctx.enrich.echo(
|
|
165
|
+
ctx.enrich.echo(query);
|
|
128
166
|
ctx.enrich.total(totalMatched);
|
|
129
167
|
if (totalMatched === 0) {
|
|
130
|
-
ctx.enrich.notice(`No ${input.scope} matched
|
|
131
|
-
|
|
168
|
+
ctx.enrich.notice(`No ${input.scope} matched. Try broadening the query${input.category ? ', removing the category filter,' : ''} or switching to scope "${input.scope === 'tools' ? 'servers' : 'tools'}".`);
|
|
169
|
+
}
|
|
170
|
+
else if (input.offset >= totalMatched) {
|
|
171
|
+
ctx.enrich.notice('No results on this page. Use offset 0 to return to the first result page.');
|
|
132
172
|
}
|
|
133
|
-
const results = allResults.slice(
|
|
173
|
+
const results = allResults.slice(input.offset, input.offset + input.limit);
|
|
174
|
+
const page = {
|
|
175
|
+
results,
|
|
176
|
+
scope: input.scope,
|
|
177
|
+
offset: input.offset,
|
|
178
|
+
nextOffset: input.offset + results.length < totalMatched ? input.offset + results.length : null,
|
|
179
|
+
};
|
|
134
180
|
ctx.log.info('Search complete', { totalMatched, returned: results.length });
|
|
135
181
|
if (input.scope === 'tools') {
|
|
136
182
|
// Build server roll-up from the full match set (before limit slice)
|
|
@@ -150,7 +196,7 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
150
196
|
const serversTotal = serverMap.size;
|
|
151
197
|
const servers = Array.from(serverMap.entries())
|
|
152
198
|
.sort(([nameA, a], [nameB, b]) => b.topScore - a.topScore || nameA.localeCompare(nameB))
|
|
153
|
-
.slice(
|
|
199
|
+
.slice(input.serversOffset, input.serversOffset + SERVERS_CAP)
|
|
154
200
|
.map(([name, agg]) => {
|
|
155
201
|
const record = catalog.getServer(name);
|
|
156
202
|
return {
|
|
@@ -161,32 +207,48 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
161
207
|
topScore: agg.topScore,
|
|
162
208
|
};
|
|
163
209
|
});
|
|
164
|
-
return {
|
|
210
|
+
return {
|
|
211
|
+
...page,
|
|
212
|
+
servers,
|
|
213
|
+
serversTotal,
|
|
214
|
+
serversOffset: input.serversOffset,
|
|
215
|
+
nextServersOffset: input.serversOffset + servers.length < serversTotal
|
|
216
|
+
? input.serversOffset + servers.length
|
|
217
|
+
: null,
|
|
218
|
+
};
|
|
165
219
|
}
|
|
166
|
-
return
|
|
220
|
+
return page;
|
|
167
221
|
},
|
|
168
222
|
format: (result) => {
|
|
169
|
-
const
|
|
223
|
+
const label = (value) => /[\r\n]/u.test(value)
|
|
224
|
+
? `\n\n${markdown().codeBlock(value).build()}`
|
|
225
|
+
: markdown().inlineCode(value).build();
|
|
226
|
+
const lines = [
|
|
227
|
+
`**Scope:** ${result.scope}`,
|
|
228
|
+
`offset: ${result.offset}; nextOffset: ${result.nextOffset}`,
|
|
229
|
+
'',
|
|
230
|
+
];
|
|
170
231
|
if (result.results.length === 0) {
|
|
171
|
-
lines.push('No results matched.');
|
|
232
|
+
lines.push(result.offset > 0 ? 'No results on this page.' : 'No results matched.');
|
|
172
233
|
}
|
|
173
234
|
else {
|
|
174
235
|
for (const item of result.results) {
|
|
175
|
-
lines.push(`### ${item.name}`);
|
|
176
|
-
lines.push(`**Server:** ${item.server}
|
|
177
|
-
lines.push(item.brief);
|
|
236
|
+
lines.push(`### ${label(item.name)}`);
|
|
237
|
+
lines.push(`**Server:** ${label(item.server)}\n\n**Category:** ${item.category} | **Score:** ${item.score.toFixed(3)}`);
|
|
238
|
+
lines.push(markdown().codeBlock(item.brief).build());
|
|
178
239
|
lines.push('');
|
|
179
240
|
}
|
|
180
241
|
}
|
|
181
|
-
if (result.servers
|
|
242
|
+
if (result.servers) {
|
|
243
|
+
lines.push(`serversOffset: ${result.serversOffset}; nextServersOffset: ${result.nextServersOffset}`);
|
|
182
244
|
const cap = result.servers.length;
|
|
183
245
|
const total = result.serversTotal ?? cap;
|
|
184
246
|
const header = total > cap ? `## Servers (showing ${cap} of ${total})` : '## Servers';
|
|
185
247
|
lines.push(header);
|
|
186
248
|
lines.push('');
|
|
187
249
|
for (const s of result.servers) {
|
|
188
|
-
lines.push(
|
|
189
|
-
lines.push(s.brief);
|
|
250
|
+
lines.push(`${label(s.name)}\n\n(${s.category}) — ${s.matchedTools} matched tool${s.matchedTools === 1 ? '' : 's'}, top score ${s.topScore.toFixed(3)}`);
|
|
251
|
+
lines.push(markdown().codeBlock(s.brief).build());
|
|
190
252
|
lines.push('');
|
|
191
253
|
}
|
|
192
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-catalog.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-catalog.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,EAAE;IAChE,KAAK,EAAE,gCAAgC;IACvC,WAAW,EACT,8FAA8F;QAC9F,yFAAyF;QACzF,kFAAkF;IACpF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;IACzD,IAAI,EAAE,CAAC,oCAAoC,CAAC;IAE5C,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,gBAAgB,CAAC;aACrB,QAAQ,CACP,wFAAwF;YACtF,sBAAsB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"search-catalog.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-catalog.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,9 +26,9 @@ export declare class CatalogService implements ICatalogService {
|
|
|
26
26
|
}): Promise<CatalogSearchResult[]>;
|
|
27
27
|
/**
|
|
28
28
|
* The remote catalog is generated outside this repo and does not include the
|
|
29
|
-
* discovery front door itself, so both
|
|
29
|
+
* discovery front door itself, so both name lookups fall back to the
|
|
30
30
|
* server-local self record. The remote index is always consulted first: if the
|
|
31
|
-
* generator ever starts emitting
|
|
31
|
+
* generator ever starts emitting an exact or unique case-folded entry, that
|
|
32
32
|
* entry wins on every request and the fallback becomes unreachable — no
|
|
33
33
|
* duplication, no stale local metadata masking the real record. The static
|
|
34
34
|
* record also survives `_maybeRefresh()`'s atomic index swap by construction,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-service.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/catalog-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,kBAAkB,EAAiC,MAAM,yBAAyB,CAAC;AAIjG,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,WAAW,EAEX,eAAe,EAChB,MAAM,YAAY,CAAC;AAoBpB,KAAK,oBAAoB,GAAG,IAAI,CAC9B,YAAY,EACV,YAAY,GACZ,uBAAuB,GACvB,uBAAuB,GACvB,kBAAkB,GAClB,iBAAiB,CACpB,CAAC;AAMF,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,aAAa,CAA+C;IAEpE,YAAY,MAAM,EAAE,oBAAoB,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAIxE;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgChC;IAEK,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;QAC3B,QAAQ,CAAC,EAAE,eAAe,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgDjC;IAED;;;;;;;;;OASG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG;QAAE,YAAY,EAAE,aAAa,CAAA;KAAE,CAAC,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"catalog-service.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/catalog-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,kBAAkB,EAAiC,MAAM,yBAAyB,CAAC;AAIjG,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,WAAW,EAEX,eAAe,EAChB,MAAM,YAAY,CAAC;AAoBpB,KAAK,oBAAoB,GAAG,IAAI,CAC9B,YAAY,EACV,YAAY,GACZ,uBAAuB,GACvB,uBAAuB,GACvB,kBAAkB,GAClB,iBAAiB,CACpB,CAAC;AAMF,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,aAAa,CAA+C;IAEpE,YAAY,MAAM,EAAE,oBAAoB,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAIxE;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgChC;IAEK,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;QAC3B,QAAQ,CAAC,EAAE,eAAe,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgDjC;IAED;;;;;;;;;OASG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG;QAAE,YAAY,EAAE,aAAa,CAAA;KAAE,CAAC,GAAG,IAAI,CAO5E;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAO5C;IAED,cAAc,IAAI,eAAe,EAAE,CAKlC;IAED,KAAK,IAAI;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAQA;IAED,gEAAgE;IAChE,QAAQ,IAAI,IAAI,CAKf;IAMD,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,WAAW;YA8DL,aAAa;IA2B3B,OAAO,CAAC,kBAAkB;CAe3B;AAoBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,oBAAoB,EAC5B,UAAU,CAAC,EAAE,kBAAkB,GAC9B,IAAI,CAEN"}
|