@cyanheads/cyanheads-mcp-server 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +19 -4
- package/CLAUDE.md +19 -4
- package/README.md +1 -1
- package/changelog/0.1.x/0.1.9.md +13 -0
- package/changelog/0.2.x/0.2.0.md +19 -0
- package/changelog/template.md +1 -1
- package/dist/mcp-server/tools/definitions/describe.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/describe.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search.tool.d.ts +18 -8
- package/dist/mcp-server/tools/definitions/search.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search.tool.js +90 -29
- package/dist/mcp-server/tools/definitions/search.tool.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +10 -9
- package/server.json +3 -3
package/AGENTS.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** cyanheads-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.
|
|
4
|
+
**Version:** 0.2.0
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.16`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
8
|
**Zod:** ^4.4.3
|
|
@@ -300,14 +300,26 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
300
300
|
| `npm run rebuild` | Clean + build |
|
|
301
301
|
| `npm run clean` | Remove build artifacts |
|
|
302
302
|
| `npm run devcheck` | Lint + format + typecheck + security + changelog sync |
|
|
303
|
-
| `bun run audit:refresh` | Delete `bun.lock`, reinstall, re-audit
|
|
303
|
+
| `bun run audit:refresh` | Delete `bun.lock`, reinstall, and re-run `bun audit`. Use when `devcheck` flags a transitive advisory — Bun's `update` is sticky on transitive resolutions, so the advisory may be a stale-lockfile false positive. If it survives the refresh, it's real. |
|
|
304
304
|
| `npm run tree` | Generate directory structure doc |
|
|
305
|
-
| `npm run format` | Auto-fix formatting |
|
|
305
|
+
| `npm run format` | Auto-fix formatting (safe fixes only) |
|
|
306
|
+
| `npm run format:unsafe` | Also apply Biome's unsafe autofixes — review the diff; they can change behavior |
|
|
306
307
|
| `npm test` | Run tests |
|
|
307
308
|
| `npm run start:stdio` | Production mode (stdio) |
|
|
308
309
|
| `npm run start:http` | Production mode (HTTP) |
|
|
309
310
|
| `npm run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` |
|
|
310
311
|
| `npm run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
|
|
312
|
+
| `npm run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Bundling
|
|
317
|
+
|
|
318
|
+
`npm run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. MCPB is stdio-only — HTTP and Cloudflare Workers deployments are unaffected. Consumers who don't need it can delete `manifest.json` and `.mcpbignore`; `lint:packaging` skips cleanly.
|
|
319
|
+
|
|
320
|
+
**Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match.
|
|
321
|
+
|
|
322
|
+
**README install badges** (Claude Desktop `.mcpb`, Cursor, VS Code) and the `base64` / `encodeURIComponent` config-generation commands are ship-time concerns — run the `polish-docs-meta` skill, which carries the badge format, layout, and generation snippets in `skills/polish-docs-meta/references/readme.md`.
|
|
311
323
|
|
|
312
324
|
---
|
|
313
325
|
|
|
@@ -364,4 +376,7 @@ import { getMyService } from '@/services/my-domain/my-service.js';
|
|
|
364
376
|
- [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
|
|
365
377
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports)
|
|
366
378
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
379
|
+
- [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
|
|
380
|
+
- [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
|
|
381
|
+
- [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry with server name key, env vars for any required API keys
|
|
367
382
|
- [ ] `npm run devcheck` passes
|
package/CLAUDE.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** cyanheads-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.
|
|
4
|
+
**Version:** 0.2.0
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.16`
|
|
6
6
|
**Engines:** Bun ≥1.3.0, Node ≥24.0.0
|
|
7
7
|
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
8
|
**Zod:** ^4.4.3
|
|
@@ -300,14 +300,26 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
300
300
|
| `npm run rebuild` | Clean + build |
|
|
301
301
|
| `npm run clean` | Remove build artifacts |
|
|
302
302
|
| `npm run devcheck` | Lint + format + typecheck + security + changelog sync |
|
|
303
|
-
| `bun run audit:refresh` | Delete `bun.lock`, reinstall, re-audit
|
|
303
|
+
| `bun run audit:refresh` | Delete `bun.lock`, reinstall, and re-run `bun audit`. Use when `devcheck` flags a transitive advisory — Bun's `update` is sticky on transitive resolutions, so the advisory may be a stale-lockfile false positive. If it survives the refresh, it's real. |
|
|
304
304
|
| `npm run tree` | Generate directory structure doc |
|
|
305
|
-
| `npm run format` | Auto-fix formatting |
|
|
305
|
+
| `npm run format` | Auto-fix formatting (safe fixes only) |
|
|
306
|
+
| `npm run format:unsafe` | Also apply Biome's unsafe autofixes — review the diff; they can change behavior |
|
|
306
307
|
| `npm test` | Run tests |
|
|
307
308
|
| `npm run start:stdio` | Production mode (stdio) |
|
|
308
309
|
| `npm run start:http` | Production mode (HTTP) |
|
|
309
310
|
| `npm run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` |
|
|
310
311
|
| `npm run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
|
|
312
|
+
| `npm run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## Bundling
|
|
317
|
+
|
|
318
|
+
`npm run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. MCPB is stdio-only — HTTP and Cloudflare Workers deployments are unaffected. Consumers who don't need it can delete `manifest.json` and `.mcpbignore`; `lint:packaging` skips cleanly.
|
|
319
|
+
|
|
320
|
+
**Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match.
|
|
321
|
+
|
|
322
|
+
**README install badges** (Claude Desktop `.mcpb`, Cursor, VS Code) and the `base64` / `encodeURIComponent` config-generation commands are ship-time concerns — run the `polish-docs-meta` skill, which carries the badge format, layout, and generation snippets in `skills/polish-docs-meta/references/readme.md`.
|
|
311
323
|
|
|
312
324
|
---
|
|
313
325
|
|
|
@@ -364,4 +376,7 @@ import { getMyService } from '@/services/my-domain/my-service.js';
|
|
|
364
376
|
- [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
|
|
365
377
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports)
|
|
366
378
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
379
|
+
- [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
|
|
380
|
+
- [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
|
|
381
|
+
- [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry with server name key, env vars for any required API keys
|
|
367
382
|
- [ ] `npm run devcheck` passes
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/cyanheads-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/cyanheads-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "cyanheads_search enrichment — query echo, true total, and empty-result guidance in a typed enrichment block reaching both structuredContent and content[]; structuredContent keys totalMatched→totalCount and query→effectiveQuery"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.1.9 — 2026-05-30
|
|
8
|
+
|
|
9
|
+
## Changed
|
|
10
|
+
|
|
11
|
+
- **`cyanheads_search` enrichment adoption.** Query echo, true match total, and empty-result guidance now surface in a typed `enrichment` block that reaches both the `structuredContent` JSON and the `content[]` markdown trailer. Both channels carry the same data; clients that read either surface now see the context.
|
|
12
|
+
- **`structuredContent` key renames.** `totalMatched` → `totalCount` (now in `enrichment`); `query` → `effectiveQuery` (now in `enrichment`). Values and presence semantics are unchanged — keys moved out of the domain return and into the enrichment block.
|
|
13
|
+
- **`@cyanheads/mcp-ts-core` `^0.9.11` → `^0.9.16`.** Framework adoption: `ctx.enrich` API, `getEnrichment` test helper, enrichment contract on `tool()`, plus dev-dep bumps (`@biomejs/biome`, `@types/node`, `tsc-alias`, `tsx`, `typescript ^6.0.3`, `vitest`).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "cyanheads_search servers roll-up (scope tools), structured-empty on zero matches, and .mcpbignore root-anchor fix"
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.2.0 — 2026-05-30
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **`cyanheads_search` servers roll-up** (scope `tools`). The response now includes a `servers` array built from the full match set before the limit slice — each entry carries `name`, `brief`, `category`, `matchedTools` (count of this server's tools in the match set), and `topScore` (best per-tool cosine). Ordered by `topScore` desc (name-tiebroken), capped at 10. `serversTotal` surfaces the true distinct-server count when the cap fires. Absent for scope `servers`. ([#4](https://github.com/cyanheads/cyanheads-mcp-server/issues/4))
|
|
12
|
+
|
|
13
|
+
## Changed
|
|
14
|
+
|
|
15
|
+
- **`cyanheads_search` zero-match path.** Returns `{ results: [], scope }` with enrichment populated (`effectiveQuery`, `totalCount: 0`, recovery `notice`) instead of throwing `no_results`. The `no_results` reason is removed from the tool's `errors[]` contract. Aligns the zero-match path with the rest of the fleet's search tools — agents no longer take an error round-trip on a valid empty query. ([#3](https://github.com/cyanheads/cyanheads-mcp-server/issues/3))
|
|
16
|
+
|
|
17
|
+
## Fixed
|
|
18
|
+
|
|
19
|
+
- **`.mcpbignore` directory excludes anchored to repo root.** Bare directory names (`src/`, `tests/`, `scripts/`, `skills/`, `docs/`, `coverage/`, `changelog/`, `announcements/`, `schemas/`) were unanchored and recursively matched inside `node_modules/`, stripping `@opentelemetry/api/build/src/` from the bundle (bundled server crashed on load). Prefixed with `/` to anchor to root. ([#2](https://github.com/cyanheads/cyanheads-mcp-server/issues/2))
|
package/changelog/template.md
CHANGED
|
@@ -43,7 +43,7 @@ security: false
|
|
|
43
43
|
name the symbol, state what changed, stop. Use a second sentence only when
|
|
44
44
|
it carries weight. If a bullet feels long, it is.
|
|
45
45
|
|
|
46
|
-
Cut: mechanism walkthroughs (those belong in JSDoc, AGENTS.md, or the
|
|
46
|
+
Cut: mechanism walkthroughs (those belong in JSDoc, CLAUDE.md/AGENTS.md, or the
|
|
47
47
|
relevant skill), ceremonial framings ("This release introduces…",
|
|
48
48
|
backwards-compat paragraphs), file-by-file test enumerations, internal
|
|
49
49
|
implementation notes. Prefer code/symbol names over English re-explanations.
|
|
@@ -67,5 +67,5 @@ export declare const describeTool: import("@cyanheads/mcp-ts-core").ToolDefiniti
|
|
|
67
67
|
readonly when: "Catalog has not finished loading.";
|
|
68
68
|
readonly recovery: "Retry in a few seconds; the catalog is still loading.";
|
|
69
69
|
readonly retryable: true;
|
|
70
|
-
}]>;
|
|
70
|
+
}], undefined>;
|
|
71
71
|
//# sourceMappingURL=describe.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"describe.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/describe.tool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"describe.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/describe.tool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8MvB,CAAC"}
|
|
@@ -32,22 +32,32 @@ export declare const searchTool: import("@cyanheads/mcp-ts-core").ToolDefinition
|
|
|
32
32
|
}>;
|
|
33
33
|
score: z.ZodNumber;
|
|
34
34
|
}, z.core.$strip>>;
|
|
35
|
-
totalMatched: z.ZodNumber;
|
|
36
|
-
query: z.ZodString;
|
|
37
35
|
scope: z.ZodEnum<{
|
|
38
36
|
tools: "tools";
|
|
39
37
|
servers: "servers";
|
|
40
38
|
}>;
|
|
39
|
+
servers: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
40
|
+
name: z.ZodString;
|
|
41
|
+
brief: z.ZodString;
|
|
42
|
+
category: z.ZodEnum<{
|
|
43
|
+
research: "research";
|
|
44
|
+
government: "government";
|
|
45
|
+
"public-data": "public-data";
|
|
46
|
+
utility: "utility";
|
|
47
|
+
}>;
|
|
48
|
+
matchedTools: z.ZodNumber;
|
|
49
|
+
topScore: z.ZodNumber;
|
|
50
|
+
}, z.core.$strip>>>;
|
|
51
|
+
serversTotal: z.ZodOptional<z.ZodNumber>;
|
|
41
52
|
}, z.core.$strip>, readonly [{
|
|
42
|
-
readonly reason: "no_results";
|
|
43
|
-
readonly code: JsonRpcErrorCode.NotFound;
|
|
44
|
-
readonly when: "Query produced no relevant matches.";
|
|
45
|
-
readonly recovery: "Broaden the query, remove the category filter, or try scope \"servers\" to find the right server first.";
|
|
46
|
-
}, {
|
|
47
53
|
readonly reason: "catalog_empty";
|
|
48
54
|
readonly code: JsonRpcErrorCode.ServiceUnavailable;
|
|
49
55
|
readonly when: "Catalog has not finished loading.";
|
|
50
56
|
readonly recovery: "Retry in a few seconds; the catalog is still loading.";
|
|
51
57
|
readonly retryable: true;
|
|
52
|
-
}]
|
|
58
|
+
}], {
|
|
59
|
+
readonly effectiveQuery: z.ZodString;
|
|
60
|
+
readonly totalCount: z.ZodNumber;
|
|
61
|
+
readonly notice: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}>;
|
|
53
63
|
//# sourceMappingURL=search.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyNrB,CAAC"}
|
|
@@ -56,17 +56,41 @@ export const searchTool = tool('cyanheads_search', {
|
|
|
56
56
|
})
|
|
57
57
|
.describe('A single search result entry.'))
|
|
58
58
|
.describe('Ranked matches, best first.'),
|
|
59
|
-
totalMatched: z.number().describe('Total relevant matches before the limit was applied.'),
|
|
60
|
-
query: z.string().describe('The query that was searched.'),
|
|
61
59
|
scope: z.enum(['tools', 'servers']).describe('Scope that was searched.'),
|
|
60
|
+
servers: z
|
|
61
|
+
.array(z
|
|
62
|
+
.object({
|
|
63
|
+
name: z.string().describe('Server package name (e.g. "cdc-health-mcp-server").'),
|
|
64
|
+
brief: z.string().describe('One-line description of what the server does.'),
|
|
65
|
+
category: z
|
|
66
|
+
.enum(['research', 'government', 'public-data', 'utility'])
|
|
67
|
+
.describe('Catalog category.'),
|
|
68
|
+
matchedTools: z
|
|
69
|
+
.number()
|
|
70
|
+
.describe("Count of this server's tools in the full match set."),
|
|
71
|
+
topScore: z
|
|
72
|
+
.number()
|
|
73
|
+
.describe('Best cosine similarity among this server\'s matched tools. Drives ordering. Distinct from the score a server gets under scope "servers".'),
|
|
74
|
+
})
|
|
75
|
+
.describe('A server roll-up entry.'))
|
|
76
|
+
.optional()
|
|
77
|
+
.describe('Roll-up of distinct servers across the full match set, before the limit slice. Present only for scope "tools". Ordered by topScore desc (name-tiebroken); capped at 10. Use serversTotal to see how many distinct servers matched in total.'),
|
|
78
|
+
serversTotal: z
|
|
79
|
+
.number()
|
|
80
|
+
.optional()
|
|
81
|
+
.describe('Total distinct servers in the full match set (before the cap of 10 is applied). Present only when servers is present.'),
|
|
62
82
|
}),
|
|
83
|
+
// Agent-facing search context — query echo, total count, empty-result guidance.
|
|
84
|
+
// Reaches both structuredContent and content[] trailer; never in the domain return.
|
|
85
|
+
enrichment: {
|
|
86
|
+
effectiveQuery: z.string().describe('The query that was searched.'),
|
|
87
|
+
totalCount: z.number().describe('Total relevant matches before the limit was applied.'),
|
|
88
|
+
notice: z
|
|
89
|
+
.string()
|
|
90
|
+
.optional()
|
|
91
|
+
.describe('Guidance when no results matched — e.g. how to broaden the query or try a different scope. Absent on successful result pages.'),
|
|
92
|
+
},
|
|
63
93
|
errors: [
|
|
64
|
-
{
|
|
65
|
-
reason: 'no_results',
|
|
66
|
-
code: JsonRpcErrorCode.NotFound,
|
|
67
|
-
when: 'Query produced no relevant matches.',
|
|
68
|
-
recovery: 'Broaden the query, remove the category filter, or try scope "servers" to find the right server first.',
|
|
69
|
-
},
|
|
70
94
|
{
|
|
71
95
|
reason: 'catalog_empty',
|
|
72
96
|
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
@@ -88,34 +112,71 @@ export const searchTool = tool('cyanheads_search', {
|
|
|
88
112
|
...(input.category ? { category: input.category } : {}),
|
|
89
113
|
});
|
|
90
114
|
const totalMatched = allResults.length;
|
|
115
|
+
ctx.enrich.echo(input.query);
|
|
116
|
+
ctx.enrich.total(totalMatched);
|
|
91
117
|
if (totalMatched === 0) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
query: input.query,
|
|
95
|
-
scope: input.scope,
|
|
96
|
-
category: input.category,
|
|
97
|
-
});
|
|
118
|
+
ctx.enrich.notice(`No ${input.scope} matched "${input.query}". Try broadening the query${input.category ? ', removing the category filter,' : ''} or switching to scope "${input.scope === 'tools' ? 'servers' : 'tools'}".`);
|
|
119
|
+
return { results: [], scope: input.scope };
|
|
98
120
|
}
|
|
99
121
|
const results = allResults.slice(0, input.limit);
|
|
100
122
|
ctx.log.info('Search complete', { totalMatched, returned: results.length });
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
123
|
+
if (input.scope === 'tools') {
|
|
124
|
+
// Build server roll-up from the full match set (before limit slice)
|
|
125
|
+
const SERVERS_CAP = 10;
|
|
126
|
+
const serverMap = new Map();
|
|
127
|
+
for (const r of allResults) {
|
|
128
|
+
const existing = serverMap.get(r.server);
|
|
129
|
+
if (existing) {
|
|
130
|
+
existing.matchedTools++;
|
|
131
|
+
if (r.score > existing.topScore)
|
|
132
|
+
existing.topScore = r.score;
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
serverMap.set(r.server, { matchedTools: 1, topScore: r.score });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const serversTotal = serverMap.size;
|
|
139
|
+
const servers = Array.from(serverMap.entries())
|
|
140
|
+
.sort(([nameA, a], [nameB, b]) => b.topScore - a.topScore || nameA.localeCompare(nameB))
|
|
141
|
+
.slice(0, SERVERS_CAP)
|
|
142
|
+
.map(([name, agg]) => {
|
|
143
|
+
const record = catalog.getServer(name);
|
|
144
|
+
return {
|
|
145
|
+
name,
|
|
146
|
+
brief: record?.description ?? '',
|
|
147
|
+
category: record?.category ?? 'utility',
|
|
148
|
+
matchedTools: agg.matchedTools,
|
|
149
|
+
topScore: agg.topScore,
|
|
150
|
+
};
|
|
151
|
+
});
|
|
152
|
+
return { results, scope: input.scope, servers, serversTotal };
|
|
153
|
+
}
|
|
154
|
+
return { results, scope: input.scope };
|
|
107
155
|
},
|
|
108
156
|
format: (result) => {
|
|
109
|
-
const lines = [
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
157
|
+
const lines = [`**Scope:** ${result.scope}`, ''];
|
|
158
|
+
if (result.results.length === 0) {
|
|
159
|
+
lines.push('No results matched.');
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
for (const item of result.results) {
|
|
163
|
+
lines.push(`### ${item.name}`);
|
|
164
|
+
lines.push(`**Server:** ${item.server} | **Category:** ${item.category} | **Score:** ${item.score.toFixed(3)}`);
|
|
165
|
+
lines.push(item.brief);
|
|
166
|
+
lines.push('');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (result.servers && result.servers.length > 0) {
|
|
170
|
+
const cap = result.servers.length;
|
|
171
|
+
const total = result.serversTotal ?? cap;
|
|
172
|
+
const header = total > cap ? `## Servers (showing ${cap} of ${total})` : '## Servers';
|
|
173
|
+
lines.push(header);
|
|
118
174
|
lines.push('');
|
|
175
|
+
for (const s of result.servers) {
|
|
176
|
+
lines.push(`**${s.name}** (${s.category}) — ${s.matchedTools} matched tool${s.matchedTools === 1 ? '' : 's'}, top score ${s.topScore.toFixed(3)}`);
|
|
177
|
+
lines.push(s.brief);
|
|
178
|
+
lines.push('');
|
|
179
|
+
}
|
|
119
180
|
}
|
|
120
181
|
return [{ type: 'text', text: lines.join('\n') }];
|
|
121
182
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search.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,uCAAuC,CAAC;AAE1E,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE;IACjD,KAAK,EAAE,gCAAgC;IACvC,WAAW,EACT,8FAA8F;QAC9F,yFAAyF;QACzF,mFAAmF;QACnF,0FAA0F;IAC5F,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;IACzD,IAAI,EAAE,CAAC,4BAA4B,CAAC;IAEpC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CACP,wGAAwG,CACzG;QACH,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;aAC1B,OAAO,CAAC,OAAO,CAAC;aAChB,QAAQ,CACP,kGAAkG,CACnG;QACH,QAAQ,EAAE,CAAC;aACR,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;aAC1D,QAAQ,EAAE;aACV,QAAQ,CAAC,4DAA4D,CAAC;QACzE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,wDAAwD,CAAC;KACtE,CAAC;IAEF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC;aACP,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,CAAC,wEAAwE,CAAC;YACrF,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CACP,0GAA0G,CAC3G;YACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;YAChF,QAAQ,EAAE,CAAC;iBACR,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;iBAC1D,QAAQ,CAAC,yCAAyC,CAAC;YACtD,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,CACP,gHAAgH,CACjH;SACJ,CAAC;aACD,QAAQ,CAAC,+BAA+B,CAAC,CAC7C;aACA,QAAQ,CAAC,6BAA6B,CAAC;QAC1C,
|
|
1
|
+
{"version":3,"file":"search.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search.tool.ts"],"names":[],"mappings":"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"}
|
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
|
+
"version": "0.2.0",
|
|
5
5
|
"description": "Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.",
|
|
6
6
|
"author": { "name": "cyanheads" },
|
|
7
7
|
"repository": {
|
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
|
+
"version": "0.2.0",
|
|
5
5
|
"description": "Fleet discovery for the cyanheads MCP ecosystem — semantic search + install snippets.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
"audit:refresh": "rm -f bun.lock && bun install && bun audit",
|
|
34
34
|
"tree": "tsx scripts/tree.ts",
|
|
35
35
|
"list-skills": "tsx scripts/list-skills.ts",
|
|
36
|
-
"format": "biome check --write
|
|
36
|
+
"format": "biome check --write .",
|
|
37
|
+
"format:unsafe": "biome check --write --unsafe .",
|
|
37
38
|
"lint:mcp": "tsx scripts/lint-mcp.ts",
|
|
38
39
|
"lint:packaging": "tsx scripts/lint-packaging.ts",
|
|
39
40
|
"bundle": "tsx scripts/build.ts && npx -y @anthropic-ai/mcpb pack . dist/cyanheads-mcp-server.mcpb",
|
|
@@ -69,19 +70,19 @@
|
|
|
69
70
|
"access": "public"
|
|
70
71
|
},
|
|
71
72
|
"dependencies": {
|
|
72
|
-
"@cyanheads/mcp-ts-core": "^0.9.
|
|
73
|
+
"@cyanheads/mcp-ts-core": "^0.9.16",
|
|
73
74
|
"@huggingface/transformers": "4.2.0",
|
|
74
75
|
"pino-pretty": "^13.1.3",
|
|
75
76
|
"zod": "^4.4.3"
|
|
76
77
|
},
|
|
77
78
|
"devDependencies": {
|
|
78
|
-
"@biomejs/biome": "^2.4.
|
|
79
|
-
"@types/node": "^25.
|
|
79
|
+
"@biomejs/biome": "^2.4.16",
|
|
80
|
+
"@types/node": "^25.9.1",
|
|
80
81
|
"depcheck": "^1.4.7",
|
|
81
82
|
"ignore": "^7.0.5",
|
|
82
|
-
"tsc-alias": "^1.8.
|
|
83
|
-
"tsx": "^4.
|
|
84
|
-
"typescript": "^
|
|
85
|
-
"vitest": "^4.1.
|
|
83
|
+
"tsc-alias": "^1.8.17",
|
|
84
|
+
"tsx": "^4.22.3",
|
|
85
|
+
"typescript": "^6.0.3",
|
|
86
|
+
"vitest": "^4.1.7"
|
|
86
87
|
}
|
|
87
88
|
}
|
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.
|
|
9
|
+
"version": "0.2.0",
|
|
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.
|
|
22
|
+
"version": "0.2.0",
|
|
23
23
|
"packageArguments": [
|
|
24
24
|
{ "type": "positional", "value": "run" },
|
|
25
25
|
{ "type": "positional", "value": "start:stdio" }
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
69
69
|
"identifier": "@cyanheads/cyanheads-mcp-server",
|
|
70
70
|
"runtimeHint": "node",
|
|
71
|
-
"version": "0.
|
|
71
|
+
"version": "0.2.0",
|
|
72
72
|
"packageArguments": [
|
|
73
73
|
{ "type": "positional", "value": "run" },
|
|
74
74
|
{ "type": "positional", "value": "start:http" }
|