chore(deps): bump @modelcontextprotocol/server from 2.0.0 to 2.4.0
Bumps @modelcontextprotocol/server from 2.0.0 to 2.4.0.
Release notes
Sourced from @modelcontextprotocol/server's releases.
@modelcontextprotocol/server-legacy@2.4.0Patch Changes
@modelcontextprotocol/server@2.4.0Minor Changes
#3057
c05225aThanks@steipete! -ServerEventtakes optionalparams, which thesubscriptions/listenrouter delivers with its own subscription ID, so a gateway can forward change notifications with their_metaand extension params.#3047
46d9c99Thanks@KKonstantinov,@tobi-oye,@mattzcarey! - Add the Skills extension (SEP-2640), reachable through newext/skillssubpaths; package root exports are unchanged.
@modelcontextprotocol/server/ext/skills:SkillsExtension(attach(server)servesskills/list,skills/get,resources/directory/readand askill://{+path}resource template),SkillsExtension.load(files)returning aSkillCatalogwithentriesandreload(), theSkillFilesstorage adapter withmemorySkillFiles,SkillSourcefor generated catalogs,skillEntry, andSkillCatalogError. Invalid skills are skipped with a warning (onWarning), or fail understrict. A file whose bytes are valid UTF-8 is served astext, whatever its MIME type; any other file as a base64blob.@modelcontextprotocol/server/ext/skills/node:loadSkills(folder)andnodeSkillFiles(folder).@modelcontextprotocol/client/ext/skills:SkillsClientwithlist()(throws on an invalid entry;skipInvalid: truekeeps the valid ones and returns the rest ininvalid),get(),read(skill, path?)(size, digest andSKILL.mdfrontmatter verified,SkillVerificationErroron a mismatch; a copy from the response cache that fails a check is fetched once more withcacheMode: 'refresh'first) andreadDirectory().@modelcontextprotocol/core/ext/skills: schemas, types and constants, includingSKILL_LIMITS. The result schemas follow the stable spec, sottlMsandcacheScopeare required.
SkillsExtension.attachis@experimental: how an extension is wired to a server may change in a minor release. The rest of the Skills API is stable.Works on 2025-11-25 and 2026-07-28. On 2026-07-28 only, the server sends the caching fields (
ttlMs,cacheScope), andSkillsClientrequires them and returns them fromlist(),get()andreadDirectory().Patch Changes
#3083
ef38c67Thanks@claude! - The bundled Ajv validator is now built with fast-uri 3.1.8 (was 3.1.0). fast-uri 3.1.6 and later reject a$idor$refwhose text before the first colon is not a valid URI scheme (my_tool:output), or whose URN namespace is not valid (urn:my_tool:output): a schema that uses one no longer compiles, and a tool that carries it fails with an invalid-schema error. An underscore without a colon (my_tool_output) and a$refinto#/$defs/...or#/definitions/...are not affected.#2960
43c45f4Thanks@claude! - A server whose tool putsx-mcp-headeron anumber-typed parameter keeps checking that tool'sMcp-Param-*headers ontools/call, as 2.3.0 does: a header that is missing for a value in the body, or that disagrees with the body, is answered400with JSON-RPC error-32020. Clients on a 2026-07-28 connection other than stdio no longer list such a tool and send noMcp-Param-*headers for it, so a call that carries a value for a declared parameter is rejected the same way; the server logs a warning each time tools are listed. Use an integer (z.int()) or remove the annotation.#3081
5820f79Thanks@claude! - A tooloutputSchemawhose root is a$refto atype: "object"entry of its own$defsordefinitions(what zod writes forz.object({...}).meta({ id })), or a union of such refs, is now treated as an object schema. On 2025-era connections the tool's schema andstructuredContentare no longer wrapped in{ result: ... }, so a 2025-era client that readstructuredContent.resultfor such a tool now readsstructuredContent. On every era the advertised schema gainstype: "object"at its root.#3057
c05225aThanks@steipete! - Connecting aServerorMcpServerto aPerRequestHTTPServerTransportclassified at a modern revision thatsupportedProtocolVersionslists and the SDK implements now binds that revision, instead of answering-32022.#3005
b381559Thanks@chaeyn! - Reflect resource and resource templateupdate({ title })changes in list responses. Preserve other metadata and individual resource titles when a template supplies list entries.#3002
895007fThanks@Hugo-DDT! -createMcpHandlernow sendsAllow: POSTon every405it answers to a non-POST request, withlegacy: 'stateless'(the default) and withlegacy: 'reject'.#2762
b022522Thanks@pcarleton! -x-mcp-headeron anumber-typed tool parameter is now rejected, matching the 2026-07-28 spec ("Parameters with typenumberare not permitted"; clients MUST exclude such tools fromtools/list). Previouslynumberwas accepted only to satisfy an older conformance fixture that has since been corrected.integer,stringandbooleanare unaffected.Updated dependencies [
46d9c99]:
@modelcontextprotocol/core@2.4.0
@modelcontextprotocol/server-legacy@2.3.1Patch Changes
#2952
5a18673Thanks@claude! -requireBearerAuthin@modelcontextprotocol/server-legacytakes the optionalexpectedResourcethat@modelcontextprotocol/server2.3.0 and@modelcontextprotocol/sdk1.32.0 added: the resource the token must be issued for (its audience), usually the server's URL. When it is set, a token is accepted only if the verifier reports that value inAuthInfo.resource; the two are compared as strings, ignoring a fragment and one trailing slash. A token reported for another value, or for none, is answered401 invalid_tokenwith the usualWWW-Authenticatechallenge. When it is not set, nothing changes. The package stays frozen otherwise; this option is added so that itsrequireBearerAuthmatches the 1.x middleware it is a copy of.Updated dependencies []:
@modelcontextprotocol/core@2.3.1
@modelcontextprotocol/server@2.3.1Patch Changes
... (truncated)
Commits
951fe56Version Packages (#2959)895007ffix(server): set Allow: POST on stateless legacy 405 responses (#3002)28124dbfix(docs): use relative POSIX package entry globs (#3016)f7289b3docs: say that a spec handler's params drop members the spec does not define ...a633756feat(client): add an opt-in for sending scope on token refresh (#3085)10c26b0chore(node): accept@hono/node-server1.x or 2.x (#3084)ef38c67chore(deps): build the bundled ajv with fast-uri 3.1.8 (#3083)5820f79fix(server): treat an outputSchema root $ref to an object definition as an ob...a513cfedocs: close the v1 to v2 quick path with the 2026-07-28 serving decision (#3086)c822443docs(server): mark SkillsExtension.attach as experimental (#3080)- Additional commits viewable in compare view
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Summary by cubic
Updates @modelcontextprotocol/server from 2.0.0 to 2.4.0 in the root, apps/my-pi-mcp, and packages/mcp-adapter. The new version adds the Skills extension and changes how two tool schema edge cases are handled.
Behavior changes to verify
x-mcp-headeron anumber-typed tool parameter is now rejected (previously accepted).- An
outputSchemawhose root$refs an object definition is treated as an object schema, sostructuredContentis no longer wrapped in{ result: ... }on 2025-era connections.