@cyanheads/cyanheads-mcp-server 0.4.0 → 0.4.2
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 +72 -31
- package/CLAUDE.md +72 -31
- package/Dockerfile +9 -9
- package/LICENSE +1 -1
- package/README.md +57 -47
- package/changelog/0.4.x/0.4.1.md +33 -0
- package/changelog/0.4.x/0.4.2.md +32 -0
- package/changelog/template.md +62 -40
- package/dist/index.d.ts +1 -1
- package/dist/index.js +20 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/describe-entry.tool.d.ts +1 -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 +5 -2
- package/dist/mcp-server/tools/definitions/describe-entry.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-catalog.tool.d.ts +1 -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 +5 -2
- package/dist/mcp-server/tools/definitions/search-catalog.tool.js.map +1 -1
- package/dist/services/catalog/catalog-service.d.ts.map +1 -1
- package/dist/services/catalog/catalog-service.js +12 -5
- package/dist/services/catalog/catalog-service.js.map +1 -1
- package/dist/services/catalog/embeddings-runtime.d.ts.map +1 -1
- package/dist/services/catalog/embeddings-runtime.js +3 -3
- package/dist/services/catalog/embeddings-runtime.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 +15 -17
- package/dist/services/catalog/remote-catalog-provider.js.map +1 -1
- package/dist/services/catalog/service-instance.js +1 -1
- package/dist/services/catalog/service-instance.js.map +1 -1
- package/dist/services/catalog/snippets.js +1 -1
- package/manifest.json +31 -2
- package/package.json +27 -11
- package/server.json +17 -3
|
@@ -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,CAG5E;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAK5C;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;
|
|
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,CAG5E;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAK5C;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;YAqDL,aAAa;IA2B3B,OAAO,CAAC,kBAAkB;CAe3B;AAoBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,oBAAoB,EAC5B,UAAU,CAAC,EAAE,kBAAkB,GAC9B,IAAI,CAEN"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Polls the remote payload on a configurable interval; atomic swap on change.
|
|
7
7
|
* @module services/catalog/catalog-service
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { internalError, serviceUnavailable } from '@cyanheads/mcp-ts-core/errors';
|
|
10
10
|
import { logger } from '@cyanheads/mcp-ts-core/utils';
|
|
11
11
|
import { TransformersEmbeddingsRuntime } from './embeddings-runtime.js';
|
|
12
12
|
import { RemoteJsonCatalogProvider } from './remote-catalog-provider.js';
|
|
@@ -141,7 +141,7 @@ export class CatalogService {
|
|
|
141
141
|
// -------------------------------------------------------------------------
|
|
142
142
|
_assertModelMatch(payload) {
|
|
143
143
|
if (payload.embeddingModel !== this._config.embeddingModelId) {
|
|
144
|
-
throw
|
|
144
|
+
throw internalError(`Catalog embedding model mismatch: payload declares "${payload.embeddingModel}" but server expects "${this._config.embeddingModelId}". ` +
|
|
145
145
|
'Update EMBEDDING_MODEL_ID or regenerate the catalog with the matching model.', {
|
|
146
146
|
payloadModel: payload.embeddingModel,
|
|
147
147
|
expected: this._config.embeddingModelId,
|
|
@@ -162,16 +162,16 @@ export class CatalogService {
|
|
|
162
162
|
let toolI = 0;
|
|
163
163
|
for (const [si, server] of payload.servers.entries()) {
|
|
164
164
|
if (server.name.includes('_')) {
|
|
165
|
-
throw
|
|
165
|
+
throw internalError(`Server name "${server.name}" contains underscores. Fleet naming convention requires hyphenated server names.`);
|
|
166
166
|
}
|
|
167
167
|
if (server.embedding.length !== dims) {
|
|
168
|
-
throw
|
|
168
|
+
throw internalError(`Server "${server.name}" embedding has ${server.embedding.length} dims; expected ${dims}.`);
|
|
169
169
|
}
|
|
170
170
|
serverVectors.set(server.embedding, si * dims);
|
|
171
171
|
serverByName.set(server.name, server);
|
|
172
172
|
for (const tool of server.tools) {
|
|
173
173
|
if (tool.embedding.length !== dims) {
|
|
174
|
-
throw
|
|
174
|
+
throw internalError(`Tool "${tool.name}" embedding has ${tool.embedding.length} dims; expected ${dims}.`);
|
|
175
175
|
}
|
|
176
176
|
toolVectors.set(tool.embedding, toolI * dims);
|
|
177
177
|
toolByName.set(tool.name, { ...tool, serverRecord: server });
|
|
@@ -214,8 +214,15 @@ export class CatalogService {
|
|
|
214
214
|
}
|
|
215
215
|
_assertInitialized() {
|
|
216
216
|
if (!this._index) {
|
|
217
|
+
/**
|
|
218
|
+
* `retryable` rides the error data, not just the tools' declared
|
|
219
|
+
* `errors[]` entry: the framework renders `data.retryable` into the
|
|
220
|
+
* `content[]` trailer and clients branch on it there. Both tools
|
|
221
|
+
* advertise this reason as retryable, so the throw has to say so.
|
|
222
|
+
*/
|
|
217
223
|
throw serviceUnavailable('CatalogService not initialized — call initialize() in setup()', {
|
|
218
224
|
reason: 'catalog_empty',
|
|
225
|
+
retryable: true,
|
|
219
226
|
});
|
|
220
227
|
}
|
|
221
228
|
return this._index;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-service.js","sourceRoot":"","sources":["../../../src/services/catalog/catalog-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"catalog-service.js","sourceRoot":"","sources":["../../../src/services/catalog/catalog-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings-runtime.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/embeddings-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoBH,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,6BAA8B,YAAW,kBAAkB;aAI1C,OAAO,EAAE,MAAM;IAH3C,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,YAAY,CAAmD;IAEvE,YAA4B,OAAO,EAAE,MAAM,EAAI;IAE/C,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"embeddings-runtime.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/embeddings-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoBH,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,6BAA8B,YAAW,kBAAkB;aAI1C,OAAO,EAAE,MAAM;IAH3C,OAAO,CAAC,UAAU,CAA0C;IAC5D,OAAO,CAAC,YAAY,CAAmD;IAEvE,YAA4B,OAAO,EAAE,MAAM,EAAI;IAE/C,OAAO,CAAC,aAAa;IA2Bf,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CA4BvF;CACF"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import os from 'node:os';
|
|
13
13
|
import path from 'node:path';
|
|
14
|
-
import {
|
|
14
|
+
import { internalError } from '@cyanheads/mcp-ts-core/errors';
|
|
15
15
|
import { logger } from '@cyanheads/mcp-ts-core/utils';
|
|
16
16
|
import { env, pipeline } from '@huggingface/transformers';
|
|
17
17
|
/**
|
|
@@ -46,7 +46,7 @@ export class TransformersEmbeddingsRuntime {
|
|
|
46
46
|
}
|
|
47
47
|
catch (err) {
|
|
48
48
|
this._loadPromise = null;
|
|
49
|
-
throw
|
|
49
|
+
throw internalError(`Failed to load embedding model ${this.modelId}: ${err instanceof Error ? err.message : String(err)}`, { modelId: this.modelId }, { cause: err });
|
|
50
50
|
}
|
|
51
51
|
})();
|
|
52
52
|
}
|
|
@@ -62,7 +62,7 @@ export class TransformersEmbeddingsRuntime {
|
|
|
62
62
|
const rows = tensor.tolist();
|
|
63
63
|
const fullVec = rows[0];
|
|
64
64
|
if (!fullVec || fullVec.length < dims) {
|
|
65
|
-
throw
|
|
65
|
+
throw internalError(`Embedding pipeline returned a vector of length ${fullVec?.length ?? 0}; expected at least ${dims}.`);
|
|
66
66
|
}
|
|
67
67
|
const out = new Float32Array(dims);
|
|
68
68
|
let sumSq = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embeddings-runtime.js","sourceRoot":"","sources":["../../../src/services/catalog/embeddings-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"embeddings-runtime.js","sourceRoot":"","sources":["../../../src/services/catalog/embeddings-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,8 +12,8 @@ export declare class RemoteJsonCatalogProvider {
|
|
|
12
12
|
constructor(config: Pick<ServerConfig, 'catalogUrl' | 'catalogFetchTimeoutMs'>);
|
|
13
13
|
/**
|
|
14
14
|
* Fetch and validate the remote fleet.json payload.
|
|
15
|
-
*
|
|
16
|
-
* Throws
|
|
15
|
+
* Applies the configured whole-exchange timeout and merges the provided signal.
|
|
16
|
+
* Throws a typed framework error on any failure.
|
|
17
17
|
*/
|
|
18
18
|
load(signal?: AbortSignal): Promise<FleetPayload>;
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-catalog-provider.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/remote-catalog-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"remote-catalog-provider.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/remote-catalog-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA0C/C,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,YAAY,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,uBAAuB,CAAC,EAG7E;IAED;;;;OAIG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CA8BtD;CACF"}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* @module services/catalog/remote-catalog-provider
|
|
6
6
|
*/
|
|
7
7
|
import { z } from '@cyanheads/mcp-ts-core';
|
|
8
|
-
import {
|
|
8
|
+
import { internalError, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
9
|
+
import { fetchWithTimeout, requestContextService } from '@cyanheads/mcp-ts-core/utils';
|
|
9
10
|
// ---------------------------------------------------------------------------
|
|
10
11
|
// Validation schema (v2)
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
@@ -49,35 +50,32 @@ export class RemoteJsonCatalogProvider {
|
|
|
49
50
|
}
|
|
50
51
|
/**
|
|
51
52
|
* Fetch and validate the remote fleet.json payload.
|
|
52
|
-
*
|
|
53
|
-
* Throws
|
|
53
|
+
* Applies the configured whole-exchange timeout and merges the provided signal.
|
|
54
|
+
* Throws a typed framework error on any failure.
|
|
54
55
|
*/
|
|
55
56
|
async load(signal) {
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
response = await fetch(this._url, { signal: combinedSignal });
|
|
61
|
-
}
|
|
62
|
-
catch (err) {
|
|
63
|
-
throw new McpError(JsonRpcErrorCode.InternalError, `Catalog fetch failed: ${err instanceof Error ? err.message : String(err)}`, { url: this._url }, { cause: err });
|
|
64
|
-
}
|
|
65
|
-
if (!response.ok) {
|
|
66
|
-
throw new McpError(JsonRpcErrorCode.InternalError, `Catalog fetch returned ${response.status} ${response.statusText}`, { url: this._url, status: response.status, statusText: response.statusText });
|
|
67
|
-
}
|
|
57
|
+
const context = requestContextService.createRequestContext({ operation: 'CatalogFetch' });
|
|
58
|
+
const response = await fetchWithTimeout(this._url, this._timeoutMs, context, {
|
|
59
|
+
...(signal ? { signal } : {}),
|
|
60
|
+
});
|
|
68
61
|
let raw;
|
|
69
62
|
try {
|
|
70
63
|
raw = await response.json();
|
|
71
64
|
}
|
|
72
65
|
catch (err) {
|
|
73
|
-
|
|
66
|
+
if (err instanceof McpError)
|
|
67
|
+
throw err;
|
|
68
|
+
throw internalError(`Catalog response is not valid JSON: ${err instanceof Error ? err.message : String(err)}`, { url: this._url }, { cause: err });
|
|
74
69
|
}
|
|
75
70
|
const parsed = FleetPayloadSchema.safeParse(raw);
|
|
76
71
|
if (!parsed.success) {
|
|
77
72
|
const first = parsed.error.issues[0];
|
|
78
73
|
const path = first?.path.join('.') ?? '(unknown)';
|
|
79
74
|
const msg = first?.message ?? 'validation failed';
|
|
80
|
-
throw
|
|
75
|
+
throw internalError(`Catalog payload failed validation at ${path}: ${msg}`, {
|
|
76
|
+
url: this._url,
|
|
77
|
+
issues: parsed.error.issues.slice(0, 5),
|
|
78
|
+
});
|
|
81
79
|
}
|
|
82
80
|
return parsed.data;
|
|
83
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-catalog-provider.js","sourceRoot":"","sources":["../../../src/services/catalog/remote-catalog-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"remote-catalog-provider.js","sourceRoot":"","sources":["../../../src/services/catalog/remote-catalog-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export function setCatalogService(service) {
|
|
|
16
16
|
}
|
|
17
17
|
export function getCatalogService() {
|
|
18
18
|
if (!_service) {
|
|
19
|
-
throw serviceUnavailable('CatalogService not initialized — call initCatalogService() in setup()', { reason: 'catalog_empty' });
|
|
19
|
+
throw serviceUnavailable('CatalogService not initialized — call initCatalogService() in setup()', { reason: 'catalog_empty', retryable: true });
|
|
20
20
|
}
|
|
21
21
|
return _service;
|
|
22
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-instance.js","sourceRoot":"","sources":["../../../src/services/catalog/service-instance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,IAAI,QAAqC,CAAC;AAE1C,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACxD,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,kBAAkB,CACtB,uEAAuE,EACvE,EAAE,MAAM,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"service-instance.js","sourceRoot":"","sources":["../../../src/services/catalog/service-instance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,IAAI,QAAqC,CAAC;AAE1C,2EAA2E;AAC3E,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACxD,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,kBAAkB,CACtB,uEAAuE,EACvE,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,CAC7C,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,2BAA2B;IACzC,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB,QAAQ,GAAG,SAAS,CAAC;AACvB,CAAC"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* @module services/catalog/snippets
|
|
15
15
|
*/
|
|
16
16
|
/** MCP protocol version pinned in the curl `initialize` snippet. */
|
|
17
|
-
const CURL_MCP_PROTOCOL_VERSION = '
|
|
17
|
+
const CURL_MCP_PROTOCOL_VERSION = '2026-07-28';
|
|
18
18
|
/**
|
|
19
19
|
* `env` block for a JSON config snippet — one empty-valued key per required var.
|
|
20
20
|
* Returns nothing to spread when the server needs no configuration, so the `env`
|
package/manifest.json
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "cyanheads-mcp-server",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.2",
|
|
5
5
|
"description": "Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.",
|
|
6
|
-
"author": {
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "cyanheads",
|
|
8
|
+
"email": "casey@caseyjhand.com",
|
|
9
|
+
"url": "https://caseyjhand.com"
|
|
10
|
+
},
|
|
7
11
|
"repository": {
|
|
8
12
|
"type": "git",
|
|
9
13
|
"url": "https://github.com/cyanheads/cyanheads-mcp-server"
|
|
@@ -21,6 +25,9 @@
|
|
|
21
25
|
"MCP_AUTH_MODE": "none",
|
|
22
26
|
"NODE_ENV": "production",
|
|
23
27
|
"CATALOG_URL": "${user_config.catalog_url}",
|
|
28
|
+
"CATALOG_FETCH_TIMEOUT_MS": "${user_config.catalog_fetch_timeout_ms}",
|
|
29
|
+
"CATALOG_REFRESH_SECONDS": "${user_config.catalog_refresh_seconds}",
|
|
30
|
+
"EMBEDDING_MODEL_ID": "${user_config.embedding_model_id}",
|
|
24
31
|
"SIMILARITY_FLOOR": "${user_config.similarity_floor}"
|
|
25
32
|
}
|
|
26
33
|
}
|
|
@@ -29,6 +36,7 @@
|
|
|
29
36
|
"runtimes": { "node": ">=24.0.0" }
|
|
30
37
|
},
|
|
31
38
|
"tools_generated": true,
|
|
39
|
+
"prompts_generated": true,
|
|
32
40
|
"user_config": {
|
|
33
41
|
"catalog_url": {
|
|
34
42
|
"type": "string",
|
|
@@ -37,6 +45,27 @@
|
|
|
37
45
|
"required": false,
|
|
38
46
|
"default": "https://caseyjhand.com/fleet.json"
|
|
39
47
|
},
|
|
48
|
+
"catalog_fetch_timeout_ms": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"title": "Catalog Fetch Timeout",
|
|
51
|
+
"description": "Per-request timeout for fleet.json fetches in milliseconds. Must be greater than 0.",
|
|
52
|
+
"required": false,
|
|
53
|
+
"default": "10000"
|
|
54
|
+
},
|
|
55
|
+
"catalog_refresh_seconds": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"title": "Catalog Refresh Interval",
|
|
58
|
+
"description": "Background poll interval for fleet.json refreshes in seconds. Set to 0 to disable background refresh.",
|
|
59
|
+
"required": false,
|
|
60
|
+
"default": "3600"
|
|
61
|
+
},
|
|
62
|
+
"embedding_model_id": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"title": "Embedding Model ID",
|
|
65
|
+
"description": "Hugging Face model id for query embedding. Must match fleet.json.embeddingModel.",
|
|
66
|
+
"required": false,
|
|
67
|
+
"default": "Snowflake/snowflake-arctic-embed-m-v1.5"
|
|
68
|
+
},
|
|
40
69
|
"similarity_floor": {
|
|
41
70
|
"type": "string",
|
|
42
71
|
"title": "Similarity Floor",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/cyanheads-mcp-server",
|
|
3
3
|
"mcpName": "io.github.cyanheads/cyanheads-mcp-server",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.2",
|
|
5
5
|
"description": "Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -21,6 +21,16 @@
|
|
|
21
21
|
"server.json"
|
|
22
22
|
],
|
|
23
23
|
"author": "Casey Hand <casey@caseyjhand.com> (https://caseyjhand.com)",
|
|
24
|
+
"funding": [
|
|
25
|
+
{
|
|
26
|
+
"type": "github",
|
|
27
|
+
"url": "https://github.com/sponsors/cyanheads"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"type": "buy_me_a_coffee",
|
|
31
|
+
"url": "https://www.buymeacoffee.com/cyanheads"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
24
34
|
"homepage": "https://github.com/cyanheads/cyanheads-mcp-server#readme",
|
|
25
35
|
"bugs": {
|
|
26
36
|
"url": "https://github.com/cyanheads/cyanheads-mcp-server/issues"
|
|
@@ -30,6 +40,7 @@
|
|
|
30
40
|
"rebuild": "bun run scripts/clean.ts && bun run scripts/build.ts",
|
|
31
41
|
"clean": "bun run scripts/clean.ts",
|
|
32
42
|
"devcheck": "bun run scripts/devcheck.ts",
|
|
43
|
+
"audit:fix": "bun audit fix",
|
|
33
44
|
"audit:refresh": "rm -f bun.lock && bun install && bun audit",
|
|
34
45
|
"tree": "bun run scripts/tree.ts",
|
|
35
46
|
"list-skills": "bun run scripts/list-skills.ts",
|
|
@@ -43,6 +54,7 @@
|
|
|
43
54
|
"changelog:check": "bun run scripts/build-changelog.ts --check",
|
|
44
55
|
"release:github": "bun run scripts/release-github.ts",
|
|
45
56
|
"test": "vitest run",
|
|
57
|
+
"test:coverage": "vitest run --coverage",
|
|
46
58
|
"start": "node dist/index.js",
|
|
47
59
|
"start:stdio": "MCP_TRANSPORT_TYPE=stdio node dist/index.js",
|
|
48
60
|
"start:http": "MCP_TRANSPORT_TYPE=http node dist/index.js"
|
|
@@ -56,6 +68,8 @@
|
|
|
56
68
|
"mcp-discovery",
|
|
57
69
|
"mcp-fleet",
|
|
58
70
|
"semantic-search",
|
|
71
|
+
"ai-agents",
|
|
72
|
+
"llm-tools",
|
|
59
73
|
"cyanheads",
|
|
60
74
|
"typescript",
|
|
61
75
|
"bun"
|
|
@@ -65,28 +79,30 @@
|
|
|
65
79
|
"url": "git+https://github.com/cyanheads/cyanheads-mcp-server.git"
|
|
66
80
|
},
|
|
67
81
|
"license": "Apache-2.0",
|
|
68
|
-
"packageManager": "bun@1.
|
|
82
|
+
"packageManager": "bun@1.4.0",
|
|
69
83
|
"engines": {
|
|
70
|
-
"bun": ">=1.
|
|
84
|
+
"bun": ">=1.4.0",
|
|
71
85
|
"node": ">=24.0.0"
|
|
72
86
|
},
|
|
73
87
|
"publishConfig": {
|
|
74
88
|
"access": "public"
|
|
75
89
|
},
|
|
76
90
|
"dependencies": {
|
|
77
|
-
"@cyanheads/mcp-ts-core": "^0.
|
|
78
|
-
"@huggingface/transformers": "4.
|
|
91
|
+
"@cyanheads/mcp-ts-core": "^0.13.6",
|
|
92
|
+
"@huggingface/transformers": "4.3.0",
|
|
79
93
|
"pino-pretty": "^13.1.3",
|
|
80
|
-
"zod": "^4.
|
|
94
|
+
"zod": "^4.6.5"
|
|
81
95
|
},
|
|
82
96
|
"devDependencies": {
|
|
83
|
-
"@biomejs/biome": "^2.5.
|
|
97
|
+
"@biomejs/biome": "^2.5.14",
|
|
84
98
|
"@socketsecurity/bun-security-scanner": "^1.1.2",
|
|
85
|
-
"@types/node": "^26.
|
|
99
|
+
"@types/node": "^26.6.1",
|
|
100
|
+
"@vitest/coverage-istanbul": "5.0.1",
|
|
86
101
|
"depcheck": "^1.4.7",
|
|
87
|
-
"
|
|
88
|
-
"
|
|
102
|
+
"fast-check": "4.10.1",
|
|
103
|
+
"ignore": "^7.0.9",
|
|
104
|
+
"tsc-alias": "^1.9.5",
|
|
89
105
|
"typescript": "^7.0.2",
|
|
90
|
-
"vitest": "^
|
|
106
|
+
"vitest": "^5.0.1"
|
|
91
107
|
}
|
|
92
108
|
}
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/cyanheads-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.4.
|
|
9
|
+
"version": "0.4.2",
|
|
10
10
|
"remotes": [
|
|
11
11
|
{
|
|
12
12
|
"type": "streamable-http",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/cyanheads-mcp-server",
|
|
21
21
|
"runtimeHint": "node",
|
|
22
|
-
"version": "0.4.
|
|
22
|
+
"version": "0.4.2",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{ "type": "positional", "value": "run" },
|
|
25
25
|
{ "type": "positional", "value": "start:stdio" }
|
|
@@ -39,6 +39,13 @@
|
|
|
39
39
|
"isRequired": false,
|
|
40
40
|
"default": "https://caseyjhand.com/fleet.json"
|
|
41
41
|
},
|
|
42
|
+
{
|
|
43
|
+
"name": "CATALOG_FETCH_TIMEOUT_MS",
|
|
44
|
+
"description": "Per-request timeout for fleet.json fetches in milliseconds. Must be > 0.",
|
|
45
|
+
"format": "string",
|
|
46
|
+
"isRequired": false,
|
|
47
|
+
"default": "10000"
|
|
48
|
+
},
|
|
42
49
|
{
|
|
43
50
|
"name": "CATALOG_REFRESH_SECONDS",
|
|
44
51
|
"description": "Background poll interval for fleet.json refresh. 0 disables; otherwise must be > 0.",
|
|
@@ -68,7 +75,7 @@
|
|
|
68
75
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
69
76
|
"identifier": "@cyanheads/cyanheads-mcp-server",
|
|
70
77
|
"runtimeHint": "node",
|
|
71
|
-
"version": "0.4.
|
|
78
|
+
"version": "0.4.2",
|
|
72
79
|
"packageArguments": [
|
|
73
80
|
{ "type": "positional", "value": "run" },
|
|
74
81
|
{ "type": "positional", "value": "start:http" }
|
|
@@ -116,6 +123,13 @@
|
|
|
116
123
|
"isRequired": false,
|
|
117
124
|
"default": "https://caseyjhand.com/fleet.json"
|
|
118
125
|
},
|
|
126
|
+
{
|
|
127
|
+
"name": "CATALOG_FETCH_TIMEOUT_MS",
|
|
128
|
+
"description": "Per-request timeout for fleet.json fetches in milliseconds. Must be > 0.",
|
|
129
|
+
"format": "string",
|
|
130
|
+
"isRequired": false,
|
|
131
|
+
"default": "10000"
|
|
132
|
+
},
|
|
119
133
|
{
|
|
120
134
|
"name": "CATALOG_REFRESH_SECONDS",
|
|
121
135
|
"description": "Background poll interval for fleet.json refresh. 0 disables; otherwise must be > 0.",
|