Repository navigation
chore(release): 0.9.0 (also lands #36, #37, #38) - #39
Merged
Merged
Conversation
Clears the sprintf-js / minimatch advisories reported through vite-plugin-dts 4 (@microsoft/api-extractor, @vue/language-core). api-extractor 7.60.1 is the latest release and still pins minimatch 10.2.3 (GHSA-g3hv-75wg-m249), so an override moves only that dev-only dependency to minimatch ^11.0.1. The built dist (declarations and bundle) is identical to the previous build. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmUXGSYMuTcM7fquxzRook
vitest 5 declares node ^22.12 || ^24 || >=26, so the pinned Node 25.3.0 is outside its supported range. Use Node 26 in ci.yml and release.yml; `engines` stays >=25.3.0 so consumers are unaffected. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmUXGSYMuTcM7fquxzRook
JSON Schema inputSchema values registered as an open object, so clients saw no parameters and arguments were not validated. They now go through the SDK v2 fromJsonSchema(), with one validator per DynamicToolManager so a client's schemas (and $id values) never cross to another client. Schemas that do not compile, or are not a Zod 4 shape or a JSON Schema object, fail the toolset's enable with E_VALIDATION. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmUXGTprrczjscL9XyWxYz
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmUXGSYMuTcM7fquxzRook
Drop the root $id before compiling so tools sharing one $id keep their own validator, make the per-manager validator an eager field, pin test assertions, and add rollback, same-$id and concurrent-client tests. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmUXGTprrczjscL9XyWxYz
Copy the schema only when a root $id must be dropped so Ajv's identity cache still hits, pin the per-manager validator with a constructor spy, tighten docs and assertions, and cover absolute $refs to a nested $id. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmUXGTprrczjscL9XyWxYz
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmUXGTprrczjscL9XyWxYz
…-dts chore(deps): update vite-plugin-dts to ^5.1.2 (stacked on #35)
…-node ci: run CI and release on Node 26 (stacked on #35)
fix: advertise and validate JSON Schema tools via fromJsonSchema (T3)
Version 0.9.0 in package.json and package-lock.json, and the [0.9.0] changelog entry for the MCP SDK v2 / Zod 4 move (#35), vite-plugin-dts 5 (#36), Node 26 CI (#37) and validated JSON Schema tools (#38). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmUXGSYMuTcM7fquxzRook
Contributor
Author
TS review:
|
| # | Sev | Location | Finding | Disposition |
|---|---|---|---|---|
| 1 | LOW | src/core/DynamicToolManager.ts ~L486-494, CHANGELOG [0.9.0], src/core/AGENTS.md inv. 7 |
Docs say a shape mixing Zod and non-Zod values fails with E_VALIDATION; a mixed shape that also carries a key type: "object" would go to fromJsonSchema() instead. |
Left unchanged: the input is a malformed schema that is very unlikely in practice, and this code and wording were already reviewed in #38's own thread. Not worth another push and a re-review of this release PR; it can be tightened in a follow-up if it ever shows up. |
| 2 | LOW | tests/e2e/jsonSchemaTools.e2e.test.ts EOF |
Extra trailing blank line (cosmetic). | Left unchanged: cosmetic, in a file owned by #38. |
{
"recommendation": "APPROVE",
"summary": "Release PR is consistent: CHANGELOG [0.9.0] is complete, correctly linked and extractable by release.yml, versions are aligned at 0.9.0, docs match DynamicToolManager.ts, and the new code meets the TS/karpathy standards with only two LOW nits.",
"findings": [
{ "severity": "LOW", "file": "src/core/DynamicToolManager.ts", "line": 489, "issue": "A mixed Zod/non-Zod shape that also carries type: \"object\" is routed to fromJsonSchema() rather than failing with E_VALIDATION; negligible edge." },
{ "severity": "LOW", "file": "tests/e2e/jsonSchemaTools.e2e.test.ts", "line": null, "issue": "File ends with an extra trailing blank line (cosmetic)." }
]
}Generated by Claude Code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Ben · project thread
Read first: #36, #37 and #38 are not on
mainyet#35 merged into
main, but #36 (vite-plugin-dts 5), #37 (CI on Node 26) and #38 (JSON Schema tools) were still based on #35's branch, so GitHub merged them into that branch, not intomain.maincurrently holds only #35 (5b27848). This PR carries the already-reviewed merge commits of those three (claude/project-thread-1w8fky, merged with currentmain) plus the release commit, so one merge lands everything.Merge order
main(base ismain; there is nothing to merge before it). Do not merge chore(deps): update vite-plugin-dts to ^5.1.2 (stacked on #35) #36–fix: advertise and validate JSON Schema tools via fromJsonSchema (T3) #38 again.v0.9.0onmainHEAD (Ben, after saying so; nothing is tagged or published here).What changed
e70296c):package.jsonandpackage-lock.json0.8.0 → 0.9.0;CHANGELOG.md[Unreleased]→[0.9.0]with PR links and a "Changed" entry for Node 26 CI (enginesunchanged).vite-plugin-dts^5.1.2 + minimatch override (APPROVE), ci: run CI and release on Node 26 (stacked on #35) #37 CI/release on Node 26 (APPROVE), fix: advertise and validate JSON Schema tools via fromJsonSchema (T3) #38 JSON Schema tools throughfromJsonSchema()with per-client validators (reviewed in its own thread).Verification (Node 26.13.0, this branch)
npm run typecheck✔,npm run build✔,npm run test:run✔ 433 tests (27 files, includesmultiClient.e2e,jsonSchemaTools.e2e,dependencies).npm audit: 0 vulnerabilities;npm audit --audit-level=critical✔.TOOLSETS=ALL), permission-config, permission-header all pass.npm publish --dry-run: toolception@0.9.0, 64 files, 110.9 kB, onlydist/,README.md,CHANGELOG.md,LICENSE,package.json.dist/index.jsimports@modelcontextprotocol/server,/server/validators/ajv,/node,zod,fastify,@fastify/corsand bundles none of them.release.yml(awkon## [0.9.0]) yields a non-empty entry (23 lines).package.json=package-lock.json(both entries) = 0.9.0; changelog heading 0.9.0;engines>=25.3.0unchanged.After the tag
The FMP server's S1 PR (imbenrabi/Financial-Modeling-Prep-MCP-Server#126) points at
toolception ^0.9.0and must not merge until 0.9.0 is on npm andnpm run verify:toolception -- --source 0.9.0passes there.Generated by Claude Code