@cyanheads/mcp-ts-core 0.5.3 → 0.6.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/CLAUDE.md +41 -2
- package/README.md +1 -1
- package/changelog/0.1.x/0.1.0.md +78 -0
- package/changelog/0.1.x/0.1.1.md +28 -0
- package/changelog/0.1.x/0.1.10.md +32 -0
- package/changelog/0.1.x/0.1.11.md +51 -0
- package/changelog/0.1.x/0.1.12.md +21 -0
- package/changelog/0.1.x/0.1.13.md +16 -0
- package/changelog/0.1.x/0.1.14.md +20 -0
- package/changelog/0.1.x/0.1.15.md +24 -0
- package/changelog/0.1.x/0.1.16.md +17 -0
- package/changelog/0.1.x/0.1.17.md +14 -0
- package/changelog/0.1.x/0.1.18.md +18 -0
- package/changelog/0.1.x/0.1.19.md +19 -0
- package/changelog/0.1.x/0.1.2.md +25 -0
- package/changelog/0.1.x/0.1.20.md +21 -0
- package/changelog/0.1.x/0.1.21.md +17 -0
- package/changelog/0.1.x/0.1.22.md +28 -0
- package/changelog/0.1.x/0.1.23.md +23 -0
- package/changelog/0.1.x/0.1.24.md +17 -0
- package/changelog/0.1.x/0.1.25.md +16 -0
- package/changelog/0.1.x/0.1.26.md +22 -0
- package/changelog/0.1.x/0.1.27.md +30 -0
- package/changelog/0.1.x/0.1.28.md +16 -0
- package/changelog/0.1.x/0.1.29.md +19 -0
- package/changelog/0.1.x/0.1.3.md +22 -0
- package/changelog/0.1.x/0.1.4.md +17 -0
- package/changelog/0.1.x/0.1.5.md +25 -0
- package/changelog/0.1.x/0.1.6.md +26 -0
- package/changelog/0.1.x/0.1.7.md +29 -0
- package/changelog/0.1.x/0.1.8.md +33 -0
- package/changelog/0.1.x/0.1.9.md +19 -0
- package/changelog/0.2.x/0.2.0.md +32 -0
- package/changelog/0.2.x/0.2.1.md +12 -0
- package/changelog/0.2.x/0.2.10.md +38 -0
- package/changelog/0.2.x/0.2.11.md +29 -0
- package/changelog/0.2.x/0.2.12.md +31 -0
- package/changelog/0.2.x/0.2.2.md +19 -0
- package/changelog/0.2.x/0.2.3.md +15 -0
- package/changelog/0.2.x/0.2.4.md +24 -0
- package/changelog/0.2.x/0.2.5.md +27 -0
- package/changelog/0.2.x/0.2.6.md +23 -0
- package/changelog/0.2.x/0.2.7.md +23 -0
- package/changelog/0.2.x/0.2.8.md +12 -0
- package/changelog/0.2.x/0.2.9.md +25 -0
- package/changelog/0.3.x/0.3.0.md +45 -0
- package/changelog/0.3.x/0.3.1.md +16 -0
- package/changelog/0.3.x/0.3.2.md +24 -0
- package/changelog/0.3.x/0.3.3.md +31 -0
- package/changelog/0.3.x/0.3.4.md +31 -0
- package/changelog/0.3.x/0.3.5.md +32 -0
- package/changelog/0.3.x/0.3.6.md +48 -0
- package/changelog/0.3.x/0.3.7.md +23 -0
- package/changelog/0.3.x/0.3.8.md +21 -0
- package/changelog/0.4.x/0.4.0.md +38 -0
- package/changelog/0.4.x/0.4.1.md +31 -0
- package/changelog/0.5.x/0.5.0.md +29 -0
- package/changelog/0.5.x/0.5.1.md +18 -0
- package/changelog/0.5.x/0.5.2.md +38 -0
- package/changelog/0.5.x/0.5.3.md +26 -0
- package/changelog/0.5.x/0.5.4.md +29 -0
- package/changelog/0.6.x/0.6.0.md +39 -0
- package/changelog/unreleased.md +40 -0
- package/dist/cli/init.js +1 -0
- package/dist/cli/init.js.map +1 -1
- package/dist/core/app.d.ts +13 -3
- package/dist/core/app.d.ts.map +1 -1
- package/dist/core/app.js +20 -13
- package/dist/core/app.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/serverManifest.d.ts +237 -0
- package/dist/core/serverManifest.d.ts.map +1 -0
- package/dist/core/serverManifest.js +310 -0
- package/dist/core/serverManifest.js.map +1 -0
- package/dist/core/worker.d.ts.map +1 -1
- package/dist/core/worker.js +2 -2
- package/dist/core/worker.js.map +1 -1
- package/dist/linter/rules/landing-rules.d.ts +15 -0
- package/dist/linter/rules/landing-rules.d.ts.map +1 -0
- package/dist/linter/rules/landing-rules.js +125 -0
- package/dist/linter/rules/landing-rules.js.map +1 -0
- package/dist/linter/types.d.ts +5 -2
- package/dist/linter/types.d.ts.map +1 -1
- package/dist/linter/validate.d.ts.map +1 -1
- package/dist/linter/validate.js +26 -2
- package/dist/linter/validate.js.map +1 -1
- package/dist/mcp-server/transports/http/httpTransport.d.ts +4 -3
- package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/httpTransport.js +47 -26
- package/dist/mcp-server/transports/http/httpTransport.js.map +1 -1
- package/dist/mcp-server/transports/http/httpTypes.d.ts +0 -12
- package/dist/mcp-server/transports/http/httpTypes.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/landing-page.d.ts +48 -0
- package/dist/mcp-server/transports/http/landing-page.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/landing-page.js +912 -0
- package/dist/mcp-server/transports/http/landing-page.js.map +1 -0
- package/dist/mcp-server/transports/http/serverCard.d.ts +67 -0
- package/dist/mcp-server/transports/http/serverCard.d.ts.map +1 -0
- package/dist/mcp-server/transports/http/serverCard.js +91 -0
- package/dist/mcp-server/transports/http/serverCard.js.map +1 -0
- package/dist/mcp-server/transports/manager.d.ts +3 -3
- package/dist/mcp-server/transports/manager.d.ts.map +1 -1
- package/dist/mcp-server/transports/manager.js +4 -4
- package/dist/mcp-server/transports/manager.js.map +1 -1
- package/dist/utils/formatting/html.d.ts +76 -0
- package/dist/utils/formatting/html.d.ts.map +1 -0
- package/dist/utils/formatting/html.js +111 -0
- package/dist/utils/formatting/html.js.map +1 -0
- package/dist/utils/formatting/index.d.ts +1 -0
- package/dist/utils/formatting/index.d.ts.map +1 -1
- package/dist/utils/formatting/index.js +1 -0
- package/dist/utils/formatting/index.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +5 -1
- package/scripts/build-changelog.ts +222 -0
- package/scripts/devcheck.ts +19 -4
- package/scripts/tree.ts +3 -0
- package/skills/add-app-tool/SKILL.md +2 -4
- package/skills/add-prompt/SKILL.md +2 -4
- package/skills/add-resource/SKILL.md +2 -4
- package/skills/add-service/SKILL.md +2 -4
- package/skills/add-tool/SKILL.md +6 -5
- package/skills/api-context/SKILL.md +2 -2
- package/skills/api-linter/SKILL.md +391 -0
- package/skills/api-services/SKILL.md +1 -1
- package/skills/api-services/references/graph.md +1 -1
- package/skills/api-utils/SKILL.md +1 -1
- package/skills/api-utils/references/parsing.md +1 -1
- package/skills/api-utils/references/security.md +1 -1
- package/skills/design-mcp-server/SKILL.md +2 -2
- package/skills/maintenance/SKILL.md +12 -11
- package/skills/polish-docs-meta/SKILL.md +24 -9
- package/skills/release/SKILL.md +21 -7
- package/skills/setup/SKILL.md +4 -8
- package/templates/AGENTS.md +23 -1
- package/templates/CLAUDE.md +23 -1
- package/templates/changelog/unreleased.md +40 -0
- package/templates/package.json +3 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Resource notification support — ctx.notifyResourceUpdated and ctx.notifyResourceListChanged for dynamic resource subscriptions, mock context support, dependency updates
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.26 — 2026-03-23
|
|
7
|
+
|
|
8
|
+
Resource notification support and dependency updates.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **Resource notifications on Context** — `ctx.notifyResourceUpdated(uri)` and `ctx.notifyResourceListChanged()` let tool and resource handlers notify subscribed clients when dynamic resources change. Optional (like `elicit`/`sample`), presence-checked before use. Threaded through `ContextDeps`, handler factories, and both tool/resource registries.
|
|
13
|
+
- **`createMockContext` notification support** — `MockContextOptions` accepts `notifyResourceUpdated` and `notifyResourceListChanged` for testing handlers that fire resource notifications.
|
|
14
|
+
- **Resource notifications design doc** — `docs/resource-notifications.md` documents the gap, SDK surface, API design, and alternatives considered.
|
|
15
|
+
|
|
16
|
+
## Changed
|
|
17
|
+
|
|
18
|
+
- **`diff`** — 8.0.3 → 8.0.4
|
|
19
|
+
- **`hono`** — 4.12.8 → 4.12.9
|
|
20
|
+
- **`@supabase/supabase-js`** — ^2.99.3 → ^2.100.0
|
|
21
|
+
- **`typedoc`** — ^0.28.17 → ^0.28.18
|
|
22
|
+
- **`vite`** — 8.0.1 → 8.0.2
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Expanded OTel metrics instrumentation — tool/resource I/O histograms, HTTP client duration, eager metric initialization, comprehensive metrics test suite
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.27 — 2026-03-23
|
|
7
|
+
|
|
8
|
+
Expanded OTel metrics instrumentation, eager metric initialization, and app lifecycle improvements.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **Tool I/O byte histograms** — `mcp.tool.input_bytes` and `mcp.tool.output_bytes` histograms record payload sizes per tool invocation.
|
|
13
|
+
- **Tool parameter usage counter** — `mcp.tool.param.usage` tracks which parameters are supplied per tool call (top-level keys).
|
|
14
|
+
- **Resource output bytes histogram** — `mcp.resource.output_bytes` records payload size for successful resource reads.
|
|
15
|
+
- **HTTP client duration histogram** — `http.client.request.duration` (seconds) in `fetchWithTimeout`, with `http.request.method`, `server.address`, and `http.response.status_code` attributes.
|
|
16
|
+
- **Rate limit rejection counter** — `mcp.ratelimit.rejections` with `mcp.rate_limit.key` attribute fires on every rate-limited request.
|
|
17
|
+
- **Error classification counter** — `mcp.errors.classified` exposed via `initErrorMetrics()` for eager initialization.
|
|
18
|
+
- **Event loop utilization gauge** — `process.event_loop.utilization` (0–1 ratio) complements the existing p99 delay gauge.
|
|
19
|
+
- **Eager metric initialization** — `initSessionMetrics()`, `initErrorMetrics()`, `initRateLimitMetrics()`, `initHttpClientMetrics()`, `initHandlerMetrics()` called at startup so all metric series exist from the first export cycle.
|
|
20
|
+
- **Comprehensive metrics test suite** — 10 new test files covering OTel metric recording for tools, resources, tasks, sessions, auth, storage, graph, LLM, speech, error handler, HTTP client, and rate limiter subsystems.
|
|
21
|
+
|
|
22
|
+
## Changed
|
|
23
|
+
|
|
24
|
+
- **Lint warnings use logger** — `composeServices()` collects lint warnings and defers logging until after logger initialization. No more `console.warn` at startup.
|
|
25
|
+
- **Session gauge unconditional** — `mcp.sessions.active` observable gauge registered regardless of transport type (reports 0 for stdio/stateless).
|
|
26
|
+
- **Shutdown cleanup** — Extracted `flushTelemetryAndLogger()` helper, added `taskManager.cleanup()`, fatal error handlers now create proper request contexts.
|
|
27
|
+
- **`repomix`** — ^1.12.0 → ^1.13.0 (dev)
|
|
28
|
+
- **`vitest`** — ^4.1.0 → ^4.1.1 (dev)
|
|
29
|
+
- **`hono`** — ^4.12.8 → ^4.12.9
|
|
30
|
+
- **`diff`** — ^8.0.3 → ^8.0.4
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: TypeScript 6 migration — upgraded from 5.9 to 6.0, removed baseUrl from tsconfigs, switched path mappings to relative syntax, cleaned up duplicate typescript dependency
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.28 — 2026-03-23
|
|
7
|
+
|
|
8
|
+
TypeScript 6 migration and dependency updates.
|
|
9
|
+
|
|
10
|
+
## Changed
|
|
11
|
+
|
|
12
|
+
- **TypeScript 6** — upgraded from `^5.9.3` to `^6.0.2`; removed `baseUrl` from tsconfigs, switched path mappings to relative `./src/*` syntax.
|
|
13
|
+
- **Removed duplicate `typescript`** from `dependencies` (remains in `devDependencies`).
|
|
14
|
+
- **`@vitest/coverage-istanbul`** — 4.1.0 → 4.1.1 (dev)
|
|
15
|
+
- **`@vitest/ui`** — 4.1.0 → 4.1.1 (dev)
|
|
16
|
+
- **`fast-xml-parser`** — ^5.5.8 → ^5.5.9 (peer)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Linter fix for idempotentHint false positive, skill doc improvements for design and polish-docs-meta, dependency updates
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.29 — 2026-03-24
|
|
7
|
+
|
|
8
|
+
Linter fix, skill doc improvements, and dependency updates.
|
|
9
|
+
|
|
10
|
+
## Fixed
|
|
11
|
+
|
|
12
|
+
- **Linter annotation-coherence** — removed `idempotentHint` redundancy warning for `readOnlyHint: true` tools. Explicit `idempotentHint` is valid and correct, not redundant.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **`design-mcp-server` skill** — added tool audit step, convenience shortcuts pattern, expanded naming convention (`{domain}_{verb}_{noun}`), optional design doc sections.
|
|
17
|
+
- **`polish-docs-meta` skill** — added GitHub repo metadata sync step, description-as-canonical-source guidance, Dockerfile OCI label alignment.
|
|
18
|
+
- **`@modelcontextprotocol/ext-apps`** — ^1.2.2 → ^1.3.1
|
|
19
|
+
- **`fast-xml-parser`** — ^5.5.9 → latest (peer dep)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Housekeeping release — regex fix for skill audience extraction, version alignment, removal of obsolete planning docs and schemas
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.3 — 2026-03-14
|
|
7
|
+
|
|
8
|
+
Housekeeping release: regex fix for skill audience extraction, version alignment across manifests, and removal of obsolete planning docs and schemas.
|
|
9
|
+
|
|
10
|
+
## Fixed
|
|
11
|
+
|
|
12
|
+
- `extractAudience` regex in `init` CLI now handles sibling keys before `audience:` under `metadata:` in skill frontmatter.
|
|
13
|
+
|
|
14
|
+
## Removed
|
|
15
|
+
|
|
16
|
+
- `core-extraction/` planning docs (14 files) — extraction complete, no longer needed.
|
|
17
|
+
- `docs/mcp-apps.md`, `docs/mcp-elicitation-summary.md`, `docs/publishing-mcp-server-registry.md` — superseded by CLAUDE.md and skill files.
|
|
18
|
+
- `schemas/cloudflare-d1-schema.sql` — D1 schema now managed by the framework internally.
|
|
19
|
+
|
|
20
|
+
## Changed
|
|
21
|
+
|
|
22
|
+
- `server.json` version aligned to 0.1.3 (was 0.1.1).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Rebrand from mcp-ts-template to mcp-ts-core — Dockerfile labels, package metadata, repository URLs, and smithery command updated throughout
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.4 — 2026-03-14
|
|
7
|
+
|
|
8
|
+
Rebranding and version bump: repository URLs, Docker labels, and package metadata updated from `mcp-ts-template` to `mcp-ts-core`.
|
|
9
|
+
|
|
10
|
+
## Changed
|
|
11
|
+
|
|
12
|
+
- Dockerfile labels and log paths renamed from `mcp-ts-template` to `mcp-ts-core`.
|
|
13
|
+
- `package.json` repository, bugs, and homepage URLs updated to `mcp-ts-core`.
|
|
14
|
+
- `server.json` repository URL updated to `mcp-ts-core`.
|
|
15
|
+
- `smithery.yaml` bunx command updated to `@cyanheads/mcp-ts-core`.
|
|
16
|
+
- `docs/tree.md` regenerated to reflect current directory structure (removed obsolete planning docs and schemas).
|
|
17
|
+
- Version bumped to 0.1.4 across `package.json`, `server.json`, and `README.md`.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Security hardening and task tool auth fixes — scope enumeration prevention, ALS context capture for background handlers, structuredContent gating, HTTP session header correction
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.5 — 2026-03-14
|
|
7
|
+
|
|
8
|
+
Security hardening, task tool auth fixes, and transport correctness improvements.
|
|
9
|
+
|
|
10
|
+
## Fixed
|
|
11
|
+
|
|
12
|
+
- **Task tool auth context** — Auth info is now captured from the request's AsyncLocalStorage before the background handler fires. Previously, ALS was gone in the detached context, causing auth scopes and tenant identity to be lost. Scope checks now run in `createTask` (inside ALS) instead of the background handler.
|
|
13
|
+
- **`withAuthInfo` operation inheritance** — `requestContextService.withAuthInfo()` now inherits the `operation` name from the parent context instead of hardcoding `'withAuthInfo'`, preserving operation traceability for task handlers.
|
|
14
|
+
- **`structuredContent` conditional** — Tool responses only include `structuredContent` when the tool definition has an `output` schema. Prevents sending untyped data as structured content.
|
|
15
|
+
- **HTTP session header for `auto` mode** — Session header now uses the resolved `isStateful` flag instead of comparing `config.mcpSessionMode === 'stateful'`, fixing stateful session headers when mode is `'auto'`.
|
|
16
|
+
- **Config cache reset after `composeServices()`** — `resetConfig()` is now called after restoring env vars, preventing stale cached config from leaking into subsequent calls in the same process.
|
|
17
|
+
|
|
18
|
+
## Security
|
|
19
|
+
|
|
20
|
+
- **Scope enumeration prevention** — Auth error responses no longer include scope names, required scopes, or missing scopes in client-facing error data. Full details remain in server-side logs. Applies to both `withRequiredScopes` and `checkScopes`.
|
|
21
|
+
|
|
22
|
+
## Changed
|
|
23
|
+
|
|
24
|
+
- Bumped `js-yaml` optional peer dependency from `^3.14.2` to `^4.0.0`.
|
|
25
|
+
- Setup skill: added "update dependencies to latest" as first post-install step.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Task manager lifecycle fix, error metadata on responses, resource output validation, HTTP tenant isolation hardening, config override timing
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.6 — 2026-03-16
|
|
7
|
+
|
|
8
|
+
Task lifecycle improvements, error metadata for programmatic clients, resource output validation, and tenant isolation hardening.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **Error metadata on tool responses** — Error responses now include `_meta.error` with the JSON-RPC error code and, for explicitly thrown `McpError` instances, the `data` payload. Programmatic clients can distinguish error types (auth, validation, not-found, etc.) without parsing the text message.
|
|
13
|
+
- **Resource output validation** — Resource handler factory validates handler output against the `output` schema when defined, matching tool handler behavior.
|
|
14
|
+
|
|
15
|
+
## Fixed
|
|
16
|
+
|
|
17
|
+
- **Task manager lifecycle** — `TaskManager` is now created inside `composeServices()` and its `taskStore`/`taskMessageQueue` are passed directly to the `McpServer` constructor. Previously, the task manager was created after service composition in `createApp()`, which meant the SDK server had no task support wired in.
|
|
18
|
+
- **Config override timing** — `name`/`version` overrides from `createApp()` options are now applied before OTEL initialization, so the telemetry service name reflects the actual server identity.
|
|
19
|
+
- **Context TTL edge case** — `ctx.state.set()` and `ctx.state.setMany()` now use `opts?.ttl !== undefined` instead of a truthy check, allowing `ttl: 0` to be passed through correctly.
|
|
20
|
+
- **HTTP tenant isolation** — HTTP transport without auth now leaves `tenantId` unset instead of defaulting to `'default'`. `ctx.state` operations fail-closed via `requireContext()`, preventing unauthenticated callers from sharing a single tenant namespace. Stdio continues to default to `'default'`.
|
|
21
|
+
|
|
22
|
+
## Changed
|
|
23
|
+
|
|
24
|
+
- Reverted `js-yaml` optional peer dependency from `^4.0.0` back to `^3.14.2`.
|
|
25
|
+
- Updated dev dependencies: `@cloudflare/workers-types`, `@supabase/supabase-js`, `msw`, `openai`.
|
|
26
|
+
- Improved HTTP transport port-detection test with proper `try/finally` cleanup.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Telemetry slim-down — focused MCP attribute keys replace semconv, lighter OTel instrumentation, removed per-call memory profiling and unused metric exports
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.7 — 2026-03-17
|
|
7
|
+
|
|
8
|
+
Telemetry refactor: slimmed OTel instrumentation, replaced bloated semconv module with focused MCP attribute keys, removed per-call memory profiling.
|
|
9
|
+
|
|
10
|
+
## Changed
|
|
11
|
+
|
|
12
|
+
- **`semconv.ts` → `attributes.ts`** — Replaced the 377-line `semconv.ts` (which re-exported standard OTel constants) with a focused `attributes.ts` containing only MCP-specific and actively-used attribute keys. Standard OTel conventions (HTTP, cloud, service, network, etc.) should now be imported directly from `@opentelemetry/semantic-conventions`.
|
|
13
|
+
- **`ATTR_CODE_FUNCTION` → `ATTR_CODE_FUNCTION_NAME`** — Renamed to align with upstream OTel semantic conventions deprecation of `code.function` in favor of `code.function.name`.
|
|
14
|
+
- **Targeted HTTP instrumentation** — Replaced `@opentelemetry/auto-instrumentations-node` (heavy, pulls many transitive deps) with `@opentelemetry/instrumentation-http` for a lighter footprint. Pino instrumentation remains unchanged.
|
|
15
|
+
- **Prompt measurement simplified** — `measurePromptGeneration` now emits a structured log only (no OTel span or metric instruments). Prompts are pure synchronous template functions; full spans were unnecessary overhead.
|
|
16
|
+
- **Removed per-call memory profiling** — `measureToolExecution` no longer captures RSS/heap before/after/delta on every tool call. Reduces per-call overhead; use external process monitoring for memory tracking.
|
|
17
|
+
- **Trimmed metrics API** — Removed `createObservableCounter` and `createObservableUpDownCounter` from public exports. Use `getMeter()` directly for these instrument types.
|
|
18
|
+
- **`TextEncoder` caching** — `toBytes()` in performance module now reuses a singleton `TextEncoder` instead of allocating one per call.
|
|
19
|
+
- **OTel shutdown timer leak fix** — `shutdownOpenTelemetry` now clears the timeout timer on successful shutdown.
|
|
20
|
+
- Updated `msw` dev dependency from 2.12.11 to 2.12.12.
|
|
21
|
+
- Updated `skills/api-utils/SKILL.md` to reflect new telemetry module names and trimmed metrics API.
|
|
22
|
+
|
|
23
|
+
## Removed
|
|
24
|
+
|
|
25
|
+
- `src/utils/telemetry/semconv.ts` — Replaced by `attributes.ts`.
|
|
26
|
+
- `tests/utils/telemetry/semconv.test.ts` — Replaced by `attributes.test.ts`.
|
|
27
|
+
- Memory tracking span attributes (`ATTR_MCP_TOOL_MEMORY_RSS_*`, `ATTR_MCP_TOOL_MEMORY_HEAP_USED_*`).
|
|
28
|
+
- Unused standard OTel attribute re-exports (`ATTR_SERVICE_*`, `ATTR_HTTP_*`, `ATTR_CLOUD_*`, `ATTR_URL_*`, `ATTR_NETWORK_*`, `ATTR_ERROR_TYPE`, `ATTR_EXCEPTION_*`, `ATTR_USER_AGENT_ORIGINAL`, etc.).
|
|
29
|
+
- Unused MCP attributes (`ATTR_MCP_REQUEST_ID`, `ATTR_MCP_OPERATION_NAME`, `ATTR_MCP_SESSION_ID`, `ATTR_MCP_TASK_ID`, `ATTR_MCP_PROMPT_*`).
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Tool output validation, HTTP graceful shutdown hardening, add-test and polish-docs-meta skills, design-mcp-server v2 rewrite
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.8 — 2026-03-20
|
|
7
|
+
|
|
8
|
+
Output validation for tools, HTTP transport hardening, new skills, and template improvements.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **`add-test` skill** — Scaffolds colocated test files for tools, resources, and services with `createMockContext` patterns.
|
|
13
|
+
- **`polish-docs-meta` skill** — Finalizes docs, README, metadata, and agent protocol for ship-ready servers. Includes reference guides for README conventions, agent protocol updates, package.json metadata, and server.json manifests.
|
|
14
|
+
- **`design-mcp-server` v2.0** — Major rewrite of tool design guidance: consolidation via operation/mode enums, description and parameter writing principles, output design for LLM chaining, error messages as recovery guidance.
|
|
15
|
+
- **`release` skill v1.1** — Expanded with README review step, template version sync, skill version bumping, annotated git tags, and structured checklist.
|
|
16
|
+
|
|
17
|
+
## Fixed
|
|
18
|
+
|
|
19
|
+
- **Tool output validation** — Standard and task tool handlers now validate output against the `output` schema (via `.parse()`) before formatting. Previously, unvalidated handler output was passed directly to `format` and `structuredContent`.
|
|
20
|
+
- **HTTP graceful shutdown** — Added 5-second drain timeout with `server.closeAllConnections()` fallback for pre-existing connections (e.g., SSE streams) that `server.close()` alone doesn't terminate.
|
|
21
|
+
|
|
22
|
+
## Changed
|
|
23
|
+
|
|
24
|
+
- **`composeServices()` ordering** — Now runs before env override application in `createApp()`, with overrides re-applied for process lifetime after composition. Fixes edge case where OTEL/logger could see stale identity.
|
|
25
|
+
- **`SamplingOpts.modelPreferences`** — Typed as SDK `ModelPreferences` instead of `Record<string, unknown>`.
|
|
26
|
+
- **Session identity binding** — Per-field gating ensures `tenantId`, `clientId`, and `subject` get bound independently across separate requests, instead of all-or-nothing on first authenticated request.
|
|
27
|
+
- **HTTP transport** — Extracted `extractSessionIdentity()` helper to deduplicate identity extraction across DELETE and POST handlers.
|
|
28
|
+
- **`rateLimiter.dispose()`** — Called during graceful shutdown to clean up interval timers.
|
|
29
|
+
- **Storage validation** — Removed redundant path traversal check (already covered by the regex pattern) and redundant `isFinite` check on list limit (already a `number` type).
|
|
30
|
+
- **`polish` skill renamed to `polish-docs-meta`** — More descriptive name. Updated all references in CLAUDE.md, templates, and changelog. Refined reference doc wording.
|
|
31
|
+
- **VSCode workspace config** — Added Biome as default formatter, markdownlint for markdown files, TypeScript SDK path, format-on-save. Added extension recommendations for Biome and markdownlint.
|
|
32
|
+
- **Templates** — Expanded `.env.example` with HTTP endpoint path, Cloudflare storage options, and OTEL vars. Added common gitignore patterns. Added `bin` field to `package.json`. Added `format` function to echo tool. Fixed template version from 0.1.2 to 0.1.0. Added `add-test` and `polish-docs-meta` skills to agent protocol.
|
|
33
|
+
- Updated dependencies: `@biomejs/biome` 2.4.7→2.4.8, `@supabase/supabase-js` ^2.99.2→^2.99.3, `@types/bun` ^1.3.10→^1.3.11, `bun-types` ^1.3.10→^1.3.11, `msw` ^2.12.12→^2.12.13, `openai` ^6.31.0→^6.32.0, `sanitize-html` ^2.17.1→^2.17.2, `vite` 8.0.0→8.0.1, `jose` ^6.2.1→^6.2.2.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Markdown linting and formatting compliance — markdownlint config, 14 skill/doc fixes, labeled code blocks, biome schema bump
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.9 — 2026-03-20
|
|
7
|
+
|
|
8
|
+
Markdown linting, formatting fixes, and biome schema alignment.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **`.markdownlint.jsonc`** — Markdownlint config suppressing false positives for changelog headings, inline HTML, first-line h1, and dense reference tables.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- Fixed markdown formatting across 14 skill files, templates, and docs for markdownlint compliance: added blank lines around fenced code blocks, escaped pipe characters in tables, labeled unlabeled code blocks with `text` language tag.
|
|
17
|
+
- Updated `scripts/tree.ts` to emit labeled code blocks (` ```text ` instead of bare ` ``` `).
|
|
18
|
+
- Regenerated `docs/tree.md` with current structure (adds `Dockerfile` template and `.markdownlint.jsonc`).
|
|
19
|
+
- Bumped `biome.json` schema URL to 2.4.8 (aligns with devDep already at 2.4.8).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Fuzz testing framework with schema-aware property-based testing, retry utility with exponential backoff, GitHub issue templates, and issue reporting skills
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.0 — 2026-03-24
|
|
7
|
+
|
|
8
|
+
Fuzz testing framework, retry utility, GitHub issue templates, and issue reporting skills.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **Fuzz testing module** — `fuzzTool`, `fuzzResource`, `fuzzPrompt` from `@cyanheads/mcp-ts-core/testing/fuzz`. Schema-aware property-based testing via `fast-check`: generates valid inputs from Zod schemas and adversarial payloads (prototype pollution, injection strings, type confusion), then asserts handler invariants (no crashes, no stack trace leaks, no prototype pollution). Returns `FuzzReport` for custom assertions.
|
|
13
|
+
- **`zodToArbitrary`** — Converts Zod schemas to `fast-check` arbitraries for custom property-based tests.
|
|
14
|
+
- **`ADVERSARIAL_STRINGS`** — Curated set of injection, encoding, and parsing attack strings for targeted testing.
|
|
15
|
+
- **`./testing/fuzz` subpath export** — New package export for the fuzz testing module.
|
|
16
|
+
- **Retry utility** — `withRetry` from `@cyanheads/mcp-ts-core/utils`. Exponential backoff with jitter, transient error classification (`ServiceUnavailable`, `Timeout`, `RateLimited`), abort signal support, and exhaustion enrichment (attempt count in error message and data).
|
|
17
|
+
- **GitHub issue templates** — Structured YAML form templates for bug reports and feature requests in `.github/ISSUE_TEMPLATE/`. Includes version/runtime/transport dropdowns and redaction guidance. Scaffolded to consumer projects via `init`.
|
|
18
|
+
- **Issue reporting skills** — `report-issue-framework` (file bugs against `@cyanheads/mcp-ts-core`) and `report-issue-local` (file bugs against the consumer server). Both include triage guidance, `gh` CLI examples, redaction checklist, and title/label conventions.
|
|
19
|
+
- **Fuzz test suite** — Three test files (`tests/fuzz/`) covering definition fuzzing, error handler fuzzing, and tool handler pipeline fuzzing (~850 lines).
|
|
20
|
+
- **Service resilience documentation** — `add-service` skill gains a "Resilience" section with retry-wraps-full-pipeline pattern, backoff calibration, and parse failure classification. `design-mcp-server` skill gains a resilience planning table.
|
|
21
|
+
|
|
22
|
+
## Changed
|
|
23
|
+
|
|
24
|
+
- **Biome config** — `noExplicitAny: off` for `src/testing/**` (fuzz module requires `any` for Zod introspection).
|
|
25
|
+
- **Vitest config** — Added `tests/fuzz/**/*.test.ts` to include patterns.
|
|
26
|
+
- **`setup` skill** — Documents `.github/ISSUE_TEMPLATE/` in scaffolding output.
|
|
27
|
+
- **Template `CLAUDE.md`** — Added `report-issue-framework` and `report-issue-local` to skills table.
|
|
28
|
+
- **`.gitignore`** — Added `announcements/` and `agent-feedback/` directories.
|
|
29
|
+
|
|
30
|
+
## Fixed
|
|
31
|
+
|
|
32
|
+
- **`jsonParser.test.ts`** — Replaced fragile `rejects.toThrow(new McpError(...))` assertion with try/catch checking error code and message substring. Fixes intermittent test failures from McpError equality semantics.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Docker build fix for optional peer deps — local FxpModule interface replaces static type reference, unblocks multi-platform builds
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.1 — 2026-03-25
|
|
7
|
+
|
|
8
|
+
Docker build fix for optional peer dependencies.
|
|
9
|
+
|
|
10
|
+
## Fixed
|
|
11
|
+
|
|
12
|
+
- **`xmlParser` Docker build** — Replaced static `typeof import('fast-xml-parser')` type reference with a local `FxpModule` interface. TypeScript no longer requires the optional peer dep's type declarations at compile time, fixing Docker multi-platform builds where `fast-xml-parser` isn't installed in the build stage.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Task session isolation fixes, devcheck audit resilience, and broad test coverage across app lifecycle, CLI scaffold, task registration, auth, and HTTP authz
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.10 — 2026-03-30
|
|
7
|
+
|
|
8
|
+
Task ownership, devcheck resilience, and internal cleanup.
|
|
9
|
+
|
|
10
|
+
## Fixed
|
|
11
|
+
|
|
12
|
+
- **Task session ownership persistence** — `SessionAwareTaskStore` no longer deletes ownership tracking when a task reaches a terminal state (`completed`/`failed`). Previously, completed tasks became visible to other sessions, violating session isolation. Ownership now persists through the full task lifecycle.
|
|
13
|
+
- **Task list visibility for sessionless callers** — Sessionless `listTasks` calls now correctly return only unowned tasks, consistent with `StorageBackedTaskStore` behavior. Previously returned all tasks regardless of ownership.
|
|
14
|
+
|
|
15
|
+
## Changed
|
|
16
|
+
|
|
17
|
+
- **Devcheck audit resilience** — Security audit check now detects connection/registry failures and emits a warning instead of silently passing when the output doesn't resemble a valid audit response.
|
|
18
|
+
- **Internal object construction** — Replaced spread-with-conditionals patterns in `ctx.state.list()` and `SessionAwareTaskStore.listTasks()` with explicit object construction for clarity.
|
|
19
|
+
|
|
20
|
+
## Tests
|
|
21
|
+
|
|
22
|
+
- Updated `SessionAwareTaskStore` tests to assert ownership retention through terminal states and correct sessionless visibility filtering.
|
|
23
|
+
- **`core/app`** — Composition root lifecycle: service composition, name/version overrides, Supabase storage init, signal handler registration, graceful shutdown, OTel init failure resilience, lint warning logging, process gauge callbacks, fatal handler backstops.
|
|
24
|
+
- **`cli/init`** — Scaffold command: `--help` output, unknown subcommand rejection, invalid project name validation, named project scaffolding with templates/scripts/skills, current-directory init with skip-existing behavior.
|
|
25
|
+
- **`tool-registration.lifecycle`** — Task and auto-task registration: resource notification binding, `_meta` forwarding, duplicate name rejection across regular/task tools, missing services guard, experimental task API registration, auth scope enforcement, default/custom formatters, completed/failed result storage, cancellation detection, TTL timeout, task-store polling failure handling.
|
|
26
|
+
- **`heartbeat`** — Monitor start/stop, disabled no-op, failure counting with metric emission, recovery logging and counter reset, dead connection declaration after threshold, early-stop guard.
|
|
27
|
+
- **`jwtStrategy.mocked`** — Non-Error verification failure normalization via mocked `jose`.
|
|
28
|
+
- **`http-authz.e2e`** — End-to-end scoped tool authorization against a fixture server: scoped callers invoke both public and protected tools, missing scope returns MCP authz error.
|
|
29
|
+
- **`prompt-registration`** — Duplicate prompt name rejection, generation failure wrapping as `McpError`.
|
|
30
|
+
- **`authMiddleware.metrics`** — Active span identity attribute recording with tenant/subject fallbacks.
|
|
31
|
+
- **`authUtils`** — Parent request context passthrough for scope checking.
|
|
32
|
+
- **`jwtStrategy`** — Issuer and audience verification when configured, wrong audience rejection.
|
|
33
|
+
- **`oauthStrategy`** — Error and non-Error JWKS init failure wrapping, `aud` claim fallback for resource validation, non-Error verification failure normalization.
|
|
34
|
+
|
|
35
|
+
## Infrastructure
|
|
36
|
+
|
|
37
|
+
- **`tests/fixtures/auth-scoped-server.js`** — Minimal HTTP fixture server with one public and one scoped tool for authz e2e tests.
|
|
38
|
+
- **`tests/helpers/server-process.ts`** — `resolveEntrypoint()`, `assertServerEntrypoint()`, and `startServerFromEntrypoint()` for custom fixture server spawning.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: SEP-2133 extensions support, resource size metadata, HTTP protocol error handling, startup log consolidation
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.11 — 2026-04-01
|
|
7
|
+
|
|
8
|
+
SEP-2133 extensions support, resource size metadata, HTTP protocol error handling, and startup log noise reduction.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **SEP-2133 extensions** — `createApp()` and `createWorkerHandler()` accept an `extensions` option (`Record<string, object>`) to advertise SEP-2133 extensions in server capabilities.
|
|
13
|
+
- **Resource `size` field** — `ResourceDefinition` now accepts an optional `size` (bytes) passed through to the SDK's resource metadata.
|
|
14
|
+
|
|
15
|
+
## Fixed
|
|
16
|
+
|
|
17
|
+
- **HTTP protocol error handling** — `httpErrorHandler` now detects `HTTPException` from `@hono/mcp` and honors its pre-built response instead of wrapping it in a generic JSON-RPC error. Active OTel span is annotated with the error detail.
|
|
18
|
+
|
|
19
|
+
## Changed
|
|
20
|
+
|
|
21
|
+
- **Startup log consolidation** — Replaced multiple info/notice registration logs with a single summary line listing registered tool/resource/prompt names. Individual registration messages downgraded from info/notice to debug across tool, resource, prompt, and roots registries.
|
|
22
|
+
- **Rate limit flush log level** — Suppressed-message flush downgraded from warning to debug.
|
|
23
|
+
|
|
24
|
+
## Dependencies
|
|
25
|
+
|
|
26
|
+
- `@biomejs/biome` 2.4.9 → 2.4.10
|
|
27
|
+
- `@cloudflare/workers-types` ^4.20260329.1 → ^4.20260401.1
|
|
28
|
+
- `@modelcontextprotocol/sdk` ^1.28.0 → ^1.29.0
|
|
29
|
+
- `@supabase/supabase-js` ^2.100.1 → ^2.101.1
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: OTel metricReaders deprecation fix, form-client safety guidance for empty-string optional fields, dependency updates
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.12 — 2026-04-03
|
|
7
|
+
|
|
8
|
+
OTel deprecation fix, form-client safety guidance, and dependency updates.
|
|
9
|
+
|
|
10
|
+
## Fixed
|
|
11
|
+
|
|
12
|
+
- **OTel `metricReader` deprecation** — `NodeSDK` constructor now uses the plural `metricReaders` array option, silencing the deprecation warning introduced in `@opentelemetry/sdk-node@^0.214.0`. Closes #21.
|
|
13
|
+
|
|
14
|
+
## Added
|
|
15
|
+
|
|
16
|
+
- **Form-client safety guidance** — Documented the pattern where form-based MCP clients (MCP Inspector, web UIs) send optional object fields with empty-string inner values instead of `undefined`. Added handler guard patterns, test examples, and checklist items to the agent protocol (`CLAUDE.md`), `add-tool` skill, `api-testing` skill, and consumer template. Closes #22.
|
|
17
|
+
|
|
18
|
+
## Tests
|
|
19
|
+
|
|
20
|
+
- Aligned log level assertions in `roots-registration` and `server` tests with the startup log downgrade from 0.2.11 (info → debug).
|
|
21
|
+
- Updated OTel lifecycle test to expect `metricReaders` array.
|
|
22
|
+
|
|
23
|
+
## Dependencies
|
|
24
|
+
|
|
25
|
+
- `dotenv` 17.3.1 → 17.4.0
|
|
26
|
+
- `hono` 4.12.9 → 4.12.10
|
|
27
|
+
- `@cloudflare/workers-types` ^4.20260401.1 → ^4.20260403.1
|
|
28
|
+
- `@modelcontextprotocol/ext-apps` ^1.3.2 → ^1.5.0
|
|
29
|
+
- `@types/node` ^25.5.0 → ^25.5.2
|
|
30
|
+
- `validator` ^13.15.26 → ^13.15.35
|
|
31
|
+
- Added `lodash` 4.18.1 (pinned override)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Error category telemetry — new ErrorCategory type and classifier, mcp.tool.error_category OTel attribute, OpenTelemetry and SDK dependency bumps
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.2 — 2026-03-26
|
|
7
|
+
|
|
8
|
+
Error category telemetry, dependency updates, and minor cleanup.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **Error category telemetry** — New `ErrorCategory` type (`'upstream'` | `'server'` | `'client'`) and `getErrorCategory()` classifier in error handler mappings. Tool error metrics now emit `mcp.tool.error_category` attribute, enabling dashboards to distinguish external API failures from internal bugs and bad input.
|
|
13
|
+
- **`ATTR_MCP_TOOL_ERROR_CATEGORY`** — New OTel attribute constant for the error category dimension.
|
|
14
|
+
|
|
15
|
+
## Changed
|
|
16
|
+
|
|
17
|
+
- **Dependencies** — `@modelcontextprotocol/sdk` ^1.27.1 → ^1.28.0, `@opentelemetry/*` packages bumped (api ^1.9.1, SDK ^0.214.0, resources/metrics/trace ^2.6.1, instrumentation-pino ^0.60.0), `@biomejs/biome` 2.4.8 → 2.4.9, `vitest` 4.1.1 → 4.1.2, `vite` 8.0.2 → 8.0.3, `openai` ^6.33.0, `repomix` ^1.13.1, `@supabase/supabase-js` ^2.100.1.
|
|
18
|
+
- **New runtime deps** — Added `picomatch` 2.3.2 and `yaml` 1.10.3 to dependencies.
|
|
19
|
+
- **Minor refactors** — Simplified optional chaining in `authUtils.ts` and `trace.ts`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: format() content-completeness guidance across docs and scaffolding, echo template clarification, minor dependency update
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.3 — 2026-03-28
|
|
7
|
+
|
|
8
|
+
`format()` content-completeness guidance and minor dependency update.
|
|
9
|
+
|
|
10
|
+
## Changed
|
|
11
|
+
|
|
12
|
+
- **`format()` content-completeness** — Clarified across all documentation and scaffolding that `format()` populates MCP `content[]`, which is the only field most LLM clients (Claude Code, VS Code Copilot, Cursor, Windsurf) forward to the model. `structuredContent` (from `output`) is for programmatic/machine use and is not reliably shown to the LLM. Updated `ToolDefinition` JSDoc, `CLAUDE.md`, `templates/CLAUDE.md`, `skills/add-tool`, and `skills/design-mcp-server` with richer example formatters, explicit warnings against thin one-liners, and new checklist items.
|
|
13
|
+
- **`echo.tool.ts` template** — Added clarifying comment about `format()` content-completeness in the scaffolded echo tool.
|
|
14
|
+
- **`polish-docs-meta` reference** — Added `LOGS_DIR` env var to the environment variable reference table.
|
|
15
|
+
- **Dependencies** — `@modelcontextprotocol/ext-apps` ^1.3.1 → ^1.3.2.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Server.json manifest linter with full spec validation, API efficiency patterns in service skill, dependency security overrides
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.4 — 2026-03-28
|
|
7
|
+
|
|
8
|
+
Server.json manifest linter, API efficiency patterns, and dependency security overrides.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **Server.json manifest linter** — New `lintServerJson()` rule set validates `server.json` against the MCP server manifest spec (2025-12-11). Checks name format (reverse-DNS), description length, version (no ranges, semver), repository structure, packages (registryType, identifier, transport, arguments, env vars), remotes (transport constraints), and cross-validates version against `package.json`. Integrated into `validateDefinitions()` pipeline and `lint-mcp` CLI script.
|
|
13
|
+
- **`LintDefinitionType`** — New exported type (`'tool' | 'resource' | 'prompt' | 'server-json'`) for lint diagnostics. Exported from `/linter` and main entry point.
|
|
14
|
+
- **API efficiency guidance** — New section in `add-service` skill covering batch-over-N+1, field selection, and pagination awareness patterns. Added corresponding checklist item.
|
|
15
|
+
- **Live API probing step** — `design-mcp-server` skill now includes a step to hit real API endpoints during research to verify response shapes, batch endpoints, field selection, pagination, and error formats.
|
|
16
|
+
- **API efficiency planning table** — `design-mcp-server` skill gains a service design table for batch, field selection, request consolidation, and pagination decisions.
|
|
17
|
+
|
|
18
|
+
## Changed
|
|
19
|
+
|
|
20
|
+
- **`LintInput`** — Now accepts optional `serverJson` and `packageJson` fields for manifest and cross-validation.
|
|
21
|
+
- **`lint-mcp.ts` script** — Discovers and parses `server.json` + `package.json` at project root, passes them to `validateDefinitions()`. Skips lint only when no definitions and no server.json found.
|
|
22
|
+
- **Template `format()` example** — Updated `templates/AGENTS.md` and `templates/CLAUDE.md` with content-complete `format()` example and checklist item.
|
|
23
|
+
- **CLAUDE.md** — Added API efficiency note to service documentation section.
|
|
24
|
+
- **Dependency overrides** — Added `brace-expansion` 1.1.13, `handlebars` 4.7.9, `path-to-regexp` 8.4.0 to resolve security advisories in transitive dependencies.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Batch partial success telemetry with auto-detection, new OTel attribute constants, tools-first design philosophy, expanded error classification guidance
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.5 — 2026-03-28
|
|
7
|
+
|
|
8
|
+
Batch partial success telemetry and tools-first design guidance.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **Batch partial success telemetry** — `measureToolExecution` auto-detects when a tool handler returns a result with a non-empty `failed` array (the batch response pattern from the design skill). Sets `mcp.tool.partial_success`, `mcp.tool.batch.succeeded_count`, and `mcp.tool.batch.failed_count` span attributes and structured log fields. No manual instrumentation needed.
|
|
13
|
+
- **`ATTR_MCP_TOOL_PARTIAL_SUCCESS`**, **`ATTR_MCP_TOOL_BATCH_SUCCEEDED`**, **`ATTR_MCP_TOOL_BATCH_FAILED`** — New OTel attribute constants exported from `/utils`.
|
|
14
|
+
- **Batch input design section** — `design-mcp-server` skill gains guidance on when to accept array input, partial success output schema patterns, and telemetry integration.
|
|
15
|
+
- **Error design section** — `design-mcp-server` and `add-tool` skills expanded with error classification by origin (client/upstream/not-found/auth/internal), error factory usage, and failure mode planning tables.
|
|
16
|
+
|
|
17
|
+
## Changed
|
|
18
|
+
|
|
19
|
+
- **Tools-first design philosophy** — Updated `design-mcp-server`, `add-resource`, and `CLAUDE.md` to clarify that tools are the primary interface. Resources are supplementary — many MCP clients (Claude Code, Cursor, most chat UIs) are tool-only. Design guidance now requires verifying that resource data is also reachable via the tool surface.
|
|
20
|
+
- **`add-resource` skill v1.1** — Added tool coverage checklist item and guidance note.
|
|
21
|
+
- **`add-tool` skill v1.1** — Expanded batch input/partial success patterns with full code examples, improved error classification section with factory usage.
|
|
22
|
+
- **`api-utils` skill** — Updated telemetry attributes documentation for new batch/partial success attributes.
|
|
23
|
+
|
|
24
|
+
## Tests
|
|
25
|
+
|
|
26
|
+
- **Partial success detection** — Four new test cases in `performance.test.ts`: detects non-empty `failed` array, skips empty `failed`, handles missing `succeeded`, ignores non-object results.
|
|
27
|
+
- **Attribute constants** — Four new tests in `attributes.test.ts` for `error_category`, `partial_success`, `batch.succeeded_count`, `batch.failed_count`.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Empty server handler init fix, OpenTelemetry API moved to optional peer dep, expanded unit and integration test coverage
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.6 — 2026-03-28
|
|
7
|
+
|
|
8
|
+
Handler initialization for empty servers, OTel API moved to peer deps, and comprehensive test coverage expansion.
|
|
9
|
+
|
|
10
|
+
## Fixed
|
|
11
|
+
|
|
12
|
+
- **Empty/task-only server handler initialization** — `ToolRegistry`, `ResourceRegistry`, and `PromptRegistry` now call the SDK's `setToolRequestHandlers()` / `setResourceRequestHandlers()` / `setPromptRequestHandlers()` up front before registering definitions. Previously, servers with zero standard tools (or only task tools) would not expose `tools/list`, `resources/list`, or `prompts/list` handlers, causing clients to get method-not-found errors.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **`@opentelemetry/api` moved to optional peer dependency** — Reduces mandatory install footprint for servers that don't use OpenTelemetry. The package is still required when `OTEL_ENABLED=true`.
|
|
17
|
+
|
|
18
|
+
## Tests
|
|
19
|
+
|
|
20
|
+
- **New unit tests** — `sessionAwareTaskStore.test.ts` (session ownership enforcement), `checkScopes.test.ts` (dynamic scope checking), `httpTransport.lifecycle.test.ts` (port retry and shutdown lifecycle), `protectedResourceMetadata.test.ts` (OAuth protected resource metadata), `sessionIdUtils.runtime.test.ts` (Web Crypto session ID fallback), `mockContext.test.ts` (mock context logger, state, progress helpers), `retry.test.ts` (retry helper with backoff, jitter, cancellation, abort signal), `instrumentation.lifecycle.test.ts` (OTel init/shutdown, cloud provider detection, timeout handling).
|
|
21
|
+
- **New test helper** — `default-server-mcp.ts` with shared MCP surface assertions for capabilities, discovery, protocol errors, and task operations.
|
|
22
|
+
- **Expanded integration tests** — HTTP auth (protected resource metadata, SSE rejection), HTTP sessions (DELETE without session ID), HTTP transport (MCP surface, protocol version rejection, origin rejection), stdio (MCP surface assertions).
|
|
23
|
+
- **Expanded unit tests** — Tool registration (task-only registry handler init), storage factory (Cloudflare R2/KV/D1 serverless providers, Supabase client injection, filesystem serverless rejection).
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Stdio heartbeat monitor for dead connection detection, session duration histogram, new OTel attributes and counters
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.7 — 2026-03-28
|
|
7
|
+
|
|
8
|
+
Stdio heartbeat monitor for dead connection detection, session duration telemetry.
|
|
9
|
+
|
|
10
|
+
## Added
|
|
11
|
+
|
|
12
|
+
- **Stdio heartbeat monitor** — `HeartbeatMonitor` periodically pings the connected client via the MCP `ping` method to detect dead connections (orphaned child processes, crashed hosts). Configurable via `MCP_HEARTBEAT_INTERVAL_MS` (default 30s, disabled by default since 0.2.8) and `MCP_HEARTBEAT_MISS_THRESHOLD` (default 3). Uses recursive `setTimeout` to prevent ping overlap. Triggers graceful shutdown on threshold breach.
|
|
13
|
+
- **Session duration histogram** — New `mcp.session.duration` metric (seconds) records session lifetime on termination and stale cleanup. Emitted alongside existing session event counters.
|
|
14
|
+
- **`ATTR_MCP_CONNECTION_TRANSPORT`** — New OTel attribute constant for heartbeat and connection metrics.
|
|
15
|
+
- **`mcp.heartbeat.failures`** — New OTel counter tracking individual heartbeat ping failures, attributed by transport type.
|
|
16
|
+
|
|
17
|
+
## Changed
|
|
18
|
+
|
|
19
|
+
- **Session termination** — `SessionStore.terminate()` and stale cleanup now record duration via the new histogram. Stale cleanup hoists `getSessionMetrics()` outside the loop to avoid repeated lazy-init checks.
|
|
20
|
+
|
|
21
|
+
## Tests
|
|
22
|
+
|
|
23
|
+
- Updated prompt and resource registration test mocks to match new SDK handler initialization methods (`setPromptRequestHandlers`, `setResourceRequestHandlers`, `sendResourceListChanged`, `server.sendResourceUpdated`).
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Heartbeat disabled by default — stdio servers no longer self-terminate in dev mode or simple harnesses without a client
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.8 — 2026-03-28
|
|
7
|
+
|
|
8
|
+
Heartbeat disabled by default — opt-in only.
|
|
9
|
+
|
|
10
|
+
## Fixed
|
|
11
|
+
|
|
12
|
+
- **Heartbeat default changed to disabled** — `MCP_HEARTBEAT_INTERVAL_MS` now defaults to `0` (off). The 30s default caused stdio servers to self-terminate when run without a client (dev mode, manual testing, simple harnesses). Set `MCP_HEARTBEAT_INTERVAL_MS=30000` to enable.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Cache negative lazy-import results to eliminate optional peer dep metric spam — new lazyImport utility, OpenRouter tryCatch fix
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.9 — 2026-03-29
|
|
7
|
+
|
|
8
|
+
Cache negative lazy-import results for optional peer deps to prevent metric spam.
|
|
9
|
+
|
|
10
|
+
## Fixed
|
|
11
|
+
|
|
12
|
+
- **Lazy-import metric spam** — Optional peer dependency loaders (`chrono-node`, `diff`, `papaparse`, `partial-json`, `pdf-lib`, `unpdf`, `js-yaml`, `openai`) now cache negative import results via the new `lazyImport()` utility. Previously, every call to a function backed by a missing peer dep would re-attempt the dynamic `import()`, throw a `ConfigurationError` through `ErrorHandler.tryCatch`, and increment the `mcp.errors.classified` counter — producing unbounded metric spam for a static configuration issue. Now: first failure logs a warning once and caches the state; subsequent calls throw immediately without retry or counter increment. Closes #20.
|
|
13
|
+
- **OpenRouter client init outside tryCatch** — Moved `ensureClient()` call in `chatCompletion()` outside the `ErrorHandler.tryCatch` boundary so a missing `openai` peer dep does not inflate the classified error counter on every LLM call.
|
|
14
|
+
|
|
15
|
+
## Added
|
|
16
|
+
|
|
17
|
+
- **`lazyImport()` utility** (`src/utils/internal/lazyImport.ts`) — Generic lazy-loader factory for optional peer dependencies that caches both success and failure. Logs a warning on first failure, throws `ConfigurationError` on all subsequent calls without re-importing or touching error metrics.
|
|
18
|
+
|
|
19
|
+
## Tests
|
|
20
|
+
|
|
21
|
+
- Unit tests for `lazyImport()` covering success caching, failure caching, single-warning behavior, and instance isolation.
|
|
22
|
+
|
|
23
|
+
## Changed
|
|
24
|
+
|
|
25
|
+
- `@cloudflare/workers-types` updated to `^4.20260329.1`.
|