@cyanheads/mcp-ts-core 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,9 +5,9 @@
5
5
 
6
6
  <div align="center">
7
7
 
8
- [![Version](https://img.shields.io/badge/Version-0.3.5-blue.svg?style=flat-square)](./CHANGELOG.md) [![MCP Spec](https://img.shields.io/badge/MCP%20Spec-2025--11--25-8A2BE2.svg?style=flat-square)](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-11-25/changelog.mdx) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE)
8
+ [![Version](https://img.shields.io/badge/Version-0.3.6-blue.svg?style=flat-square)](./CHANGELOG.md) [![MCP Spec](https://img.shields.io/badge/MCP%20Spec-2025--11--25-8A2BE2.svg?style=flat-square)](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/docs/specification/2025-11-25/changelog.mdx) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE)
9
9
 
10
- [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.2-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.2-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
package/biome.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/2.4.11/schema.json",
2
+ "$schema": "https://biomejs.dev/schemas/2.4.12/schema.json",
3
3
  "vcs": {
4
4
  "enabled": true,
5
5
  "clientKind": "git",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/mcp-ts-core",
3
- "version": "0.3.5",
3
+ "version": "0.3.6",
4
4
  "mcpName": "io.github.cyanheads/mcp-ts-core",
5
5
  "description": "Agent-native TypeScript framework for building MCP servers. Build tools, not infrastructure. Declarative definitions with auth, multi-backend storage, OpenTelemetry, and first-class support for Node.js and Cloudflare Workers.",
6
6
  "main": "dist/core/index.js",
@@ -143,34 +143,34 @@
143
143
  "resolutions": {
144
144
  "@hono/node-server": "1.19.14",
145
145
  "chrono-node": "2.9.0",
146
- "diff": "8.0.4",
146
+ "diff": "9.0.0",
147
147
  "dotenv": "17.4.2",
148
148
  "brace-expansion": "1.1.13",
149
149
  "flatted": "3.4.2",
150
150
  "handlebars": "4.7.9",
151
- "hono": "4.12.12",
151
+ "hono": "4.12.14",
152
152
  "lodash": "4.18.1",
153
153
  "path-to-regexp": "8.4.0",
154
154
  "picomatch": "2.3.2",
155
+ "protobufjs": "7.5.5",
155
156
  "yaml": "1.10.3",
156
157
  "zod": "4.3.6"
157
158
  },
158
159
  "devDependencies": {
159
- "@biomejs/biome": "2.4.11",
160
- "@cloudflare/workers-types": "^4.20260413.1",
160
+ "@biomejs/biome": "2.4.12",
161
+ "@cloudflare/workers-types": "^4.20260418.1",
161
162
  "@hono/otel": "^1.1.1",
162
- "@opentelemetry/instrumentation-http": "^0.214.0",
163
- "@opentelemetry/exporter-metrics-otlp-http": "^0.214.0",
164
- "@opentelemetry/exporter-trace-otlp-http": "^0.214.0",
165
- "@opentelemetry/instrumentation-pino": "^0.60.0",
166
- "@opentelemetry/resources": "^2.6.1",
167
- "@opentelemetry/sdk-metrics": "^2.6.1",
168
- "@opentelemetry/sdk-node": "^0.214.0",
169
- "@opentelemetry/sdk-trace-node": "^2.6.1",
163
+ "@opentelemetry/instrumentation-http": "^0.215.0",
164
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.215.0",
165
+ "@opentelemetry/exporter-trace-otlp-http": "^0.215.0",
166
+ "@opentelemetry/instrumentation-pino": "^0.61.0",
167
+ "@opentelemetry/resources": "^2.7.0",
168
+ "@opentelemetry/sdk-metrics": "^2.7.0",
169
+ "@opentelemetry/sdk-node": "^0.215.0",
170
+ "@opentelemetry/sdk-trace-node": "^2.7.0",
170
171
  "@opentelemetry/semantic-conventions": "^1.40.0",
171
- "@supabase/supabase-js": "^2.103.0",
172
+ "@supabase/supabase-js": "^2.103.3",
172
173
  "@types/bun": "^1.3.12",
173
- "@types/diff": "^8.0.0",
174
174
  "@types/js-yaml": "^4.0.9",
175
175
  "@types/node": "^25.6.0",
176
176
  "@types/papaparse": "^5.5.2",
@@ -183,22 +183,22 @@
183
183
  "clipboardy": "^5.3.1",
184
184
  "depcheck": "^1.4.7",
185
185
  "execa": "^9.6.1",
186
- "fast-check": "^4.6.0",
186
+ "fast-check": "^4.7.0",
187
187
  "js-yaml": "^4.1.1",
188
188
  "ignore": "^7.0.5",
189
- "msw": "^2.13.2",
189
+ "msw": "^2.13.4",
190
190
  "node-cron": "^4.2.1",
191
191
  "openai": "^6.34.0",
192
192
  "papaparse": "^5.5.3",
193
193
  "partial-json": "^0.1.7",
194
194
  "pdf-lib": "^1.17.1",
195
195
  "pino-pretty": "^13.1.3",
196
- "sanitize-html": "^2.17.2",
196
+ "sanitize-html": "^2.17.3",
197
197
  "repomix": "^1.13.1",
198
198
  "tsc-alias": "^1.8.16",
199
199
  "typedoc": "^0.28.19",
200
- "typescript": "^6.0.2",
201
- "unpdf": "^1.5.0",
200
+ "typescript": "^6.0.3",
201
+ "unpdf": "^1.6.0",
202
202
  "validator": "^13.15.35",
203
203
  "vite": "8.0.8",
204
204
  "vitest": "^4.1.4"
@@ -253,40 +253,40 @@
253
253
  },
254
254
  "dependencies": {
255
255
  "@hono/mcp": "^0.2.5",
256
- "@hono/node-server": "^1.19.13",
257
- "@modelcontextprotocol/ext-apps": "^1.5.0",
256
+ "@hono/node-server": "^1.19.14",
257
+ "@modelcontextprotocol/ext-apps": "^1.6.0",
258
258
  "@modelcontextprotocol/sdk": "^1.29.0",
259
259
  "@opentelemetry/api": "^1.9.1",
260
- "dotenv": "^17.4.1",
261
- "hono": "^4.12.12",
260
+ "dotenv": "^17.4.2",
261
+ "hono": "^4.12.14",
262
262
  "jose": "^6.2.2",
263
263
  "pino": "^10.3.1",
264
264
  "zod": "^4.3.6"
265
265
  },
266
266
  "peerDependencies": {
267
267
  "@hono/otel": "^1.1.1",
268
- "@opentelemetry/instrumentation-http": "^0.214.0",
269
- "@opentelemetry/exporter-metrics-otlp-http": "^0.214.0",
270
- "@opentelemetry/exporter-trace-otlp-http": "^0.214.0",
271
- "@opentelemetry/instrumentation-pino": "^0.60.0",
272
- "@opentelemetry/resources": "^2.6.0",
273
- "@opentelemetry/sdk-metrics": "^2.6.0",
274
- "@opentelemetry/sdk-node": "^0.214.0",
275
- "@opentelemetry/sdk-trace-node": "^2.6.0",
268
+ "@opentelemetry/instrumentation-http": "^0.215.0",
269
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.215.0",
270
+ "@opentelemetry/exporter-trace-otlp-http": "^0.215.0",
271
+ "@opentelemetry/instrumentation-pino": "^0.61.0",
272
+ "@opentelemetry/resources": "^2.7.0",
273
+ "@opentelemetry/sdk-metrics": "^2.7.0",
274
+ "@opentelemetry/sdk-node": "^0.215.0",
275
+ "@opentelemetry/sdk-trace-node": "^2.7.0",
276
276
  "@opentelemetry/semantic-conventions": "^1.40.0",
277
- "@supabase/supabase-js": "^2.99.3",
277
+ "@supabase/supabase-js": "^2.103.3",
278
278
  "chrono-node": "^2.9.0",
279
- "diff": "^8.0.4",
279
+ "diff": "^9.0.0",
280
280
  "fast-xml-parser": "latest",
281
- "js-yaml": "^4.1.0",
281
+ "js-yaml": "^4.1.1",
282
282
  "node-cron": "^4.2.1",
283
- "openai": "^6.32.0",
283
+ "openai": "^6.34.0",
284
284
  "papaparse": "^5.5.3",
285
285
  "partial-json": "^0.1.7",
286
286
  "pdf-lib": "^1.17.1",
287
- "sanitize-html": "^2.17.2",
288
- "unpdf": "^1.4.0",
289
- "validator": "^13.15.26"
287
+ "sanitize-html": "^2.17.3",
288
+ "unpdf": "^1.6.0",
289
+ "validator": "^13.15.35"
290
290
  },
291
291
  "peerDependenciesMeta": {
292
292
  "@hono/otel": {
@@ -4,7 +4,7 @@ description: >
4
4
  Scaffold a new MCP tool definition. Use when the user asks to add a tool, create a new tool, or implement a new capability for the server.
5
5
  metadata:
6
6
  author: cyanheads
7
- version: "1.3"
7
+ version: "1.4"
8
8
  audience: external
9
9
  type: reference
10
10
  ---
@@ -39,6 +39,8 @@ import { tool, z } from '@cyanheads/mcp-ts-core';
39
39
 
40
40
  export const {{TOOL_EXPORT}} = tool('{{tool_name}}', {
41
41
  title: '{{TOOL_TITLE}}',
42
+ // Single cohesive paragraph — pack operational guidance into prose sentences,
43
+ // not bullet lists or blank-line-separated sections. Descriptions render inline.
42
44
  description: '{{TOOL_DESCRIPTION}}',
43
45
  annotations: { readOnlyHint: true },
44
46
  input: z.object({
@@ -4,7 +4,7 @@ description: >
4
4
  Design the tool surface, resources, and service layer for a new MCP server. Use when starting a new server, planning a major feature expansion, or when the user describes a domain/API they want to expose via MCP. Produces a design doc at docs/design.md that drives implementation.
5
5
  metadata:
6
6
  author: cyanheads
7
- version: "2.2"
7
+ version: "2.3"
8
8
  audience: external
9
9
  type: workflow
10
10
  ---
@@ -140,6 +140,7 @@ The description is the LLM's primary signal for tool selection. It must answer:
140
140
 
141
141
  - **Be concrete about capability.** "Search for clinical trial studies using queries and filters" beats "Interact with studies."
142
142
  - **Include operational guidance when it matters.** If the tool has prerequisites, constraints, or gotchas the LLM needs to know, say so in the description. Don't add boilerplate workflow hints when the tool is self-explanatory.
143
+ - **Prefer a single cohesive paragraph.** Pack operational guidance into prose sentences (separated by periods or em-dashes) rather than bullet lists or blank-line-separated sections. Descriptions render inline in most clients, and bullet structure reads as visual noise rather than signal. Operation-by-operation bullets also duplicate info that already lives in the `operation` enum's `.describe()`.
143
144
  - **Don't leak implementation details.** Descriptions are for the consumer, not the author. Internal endpoint paths, API call counts, internal parameter name mappings, and routing logic don't belong — describe what the tool does and when to use it, not how it's wired up.
144
145
 
145
146
  ```ts