@cyanheads/cyanheads-mcp-server 0.4.2 → 0.4.4

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 (35) hide show
  1. package/AGENTS.md +14 -13
  2. package/CLAUDE.md +14 -13
  3. package/Dockerfile +41 -29
  4. package/README.md +40 -22
  5. package/changelog/0.4.x/0.4.3.md +34 -0
  6. package/changelog/0.4.x/0.4.4.md +36 -0
  7. package/dist/index.js +3 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/mcp-server/tools/definitions/describe-entry.tool.d.ts +34 -2
  10. package/dist/mcp-server/tools/definitions/describe-entry.tool.d.ts.map +1 -1
  11. package/dist/mcp-server/tools/definitions/describe-entry.tool.js +151 -106
  12. package/dist/mcp-server/tools/definitions/describe-entry.tool.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/search-catalog.tool.d.ts +14 -0
  14. package/dist/mcp-server/tools/definitions/search-catalog.tool.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/search-catalog.tool.js +103 -23
  16. package/dist/mcp-server/tools/definitions/search-catalog.tool.js.map +1 -1
  17. package/dist/services/catalog/catalog-service.d.ts +12 -9
  18. package/dist/services/catalog/catalog-service.d.ts.map +1 -1
  19. package/dist/services/catalog/catalog-service.js +98 -25
  20. package/dist/services/catalog/catalog-service.js.map +1 -1
  21. package/dist/services/catalog/remote-catalog-provider.d.ts +2 -2
  22. package/dist/services/catalog/remote-catalog-provider.d.ts.map +1 -1
  23. package/dist/services/catalog/remote-catalog-provider.js +34 -5
  24. package/dist/services/catalog/remote-catalog-provider.js.map +1 -1
  25. package/dist/services/catalog/self-record.js +5 -5
  26. package/dist/services/catalog/snippets.d.ts.map +1 -1
  27. package/dist/services/catalog/snippets.js +50 -18
  28. package/dist/services/catalog/snippets.js.map +1 -1
  29. package/dist/services/catalog/types.d.ts +29 -14
  30. package/dist/services/catalog/types.d.ts.map +1 -1
  31. package/dist/services/catalog/types.js +12 -3
  32. package/dist/services/catalog/types.js.map +1 -1
  33. package/manifest.json +1 -1
  34. package/package.json +15 -14
  35. package/server.json +11 -13
@@ -1,12 +1,13 @@
1
1
  /**
2
2
  * @fileoverview RemoteJsonCatalogProvider — fetches and validates the fleet.json
3
- * payload (schema v2, with baked embeddings) from a configurable URL. Caches the
4
- * validated result in memory after a successful load.
3
+ * payload (schema v2, with baked embeddings) from a configurable URL. Normalizes
4
+ * duplicate identities before CatalogService builds and caches the index.
5
5
  * @module services/catalog/remote-catalog-provider
6
6
  */
7
+ import { isDeepStrictEqual } from 'node:util';
7
8
  import { z } from '@cyanheads/mcp-ts-core';
8
9
  import { internalError, McpError } from '@cyanheads/mcp-ts-core/errors';
9
- import { fetchWithTimeout, requestContextService } from '@cyanheads/mcp-ts-core/utils';
10
+ import { fetchWithTimeout, logger, requestContextService } from '@cyanheads/mcp-ts-core/utils';
10
11
  // ---------------------------------------------------------------------------
11
12
  // Validation schema (v2)
12
13
  // ---------------------------------------------------------------------------
@@ -36,7 +37,7 @@ const FleetPayloadSchema = z.object({
36
37
  embeddingModel: z.string(),
37
38
  embeddingDims: z.number().int().positive(),
38
39
  embeddingQueryPrefix: z.string(),
39
- servers: z.array(CatalogRecordSchema),
40
+ servers: z.array(CatalogRecordSchema).min(1),
40
41
  });
41
42
  // ---------------------------------------------------------------------------
42
43
  // Provider
@@ -77,7 +78,35 @@ export class RemoteJsonCatalogProvider {
77
78
  issues: parsed.error.issues.slice(0, 5),
78
79
  });
79
80
  }
80
- return parsed.data;
81
+ const payload = parsed.data;
82
+ let collapsed = 0;
83
+ const identities = [];
84
+ function unique(records, owner) {
85
+ const byName = new Map();
86
+ for (const record of records) {
87
+ const previous = byName.get(record.name);
88
+ if (!previous) {
89
+ byName.set(record.name, record);
90
+ }
91
+ else if (!isDeepStrictEqual(previous, record)) {
92
+ throw internalError(`Conflicting catalog records for ${owner}/${record.name}.`);
93
+ }
94
+ else {
95
+ collapsed++;
96
+ if (identities.length < 10)
97
+ identities.push(`${owner}/${record.name}`.slice(0, 160));
98
+ }
99
+ }
100
+ return [...byName.values()];
101
+ }
102
+ const servers = unique(payload.servers.map((server) => ({
103
+ ...server,
104
+ tools: unique(server.tools, server.name),
105
+ })), 'servers');
106
+ if (collapsed) {
107
+ logger.warning(`Collapsed ${collapsed} identical catalog records: ${JSON.stringify(identities)}`);
108
+ }
109
+ return { ...payload, servers };
81
110
  }
82
111
  }
83
112
  //# sourceMappingURL=remote-catalog-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote-catalog-provider.js","sourceRoot":"","sources":["../../../src/services/catalog/remote-catalog-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-catalog-provider.js","sourceRoot":"","sources":["../../../src/services/catalog/remote-catalog-provider.ts"],"names":[],"mappings":"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"}
@@ -36,12 +36,12 @@ function readSelfPackage() {
36
36
  *
37
37
  * `embedding: []` is deliberate and safe. The vector index is built solely from
38
38
  * `FleetPayload.servers` in `CatalogService._buildIndex`, which sizes its packed
39
- * Float32Arrays from that payload and dimension-checks every vector it packs.
40
- * This record is never a member of that payload — it is consulted only after an
41
- * exact-name miss in `getServer()` / `getTool()` — so its embedding is never
42
- * packed, never dot-producted, and never dimension-checked. The tradeoff is that
39
+ * Float32Arrays from that payload and validates and normalizes every vector it
40
+ * packs. This record is never a member of that payload — it is consulted only
41
+ * after a remote-name miss in `getServer()` / `getTool()` — so its embedding is
42
+ * never packed, normalized, or dot-producted. The tradeoff is that
43
43
  * `cyanheads_search_catalog` will not surface this server as a semantic match;
44
- * only exact-name resolution reaches it.
44
+ * only name resolution (exact or unique case-insensitive) reaches it.
45
45
  */
46
46
  function selfTools() {
47
47
  return [searchCatalogTool, describeEntryTool].map((definition) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"snippets.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/snippets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA8LhE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,EAAE,CAOxE"}
1
+ {"version":3,"file":"snippets.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/snippets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqOhE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,EAAE,CAOxE"}
@@ -13,8 +13,13 @@
13
13
  * transport tag is never emitted.
14
14
  * @module services/catalog/snippets
15
15
  */
16
- /** MCP protocol version pinned in the curl `initialize` snippet. */
17
- const CURL_MCP_PROTOCOL_VERSION = '2026-07-28';
16
+ /**
17
+ * Protocol version in the curl probe's legacy `initialize` body: the latest
18
+ * revision that opens with `initialize`. The probe sends no `MCP-Protocol-Version`
19
+ * header — the spec requires it only after initialization, and a 2026-era header
20
+ * on an `initialize` is rejected as a header/body mismatch.
21
+ */
22
+ const CURL_INITIALIZE_PROTOCOL_VERSION = '2025-11-25';
18
23
  /**
19
24
  * `env` block for a JSON config snippet — one empty-valued key per required var.
20
25
  * Returns nothing to spread when the server needs no configuration, so the `env`
@@ -29,6 +34,19 @@ function envBlock(record) {
29
34
  // ---------------------------------------------------------------------------
30
35
  // Local (stdio) factories — built from record.npm via `npx -y <pkg>`
31
36
  // ---------------------------------------------------------------------------
37
+ /** `mcpServers` JSON with an explicit `type: 'stdio'` — the local shape Cline and Claude Desktop both load. */
38
+ function typedStdioConfig(record) {
39
+ return JSON.stringify({
40
+ mcpServers: {
41
+ [record.name]: {
42
+ type: 'stdio',
43
+ command: 'npx',
44
+ args: ['-y', record.npm],
45
+ ...envBlock(record),
46
+ },
47
+ },
48
+ }, null, 2);
49
+ }
32
50
  function claudeCodeStdio(record) {
33
51
  return {
34
52
  client: 'claude-code',
@@ -37,6 +55,14 @@ function claudeCodeStdio(record) {
37
55
  payload: `claude mcp add --transport stdio ${record.name} -- npx -y ${record.npm}`,
38
56
  };
39
57
  }
58
+ function clineStdio(record) {
59
+ return {
60
+ client: 'cline',
61
+ transport: 'stdio',
62
+ label: 'Cline (cline_mcp_settings.json)',
63
+ payload: typedStdioConfig(record),
64
+ };
65
+ }
40
66
  function codexStdio(record) {
41
67
  return {
42
68
  client: 'codex',
@@ -65,22 +91,13 @@ function geminiStdio(record) {
65
91
  payload: `gemini mcp add ${record.name} npx -y ${record.npm}`,
66
92
  };
67
93
  }
68
- /** Generic `mcpServers` JSON (stdio) for Claude Desktop, Cline, and other MCP clients. */
94
+ /** Generic `mcpServers` JSON (stdio) for Claude Desktop and other MCP clients. */
69
95
  function genericStdio(record) {
70
96
  return {
71
97
  client: 'streamable-http',
72
98
  transport: 'stdio',
73
- label: 'Claude Desktop / Cline / generic',
74
- payload: JSON.stringify({
75
- mcpServers: {
76
- [record.name]: {
77
- type: 'stdio',
78
- command: 'npx',
79
- args: ['-y', record.npm],
80
- ...envBlock(record),
81
- },
82
- },
83
- }, null, 2),
99
+ label: 'Claude Desktop / generic',
100
+ payload: typedStdioConfig(record),
84
101
  };
85
102
  }
86
103
  // ---------------------------------------------------------------------------
@@ -94,6 +111,15 @@ function claudeCodeHttp(record, endpoint) {
94
111
  payload: `claude mcp add --transport http ${record.name} ${endpoint}`,
95
112
  };
96
113
  }
114
+ /** Cline reads Streamable HTTP only under `type: 'streamableHttp'`; a URL entry with no `type` falls back to SSE. */
115
+ function clineHttp(record, endpoint) {
116
+ return {
117
+ client: 'cline',
118
+ transport: 'http',
119
+ label: 'Cline (cline_mcp_settings.json)',
120
+ payload: JSON.stringify({ mcpServers: { [record.name]: { type: 'streamableHttp', url: endpoint } } }, null, 2),
121
+ };
122
+ }
97
123
  function codexHttp(record, endpoint) {
98
124
  return {
99
125
  client: 'codex',
@@ -116,7 +142,7 @@ function curlHttp(_record, endpoint) {
116
142
  id: 1,
117
143
  method: 'initialize',
118
144
  params: {
119
- protocolVersion: CURL_MCP_PROTOCOL_VERSION,
145
+ protocolVersion: CURL_INITIALIZE_PROTOCOL_VERSION,
120
146
  capabilities: {},
121
147
  clientInfo: { name: 'curl', version: '1.0.0' },
122
148
  },
@@ -128,7 +154,7 @@ function curlHttp(_record, endpoint) {
128
154
  payload: [
129
155
  `curl -X POST ${endpoint} \\`,
130
156
  ` -H "Content-Type: application/json" \\`,
131
- ` -H "MCP-Protocol-Version: ${CURL_MCP_PROTOCOL_VERSION}" \\`,
157
+ ` -H "Accept: application/json, text/event-stream" \\`,
132
158
  ` -d '${body}'`,
133
159
  ].join('\n'),
134
160
  };
@@ -141,18 +167,23 @@ function geminiHttp(record, endpoint) {
141
167
  payload: `gemini mcp add --transport http ${record.name} ${endpoint}`,
142
168
  };
143
169
  }
144
- /** Generic `mcpServers` JSON (Streamable HTTP) for Claude Desktop, Cline, mcp-remote. */
170
+ /**
171
+ * Generic `mcpServers` JSON (Streamable HTTP, `type: 'http'`). Its label names no
172
+ * client: Claude Desktop adds remote servers through its Connectors settings rather
173
+ * than this file, and Cline needs the `streamableHttp` type its own snippet carries.
174
+ */
145
175
  function genericHttp(record, endpoint) {
146
176
  return {
147
177
  client: 'streamable-http',
148
178
  transport: 'http',
149
- label: 'Claude Desktop / Cline / generic',
179
+ label: 'Generic (mcpServers JSON)',
150
180
  payload: JSON.stringify({ mcpServers: { [record.name]: { type: 'http', url: endpoint } } }, null, 2),
151
181
  };
152
182
  }
153
183
  /** Local (stdio) factories, in render order. One per client that supports a local install. */
154
184
  const STDIO_FACTORIES = [
155
185
  claudeCodeStdio,
186
+ clineStdio,
156
187
  codexStdio,
157
188
  cursorStdio,
158
189
  geminiStdio,
@@ -161,6 +192,7 @@ const STDIO_FACTORIES = [
161
192
  /** Remote (HTTP) factories, in render order. Emitted only when the record has an endpoint. */
162
193
  const HTTP_FACTORIES = [
163
194
  claudeCodeHttp,
195
+ clineHttp,
164
196
  codexHttp,
165
197
  cursorHttp,
166
198
  curlHttp,
@@ -1 +1 @@
1
- {"version":3,"file":"snippets.js","sourceRoot":"","sources":["../../../src/services/catalog/snippets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snippets.js","sourceRoot":"","sources":["../../../src/services/catalog/snippets.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * @fileoverview Shared types for the catalog service — CatalogRecord, CatalogTool,
3
- * FleetPayload (v2 with baked embeddings), InstallSnippet, ClientId,
4
- * and the service interface.
3
+ * CatalogToolEntry, FleetPayload (v2 with baked embeddings), InstallSnippet,
4
+ * ClientId with its CLIENT_IDS list, and the service interface.
5
5
  * @module services/catalog/types
6
6
  */
7
- /** Supported MCP client identifiers for install snippets. */
8
- export type ClientId = 'claude-code' | 'codex' | 'cursor' | 'curl' | 'gemini' | 'streamable-http';
7
+ /** Supported MCP client identifiers for install snippets — the one list the tool schemas enumerate. */
8
+ export declare const CLIENT_IDS: readonly ['claude-code', 'cline', 'codex', 'cursor', 'curl', 'gemini', 'streamable-http'];
9
+ /** Supported MCP client identifier for install snippets. */
10
+ export type ClientId = (typeof CLIENT_IDS)[number];
9
11
  /** Catalog category for a fleet server. */
10
12
  export type CatalogCategory = 'research' | 'government' | 'public-data' | 'utility';
11
13
  /** Single tool entry inside a CatalogRecord. */
@@ -13,13 +15,19 @@ export interface CatalogTool {
13
15
  /** Human-readable description. */
14
16
  description: string;
15
17
  /**
16
- * L2-normalized, Matryoshka-truncated embedding vector.
17
- * Length matches FleetPayload.embeddingDims.
18
+ * Matryoshka-truncated embedding vector, L2-normalized by the producer.
19
+ * Length matches FleetPayload.embeddingDims. The service normalizes it in
20
+ * float64 at load and rejects a payload whose vector is all zeros; schema
21
+ * validation rejects a non-finite component.
18
22
  */
19
23
  embedding: number[];
20
24
  /** Fully-qualified name: snake_case (e.g. "earthquake_search"). */
21
25
  name: string;
22
26
  }
27
+ /** One tool row with the server record that owns it. */
28
+ export type CatalogToolEntry = CatalogTool & {
29
+ serverRecord: CatalogRecord;
30
+ };
23
31
  /** Per-client install snippet for one transport. */
24
32
  export interface InstallSnippet {
25
33
  /** MCP client identifier. */
@@ -29,11 +37,12 @@ export interface InstallSnippet {
29
37
  /**
30
38
  * The install payload. Shape varies by client and transport:
31
39
  * - claude-code: CLI — stdio `claude mcp add --transport stdio <name> -- npx -y <pkg>`; http `claude mcp add --transport http <name> <url>`
40
+ * - cline: `cline_mcp_settings.json` JSON — stdio `{ type: 'stdio', command, args }`; http `{ type: 'streamableHttp', url }`
32
41
  * - codex: CLI — stdio `codex mcp add <name> -- npx -y <pkg>`; http `codex mcp add <name> --url <url>`
33
42
  * - cursor: `mcpServers` JSON, no `type` field — stdio `{ command, args }`; http `{ url }`
34
43
  * - gemini: CLI — stdio `gemini mcp add <name> npx -y <pkg>`; http `gemini mcp add --transport http <name> <url>`
35
44
  * - streamable-http: generic `mcpServers` JSON with `type` — stdio `{ type: 'stdio', command, args }`; http `{ type: 'http', url }`
36
- * - curl: http only — `initialize` connectivity probe against the endpoint
45
+ * - curl: http only — legacy `initialize` connectivity probe against the endpoint
37
46
  */
38
47
  payload: string;
39
48
  /**
@@ -57,8 +66,9 @@ export interface CatalogRecord {
57
66
  /** Human label (e.g. "arXiv"). */
58
67
  displayName: string;
59
68
  /**
60
- * L2-normalized, Matryoshka-truncated embedding vector of
61
- * `${displayName}\n${description}`. Length matches FleetPayload.embeddingDims.
69
+ * Matryoshka-truncated embedding vector of `${displayName}\n${description}`,
70
+ * L2-normalized by the producer. Length matches FleetPayload.embeddingDims.
71
+ * Normalized in float64 at load, like each tool vector.
62
72
  */
63
73
  embedding: number[];
64
74
  /**
@@ -116,12 +126,17 @@ export interface CatalogSearchResult {
116
126
  }
117
127
  /** Service interface. */
118
128
  export interface ICatalogService {
119
- /** Look up a server by exact name. Returns null if not found. */
129
+ /** Exact remote name, then unique case-insensitive remote name, then self fallback. Ambiguous folds return null. */
120
130
  getServer(name: string): CatalogRecord | null;
121
- /** Look up a tool by exact name. Returns null if not found. */
122
- getTool(name: string): (CatalogTool & {
123
- serverRecord: CatalogRecord;
124
- }) | null;
131
+ /**
132
+ * Every tool row the name resolves to, in payload order. Without `server`:
133
+ * every owner of the exact name, else every owner of a case-insensitive
134
+ * match that has one spelling, else the self tool. Case-insensitive matches
135
+ * with several spellings return none. With `server` (resolved like
136
+ * `getServer`): that owner's exact name, else its unique case-insensitive
137
+ * match, else the self tool when the owner is this server.
138
+ */
139
+ getTool(name: string, server?: string): CatalogToolEntry[];
125
140
  /**
126
141
  * Fetch fleet.json, validate, build the vector index, and load the embedding model.
127
142
  * Starts the background refresh timer if configured.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/types.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,17 @@
1
1
  /**
2
2
  * @fileoverview Shared types for the catalog service — CatalogRecord, CatalogTool,
3
- * FleetPayload (v2 with baked embeddings), InstallSnippet, ClientId,
4
- * and the service interface.
3
+ * CatalogToolEntry, FleetPayload (v2 with baked embeddings), InstallSnippet,
4
+ * ClientId with its CLIENT_IDS list, and the service interface.
5
5
  * @module services/catalog/types
6
6
  */
7
- export {};
7
+ /** Supported MCP client identifiers for install snippets — the one list the tool schemas enumerate. */
8
+ export const CLIENT_IDS = [
9
+ 'claude-code',
10
+ 'cline',
11
+ 'codex',
12
+ 'cursor',
13
+ 'curl',
14
+ 'gemini',
15
+ 'streamable-http',
16
+ ];
8
17
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/catalog/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/catalog/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uGAAuG;AACvG,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,aAAa;IACb,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,iBAAiB;CACT,CAAC"}
package/manifest.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "manifest_version": "0.3",
3
3
  "name": "cyanheads-mcp-server",
4
- "version": "0.4.2",
4
+ "version": "0.4.4",
5
5
  "description": "Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.",
6
6
  "author": {
7
7
  "name": "cyanheads",
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.2",
4
+ "version": "0.4.4",
5
5
  "description": "Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
@@ -12,6 +12,7 @@
12
12
  "files": [
13
13
  "changelog/",
14
14
  "dist/",
15
+ "!dist/*.mcpb",
15
16
  "README.md",
16
17
  "LICENSE",
17
18
  "CLAUDE.md",
@@ -79,7 +80,7 @@
79
80
  "url": "git+https://github.com/cyanheads/cyanheads-mcp-server.git"
80
81
  },
81
82
  "license": "Apache-2.0",
82
- "packageManager": "bun@1.4.0",
83
+ "packageManager": "bun@1.4.3",
83
84
  "engines": {
84
85
  "bun": ">=1.4.0",
85
86
  "node": ">=24.0.0"
@@ -88,21 +89,21 @@
88
89
  "access": "public"
89
90
  },
90
91
  "dependencies": {
91
- "@cyanheads/mcp-ts-core": "^0.13.6",
92
- "@huggingface/transformers": "4.3.0",
93
- "pino-pretty": "^13.1.3",
94
- "zod": "^4.6.5"
92
+ "@cyanheads/mcp-ts-core": "^0.13.15",
93
+ "@huggingface/transformers": "4.3.1",
94
+ "pino-pretty": "^13.2.0",
95
+ "zod": "^4.6.7"
95
96
  },
96
97
  "devDependencies": {
97
- "@biomejs/biome": "^2.5.14",
98
- "@socketsecurity/bun-security-scanner": "^1.1.2",
99
- "@types/node": "^26.6.1",
100
- "@vitest/coverage-istanbul": "5.0.1",
98
+ "@biomejs/biome": "^2.5.15",
99
+ "@socketsecurity/bun-security-scanner": "^1.1.3",
100
+ "@types/node": "^26.6.5",
101
+ "@vitest/coverage-istanbul": "5.0.5",
101
102
  "depcheck": "^1.4.7",
102
- "fast-check": "4.10.1",
103
- "ignore": "^7.0.9",
104
- "tsc-alias": "^1.9.5",
103
+ "fast-check": "4.10.2",
104
+ "ignore": "^7.0.12",
105
+ "tsc-alias": "^1.9.7",
105
106
  "typescript": "^7.0.2",
106
- "vitest": "^5.0.1"
107
+ "vitest": "^5.0.5"
107
108
  }
108
109
  }
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.2",
9
+ "version": "0.4.4",
10
10
  "remotes": [
11
11
  {
12
12
  "type": "streamable-http",
@@ -18,12 +18,8 @@
18
18
  "registryType": "npm",
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/cyanheads-mcp-server",
21
- "runtimeHint": "node",
22
- "version": "0.4.2",
23
- "packageArguments": [
24
- { "type": "positional", "value": "run" },
25
- { "type": "positional", "value": "start:stdio" }
26
- ],
21
+ "runtimeHint": "npx",
22
+ "version": "0.4.4",
27
23
  "environmentVariables": [
28
24
  {
29
25
  "name": "MCP_LOG_LEVEL",
@@ -74,13 +70,15 @@
74
70
  "registryType": "npm",
75
71
  "registryBaseUrl": "https://registry.npmjs.org",
76
72
  "identifier": "@cyanheads/cyanheads-mcp-server",
77
- "runtimeHint": "node",
78
- "version": "0.4.2",
79
- "packageArguments": [
80
- { "type": "positional", "value": "run" },
81
- { "type": "positional", "value": "start:http" }
82
- ],
73
+ "runtimeHint": "npx",
74
+ "version": "0.4.4",
83
75
  "environmentVariables": [
76
+ {
77
+ "name": "MCP_TRANSPORT_TYPE",
78
+ "description": "Selects the HTTP transport.",
79
+ "format": "string",
80
+ "value": "http"
81
+ },
84
82
  {
85
83
  "name": "MCP_HTTP_HOST",
86
84
  "description": "Hostname for the HTTP server.",