Repository navigation
Conversation
Move the three Python servers from mcp 1.x to mcp>=2.2,<3 and drop the
mcp>=1.29.0,<2 pin. Each stays on the low-level Server, now built with
on_* constructor handlers instead of decorators, and returns
ListToolsResult / ListPromptsResult / CallToolResult explicitly.
SDK v2's low-level server no longer validates tool arguments against
inputSchema or folds a handler exception into an isError result. Each
server's call_tool now does both itself, with v1's messages, so tool
results on the wire are unchanged. jsonschema becomes a direct
dependency for that.
McpError(ErrorData(...)) becomes MCPError(code=..., message=...), and
Tool / ToolAnnotations fields move to snake_case.
Tests: only import and type changes, plus wire() dumping with
exclude_unset (v2 result models default fields the 2025-11-25 wire does
not carry). One assertion changes: v2 omits the empty
"experimental": {} capability, in git and time.
Closes #4851
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
Run @modelcontextprotocol/codemod v1-to-v2 (2.3.1) on everything, filesystem, memory and sequentialthinking, and finish what it leaves: - Manifests: drop @modelcontextprotocol/sdk; depend on @modelcontextprotocol/server (plus node and server-legacy in everything), with client (and core, for everything's skipped task tests) as devDependencies; zod ^4.2.0; engines node >=20. The root devDependency for the boot smoke moves to @modelcontextprotocol/client. - everything: wrap the three raw-shape prompt argsSchemas in z.object(); drop the result schemas from ctx.mcpReq.send(); keep HTTP+SSE on the frozen server-legacy bridge. - Experimental tasks are gone in v2 (SEP-2663): remove simulate-research-query and the two trigger-*-async tools and the tasks capability, pending #4852. Their tests stay, skipped, behind typed stand-ins for the removed v1 surface. - Re-baseline the Part 1 (#4854) assertions that SDK v2's documented wire changes move: unknown tools reject with -32602, the "MCP error <code>: " prefix is gone, validation issues read "field: message", tool schemas declare JSON Schema 2020-12, tools no longer advertise execution.taskSupport, and the resource-not-found message reads "Resource not found: <uri>". - Docs, skills and the smoke script follow; one major changeset per server records the breaking changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…ra only (#4856) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
SDK v2's Server.run() drives a dual-era loop, so the port also answered server/discover and 2026-07-28 per-request envelopes. That changes the wire, and adopting 2026-07-28 is #4853, not #4851. Each server now runs the SDK's handshake-only serve_loop (what run() uses minus era routing) inside the server lifespan, so an enveloped request gets "Method not found" as it did on SDK v1. Each suite gains a protocol test pinning that refusal; git's raise_exceptions test (#4658) now patches serve_loop instead of Server.run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Drop the stale taskStore references from the testing skill, fix a stray asterisk in tasks.test.ts's header, and rename memory's DRAFT_07 schema constant to JSON_SCHEMA_2020_12 now that it holds the 2020-12 URI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Each server.py's handler and transport layer was rewritten for SDK v2, so it now opens with a purpose header stating what the file is for and the legacy-wire constraint. Two test names that pointed at the old component now name the one they exercise: call_tool's schema check, and serve_loop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
everything-async-task-tools.md described fixes to two tools this release no longer ships, and everything-conditional-tools-4792.md named one of them; keep only what consumers receive (Copilot round 2 on #5063). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…ng tool Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
SDK v1 answered every unknown method with -32602 "Invalid request parameters" (its request union failed to parse); SDK v2 answers -32601 "Method not found", the code JSON-RPC defines. The era tests' comments claimed v1 parity, and the server headers and serve() comments claimed an unchanged wire. Correct them to say what holds (tool results are unchanged) and record the error code as a behavior change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
State the Node.js 20 floor in each server's README and note in everything's that the task tools are out until #4852. Assert that sequentialthinking advertises no execution metadata rather than skipping the test, and correct a stale v1 comment in sampling-elicitation.test.ts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Copilot round 4 on #5063: v2's StdioServerTransport closes the connection on a single message over 10 MiB, where 1.x buffered without limit. Keep the SDK default and list it among the breaking changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…dk-v2 chore: migrate the TypeScript servers to TS SDK v2 (codemod)
…on-sdk-v2 Port fetch, git and time to the MCP Python SDK v2
Adds a GitHub Actions workflow that tracks public interface changes to the Everything MCP server using mcp-server-diff. Features: - Runs on PRs and pushes affecting src/everything/ - Auto-compares against merge-base (PRs) or previous state (pushes) - Manual workflow_dispatch for comparing any two refs - Generates diff reports showing tool, resource, prompt, and capability changes This helps catch unintended interface changes and provides clear visibility into how the reference server evolves over time. Related: modelcontextprotocol/inspector#1034 Signed-off-by: cliffhall <cliff@futurescale.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
Composite actions don't support working-directory at step level. Use full paths in commands instead. Signed-off-by: cliffhall <cliff@futurescale.com>
Address review feedback: - Add concurrency group so superseded runs on the same ref are cancelled - Repin SamMorrowDrums/mcp-server-diff to the correct v2.3.5 commit SHA (the previous SHA did not exist in the action's repo) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Surface the Everything server interface diff directly on the PR instead of requiring reviewers to dig into the Actions tab. - Add 'pull-requests: write' permission - Capture mcp-server-diff status output via step id - Build a comment body that summarises the status and includes the full report in a collapsed <details> block - Post via marocchino/sticky-pull-request-comment (SHA-pinned to v3.0.4) using a stable header so subsequent pushes update the same comment - Guarded to same-repo PRs only; fork PRs still get the summary and uploaded artifact Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Mirrors github/github-mcp-server's pattern of pushing on tags so each release surfaces its cumulative interface delta. The everything server ships as part of the typescript-servers monorepo bundle, so we trigger on typescript-servers-* tags and let mcp-server-diff auto-compare against the previous matching tag. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…4860) Adapt #3260's workflow for v2/main: - Run the check as `npm run interface-diff` (scripts/interface-diff.mjs), driving the mcp-server-diff 3.0.0 CLI as an exact-pinned root devDependency instead of the SHA-pinned v2.3.5 action. The same script is a new last stage of local:gate, which workflow-gate.test.mjs now requires, so the gate keeps running every check CI runs. - Choose the base per event (the PR's base, the commit before a push, the previous release tag, or a dispatch input) instead of the tool's default merge-base with origin/main, which is wrong for v2/main PRs. - Trigger pushes on main and v2/main, PRs on any base, and published Releases instead of the retired typescript-servers-* tags. - Run the PR's code only in a read-only job with no persisted credentials; post the sticky comment from a separate job that holds pull-requests: write, runs no PR code, and only runs for same-repo PRs. Fork PRs keep the job summary and the report artifact. - Give every job a timeout. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Add `interface-diff` to the stage table in docs/quality-gate.md, to AGENTS.md's Before pushing and project tree, and a diagnosis section to the pre-push-gate skill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
`git describe` finds the nearest ancestor tag, but the date-stamped releases tagged commits that never reached main, so from main it lands on typescript-servers-0.6.2 (2024). Take the previous published Release's tag from the Releases list instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…rr (#4860) Copilot round 1 on #4975: - Check out github.sha rather than github.ref, so a push run diffs the commit it was triggered for against that event's `before`, not a branch tip a later push moved. - When mcp-server-diff prints no JSON report, include its stderr (where a fatal error goes) in the error, so the reason is not blank. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Copilot round 2 on #4975: taking the latest Release other than the current one picks a newer Release when an older one's run is re-run. Keep only Releases published before this event's Release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Copilot round 3 on #4975 ("previously missed"): - Skip the comment job on Dependabot PRs, which are same-repo but get a read-only token; they keep the summary and artifact like fork PRs. - Trigger on the root tsconfig.json, which everything's tsconfig extends. - Spawn only npm through a shell on Windows, with its arguments quoted by winShellArgs; git needs no shell. - Silence the expected usage error in the script test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
) Copilot round 4 on #4975: a concurrency group keeps only one pending run, so a third rapid push cancelled the queued one even without cancel-in-progress. Group by ref only for PRs; by run id otherwise. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Copilot round 5 on #4975: - A result with no boolean hasDifferences is an error, not "unchanged". - On a probe failure, report the CLI's contextual message ("Base server probe failed" / "Target probe failed") rather than the bare exception. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
git_show printed bare paths in each file's --- / +++ header, so its output was not a patch that `git apply` or `patch -p1` accepts: their default strips one leading component, reading logic/a.py as a.py. The headers now match `git show`: a/<path> and b/<path>, with /dev/null unprefixed for an added or deleted side. Fix as proposed by @udbhav-shrinet on the issue. Closes #5107 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
A 1 s or 5 s cadence passes 500 writes an hour within minutes, so both sustained loops now sleep 8 s (450 an hour). The triage loop also splits `gh pr close --comment` into a paced comment and close. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
`gh issue close --comment` sends both writes back to back, so step 0 now comments, pauses, then closes, and the duplicate path paces its three writes the same way. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…ell-args-backslash fix(scripts): double backslashes before a quote in win-shell-args
…tialthinking-header-padding fix(sequentialthinking): pad the thought box's header row to the border
The skills now point to AGENTS.md "Pacing GitHub writes" rather than quoting its numbers, and issue-triage step 0 sleeps 8 s after every write, the same as the PR-close loop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…github-writes docs: add an AGENTS.md rule for pacing bulk GitHub writes
The Version Packages and Prepare Python Release workflows push their PR branches with the workflow token, which starts no workflow, and since #5048 the TypeScript and Python workflows run on push only, so a close and reopen (which fires pull_request) never started them either. Both CI workflows now also accept workflow_dispatch, the one event that token can start, and both version workflows dispatch them on the PR's branch after opening or updating it. RELEASING.md and the release skill describe that path instead of close-and-reopen. Closes #5110 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…ow-diff-prefixes fix(git): prefix git_show diff headers with a/ and b/
typescript.yml's validate job gains a node axis (22, 24, 26), so each package's format, lint, typecheck, build and tests run on every supported Node line as parallel matrix legs rather than serial steps. The other single-version jobs stay on Node 22, the oldest supported. The Dockerfiles move to node:24-alpine, and AGENTS.md, quality-gate.md and the local-dev skill name Node 24 as the development version and 22 as the oldest supported. No engines field is added or changed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
A workflow_dispatch run's checks attach to the head commit but are left out of its status rollup, which is what a pull request reads: a probe commit with 29 successful dispatched check runs had a rollup of null. So a version PR would have shown no CI at all. On a dispatch, each CI workflow now posts a pending commit status at the start and the run's result at the end, which the rollup does include. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
A dispatched run cancelled for any reason other than supersession left its "(dispatched)" status pending forever (Copilot). The result job now runs under always(): it stays silent only when a newer dispatched run of the same workflow exists on the commit, and otherwise reports the cancellation as an error. scripts/version-pr-ci.test.mjs pins each link of the version-PR CI path, since nothing exercises it before a release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…-matrix ci: validate the TypeScript servers on Node 22, 24 and 26 in parallel
…ion-pr-ci ci: dispatch TypeScript and Python CI on automated version PRs
changelog-github wrote each line as "Thanks [@user]!"; nearly every changeset here is a maintainer's, and community credit lives in the release notes' Thanks section. A template keeps the PR, commit and author links. template is experimental upstream, so changelog-github is pinned exactly. Closes #5161 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…gelog-drop-thanks chore: drop "Thanks" from the changesets attribution, keep the author
…v2/main chore: version packages
mcp-server-fetch, mcp-server-git and mcp-server-time 2026.10.10 -> 2026.10.18, for the v2.0.0 release. Each shipped source changes since its last stamp (the 2026-07-28 era, the fetch annotations, #5107 in git). Part of #5159 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: cliffhall <cliff@futurescale.com>
…on-calver-2026.10.18 chore: stamp Python CalVer versions for 2026.10.18
|
|
| Tools | Prompts | Resources | Resource templates | |
|---|---|---|---|---|
| Base | 13 | 4 | 7 | 2 |
| Head | 22 | 4 | 7 | 3 |
initialize
--- base/initialize.json
+++ target/initialize.json
- capabilities.tasks: {"cancel":{},"list":{},"requests":{"tools":{"call":{}}}}
+ capabilities.extensions: {"io.modelcontextprotocol/tasks":{}}
- serverInfo: {"name":"mcp-servers/everything","title":"Everything Reference Server","version":"1.0.0"}
+ _meta: {"io.modelcontextprotocol/serverInfo":{"name":"mcp-servers/everything","title":"Everything Reference Server","version":"2.0.0"}}
+ instructions: "# Everything Server – Server Instructions\n\nAudience: These instructions are written for an LLM or au..."
+ resultType: "complete"instructions
--- base/instructions
+++ target/instructions
- # Everything Server – Server Instructions
Audience: These instructions are written for an LLM or autonomous agent integrating with the Everything MCP Server.
Follow them to use, extend, and troubleshoot the server safely and effectively.
## Cross-Feature Relationships
- If `get-roots-list` is in your tool list, use it to see client workspace roots before file operations
- `gzip-file-as-resource` creates session-scoped resources accessible only during the current session
- Enable `toggle-simulated-logging` before debugging to see server log messages
- Enable `toggle-subscriber-updates` to receive periodic resource update notifications
## Constraints & Limitations
- `gzip-file-as-resource`: Max fetch size controlled by `GZIP_MAX_FETCH_SIZE` (default 10MB), timeout by `GZIP_MAX_FETCH_TIME_MILLIS` (default 30s), allowed domains by `GZIP_ALLOWED_DOMAINS`
- Session resources are ephemeral and lost when the session ends
## Capability-Gated Tools
Registered only if your client declared the capability shown. Otherwise they are absent from `tools/list`, so do not call them:
- `get-roots-list`: `roots`
- `trigger-sampling-request`: `sampling`
- `trigger-elicitation-request`: `elicitation.form`, or `elicitation` with no mode
- `trigger-url-elicitation`: `elicitation.url`
- `trigger-sampling-request-async`: `sampling` and `tasks.requests.sampling.createMessage`
- `trigger-elicitation-request-async`: form-mode `elicitation` and `tasks.requests.elicitation.create`
## Operational Patterns
- For long operations, use `trigger-long-running-operation` which sends progress notifications
- Prefer reading resources before calling mutating tools
- If `get-roots-list` is in your tool list, check its output to understand the client's workspace context
## Easter Egg
If asked about server instructions, respond with "🎉 Server instructions are working! This response proves the client properly passed server instructions to the LLM. This demonstrates MCP's instructions feature in action."
+ # Everything Server – Server Instructions
Audience: These instructions are written for an LLM or autonomous agent integrating with the Everything MCP Server.
Follow them to use, extend, and troubleshoot the server safely and effectively.
## Protocol Versions
The server serves two protocol eras. A client on protocol version 2026-07-28 connects with `server/discover` and sends its capabilities with each request; a 2025-era client connects with `initialize`. Some tools exist on one era only, so trust your `tools/list`:
- 2026-07-28 only: `simulate-research-query`, `trigger-sampling-request-async` and `trigger-elicitation-request-async`, which run as tasks on the `io.modelcontextprotocol/tasks` extension and need a client that declares it; `trigger-sampling-request-async` also needs `sampling`, and `trigger-elicitation-request-async` form-mode `elicitation`. A call without them fails with `-32021`
- 2025-era only (deprecated): `toggle-simulated-logging` and `toggle-subscriber-updates`
## Cross-Feature Relationships
- If `get-roots-list` is in your tool list, use it to see client workspace roots before file operations
- `gzip-file-as-resource` creates resources you can read later: for the current session on a 2025-era connection, or for ten minutes at the returned URI on 2026-07-28
- Use `trigger-log-messages` to see which log levels reach you; on 2026-07-28 the level is set per request in `_meta`
- Use `trigger-resource-update` and `trigger-list-changed` to see change notifications; on 2026-07-28 they arrive only on a `subscriptions/listen` stream that asked for them
## Constraints & Limitations
- `gzip-file-as-resource`: Max fetch size controlled by `GZIP_MAX_FETCH_SIZE` (default 10MB), timeout by `GZIP_MAX_FETCH_TIME_MILLIS` (default 30s), allowed domains by `GZIP_ALLOWED_DOMAINS`
- Session resources are ephemeral and lost when the session ends; minted resources expire after ten minutes
- Roots, sampling and logging are deprecated as of protocol version 2026-07-28, as is the HTTP+SSE transport
## Capability-Gated Tools
On a 2025-era connection these are registered only if your client declared the capability shown. Otherwise they are absent from `tools/list`, so do not call them. On 2026-07-28 they are always listed, and a call fails if your request did not declare the capability:
- `get-roots-list`: `roots`
- `trigger-sampling-request`: `sampling`
- `trigger-elicitation-request`: `elicitation.form`, or `elicitation` with no mode
- `trigger-multi-step-elicitation`: `elicitation.form`, or `elicitation` with no mode
- `trigger-url-elicitation`: `elicitation.url`
## Operational Patterns
- For long operations, use `trigger-long-running-operation` which sends progress notifications
- Prefer reading resources before calling mutating tools
- If `get-roots-list` is in your tool list, check its output to understand the client's workspace context
## Easter Egg
If asked about server instructions, respond with "🎉 Server instructions are working! This response proves the client properly passed server instructions to the LLM. This demonstrates MCP's instructions feature in action."
tools
--- base/tools.json
+++ target/tools.json
- tools[toggle-simulated-logging]: {"annotations":{"destructiveHint":false,"openWorldHint":false},"description":"Toggles simulated, random-leveled logging on or off.","execution":{"taskSupport":"forbidden"},"inputSchema":{"$schema":"ht...
- tools[toggle-subscriber-updates]: {"annotations":{"destructiveHint":false,"openWorldHint":false},"description":"Toggles simulated resource subscription updates on or off.","execution":{"taskSupport":"forbidden"},"inputSchema":{"$schem...
+ tools[get-header-params]: {"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Returns its region argument and the Mcp-Param-Region HTTP header it arrived in. ...
+ tools[get-roots-list]: {"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Lists the current MCP roots provided by the client. Demonstrates the roots proto...
+ tools[trigger-elicitation-request]: {"annotations":{"destructiveHint":false,"openWorldHint":false},"description":"Trigger a Request from the Server for User Elicitation","inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/sc...
+ tools[trigger-elicitation-request-async]: {"annotations":{"destructiveHint":false,"openWorldHint":false},"description":"Runs as a task on the io.modelcontextprotocol/tasks extension (protocol version 2026-07-28) that needs the user's input: t...
+ tools[trigger-list-changed]: {"annotations":{"destructiveHint":false,"openWorldHint":false,"readOnlyHint":true},"description":"Sends a notifications/<list>/list_changed for the tool, prompt or resource list. On protocol version 2...
+ tools[trigger-log-messages]: {"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Sends one log message at each logging level during the call. On protocol version...
+ tools[trigger-multi-step-elicitation]: {"annotations":{"destructiveHint":false,"openWorldHint":false},"description":"Asks the user for their name, then for a favorite color addressed to them by that name, carrying the first answer to the s...
+ tools[trigger-resource-update]: {"annotations":{"destructiveHint":false,"openWorldHint":false,"readOnlyHint":true},"description":"Sends a notifications/resources/updated for a resource URI. On protocol version 2026-07-28 it is deliv...
+ tools[trigger-sampling-request]: {"annotations":{"destructiveHint":false},"description":"Trigger a Request from the Server for LLM Sampling. Deprecated: Sampling is deprecated as of protocol version 2026-07-28. The server asks with a...
+ tools[trigger-sampling-request-async]: {"annotations":{"destructiveHint":false},"description":"Runs as a task on the io.modelcontextprotocol/tasks extension (protocol version 2026-07-28) that needs an LLM completion: the task waits in stat...
+ tools[trigger-url-elicitation]: {"annotations":{"destructiveHint":false},"description":"Trigger a URL elicitation so the client can direct the user to a browser flow. Supports two mechanisms: the request path (elicitation/create, de...
- tools[echo].execution: {"taskSupport":"forbidden"}
- tools[echo].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[echo].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[get-annotated-message].execution: {"taskSupport":"forbidden"}
- tools[get-annotated-message].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[get-annotated-message].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[get-env].execution: {"taskSupport":"forbidden"}
- tools[get-env].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[get-env].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[get-resource-links].execution: {"taskSupport":"forbidden"}
- tools[get-resource-links].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[get-resource-links].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[get-resource-reference].execution: {"taskSupport":"forbidden"}
- tools[get-resource-reference].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[get-resource-reference].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[get-structured-content].execution: {"taskSupport":"forbidden"}
- tools[get-structured-content].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[get-structured-content].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[get-structured-content].outputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[get-structured-content].outputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[get-sum].execution: {"taskSupport":"forbidden"}
- tools[get-sum].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[get-sum].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[get-tiny-image].execution: {"taskSupport":"forbidden"}
- tools[get-tiny-image].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[get-tiny-image].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[gzip-file-as-resource].description: "Compresses a single file using gzip compression. Depending upon the selected output type, returns ei..."
+ tools[gzip-file-as-resource].description: "Compresses a single file using gzip compression. Depending upon the selected output type, returns ei..."
- tools[gzip-file-as-resource].execution: {"taskSupport":"forbidden"}
- tools[gzip-file-as-resource].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[gzip-file-as-resource].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[gzip-file-as-resource].inputSchema.properties.name.description: "Name of the output file"
+ tools[gzip-file-as-resource].inputSchema.properties.name.description: "Name of the output file (at most 255 characters)"
+ tools[gzip-file-as-resource].inputSchema.properties.name.maxLength: 255
- tools[simulate-research-query].description: "Simulates a deep research operation that gathers, analyzes, and synthesizes information. Demonstrate..."
+ tools[simulate-research-query].description: "Simulates a deep research operation that gathers, analyzes, and synthesizes information. Runs as a t..."
- tools[simulate-research-query].execution: {"taskSupport":"required"}
- tools[simulate-research-query].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[simulate-research-query].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[simulate-research-query].inputSchema.properties.topic.description: "The research topic to investigate"
+ tools[simulate-research-query].inputSchema.properties.topic.description: "The research topic to investigate (at most 1,000 characters; the task keeps it until it expires)"
+ tools[simulate-research-query].inputSchema.properties.topic.maxLength: 1000
- tools[trigger-long-running-operation].execution: {"taskSupport":"forbidden"}
- tools[trigger-long-running-operation].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[trigger-long-running-operation].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
+ _meta: {"io.modelcontextprotocol/serverInfo":{"name":"mcp-servers/everything","title":"Everything Reference Server","version":"2.0.0"}}
+ resultType: "complete"prompts
--- base/prompts.json
+++ target/prompts.json
+ prompts[args-prompt].arguments[state].description: "Name of the state"
+ _meta: {"io.modelcontextprotocol/serverInfo":{"name":"mcp-servers/everything","title":"Everything Reference Server","version":"2.0.0"}}
+ resultType: "complete"resources
--- base/resources.json
+++ target/resources.json
+ _meta: {"io.modelcontextprotocol/serverInfo":{"name":"mcp-servers/everything","title":"Everything Reference Server","version":"2.0.0"}}
+ resultType: "complete"resource_templates
--- base/resource_templates.json
+++ target/resource_templates.json
+ resourceTemplates[Minted Resource]: {"description":"A resource a tool created for this client, such as gzip-file-as-resource's output. Readable for ten minutes at the URI the tool returned.","name":"Minted Resource","uriTemplate":"demo:...
+ _meta: {"io.modelcontextprotocol/serverInfo":{"name":"mcp-servers/everything","title":"Everything Reference Server","version":"2.0.0"}}
+ resultType: "complete"Updated by this run for bbcc15b3639d6c6d43f3a5b8e1749985606bc778.
There was a problem hiding this comment.
🔵 Needs a closer look
The cross-server migration needs maintainer verification against the pending release ledger, and CI status reporting still has an unresolved concurrency issue.
1 open issue
What changed in this PR
Merges v2/main into main for v2.0.0, bringing the seven reference servers onto SDK v2 and adding support for both protocol eras.
Changes:
- Updates server dependencies, protocol handling, tests, and release versions.
- Expands Everything’s protocol demonstrations and documents compatibility changes.
- Improves release automation, validation, and contributor procedures.
| File | Description |
|---|---|
| src/time/tests/test_server.py | Updates SDK exception assertions. |
| src/time/README.md | Documents SDK v2 and protocol eras. |
| src/time/pyproject.toml | Updates dependencies and release version. |
| src/sequentialthinking/README.md | Documents protocol support and requirements. |
| src/sequentialthinking/package.json | Updates SDK dependencies and version. |
| src/sequentialthinking/lib.ts | Aligns thought-box headers. |
| src/sequentialthinking/index.ts | Serves both protocol eras. |
| src/sequentialthinking/Dockerfile | Uses Node 24 images. |
| src/sequentialthinking/CHANGELOG.md | Records v2.0.0 changes. |
| src/sequentialthinking/__tests__/tools-list.test.ts | Updates protocol expectations. |
| src/sequentialthinking/__tests__/thought-logging.test.ts | Tests thought-box alignment. |
| src/sequentialthinking/__tests__/stdio-smoke.test.ts | Uses SDK v2 client imports. |
| src/sequentialthinking/__tests__/input-schema.test.ts | Updates validation-error expectations. |
| src/sequentialthinking/__tests__/helpers.ts | Migrates test client imports. |
| src/sequentialthinking/__tests__/entry-point.test.ts | Tests revised startup handling. |
| src/memory/README.md | Documents protocol eras and subscriptions. |
| src/memory/package.json | Updates SDK dependencies and version. |
| src/memory/Dockerfile | Uses Node 24 images. |
| src/memory/CHANGELOG.md | Records v2.0.0 changes. |
| src/memory/__tests__/stdio-smoke.test.ts | Uses SDK v2 client imports. |
| src/memory/__tests__/resource.test.ts | Updates notification and error expectations. |
| src/memory/__tests__/helpers.ts | Migrates test harness imports. |
| src/memory/__tests__/entry-point.test.ts | Migrates client imports. |
| src/git/tests/test_server.py | Updates server-loop mocking. |
| src/git/tests/test_entrypoints.py | Uses SDK v2 result attributes. |
| src/git/tests/conftest.py | Normalizes wire-result comparisons. |
| src/git/README.md | Documents protocol eras and repository access. |
| src/git/pyproject.toml | Updates dependencies and release version. |
| src/filesystem/server.ts | Adds era-specific directory handling. |
| src/filesystem/roots-utils.ts | Migrates the Roots type import. |
| src/filesystem/README.md | Recommends command-line access configuration. |
| src/filesystem/package.json | Updates SDK dependencies and version. |
| src/filesystem/index.ts | Adds dual-era stdio startup. |
| src/filesystem/Dockerfile | Uses Node 24 images. |
| src/filesystem/CHANGELOG.md | Records v2.0.0 changes. |
| src/filesystem/__tests__/stdio.test.ts | Updates startup types and expectations. |
| src/filesystem/__tests__/server-tools.test.ts | Updates SDK wire expectations. |
| src/filesystem/__tests__/server-roots.test.ts | Updates Roots error expectations. |
| src/filesystem/__tests__/server-paths.test.ts | Migrates client type imports. |
| src/filesystem/__tests__/helpers.ts | Migrates Roots request registration. |
| src/filesystem/__tests__/bin-smoke.test.ts | Uses SDK v2 client imports. |
| src/fetch/tests/harness.py | Clarifies validation ownership in comments. |
| src/fetch/README.md | Documents SDK v2 and protocol eras. |
| src/fetch/pyproject.toml | Updates dependencies and release version. |
| src/everything/transports/stdio.ts | Adds dual-era startup and cleanup. |
| src/everything/transports/sse.ts | Uses legacy transport and warns of deprecation. |
| src/everything/transports/in-memory-event-store.ts | Migrates SDK type imports. |
| src/everything/tools/trigger-sampling-request.ts | Uses multi-round-trip sampling. |
| src/everything/tools/trigger-resource-update.ts | Adds on-demand resource notifications. |
| src/everything/tools/trigger-long-running-operation.ts | Uses SDK v2 request context. |
| src/everything/tools/trigger-log-messages.ts | Demonstrates request-filtered logging. |
| src/everything/tools/trigger-list-changed.ts | Adds list-change notifications. |
| src/everything/tools/toggle-subscriber-updates.ts | Makes update timers instance-scoped. |
| src/everything/tools/toggle-simulated-logging.ts | Makes logging timers instance-scoped. |
| src/everything/tools/gzip-file-as-resource.ts | Adds era-specific resource persistence. |
| src/everything/tools/get-tiny-image.ts | Migrates SDK imports. |
| src/everything/tools/get-sum.ts | Migrates SDK imports. |
| src/everything/tools/get-structured-content.ts | Migrates SDK imports. |
| src/everything/tools/get-resource-reference.ts | Migrates SDK imports. |
| src/everything/tools/get-resource-links.ts | Migrates SDK imports. |
| src/everything/tools/get-header-params.ts | Demonstrates mirrored headers and JSON schemas. |
| src/everything/tools/get-env.ts | Migrates SDK imports. |
| src/everything/tools/get-annotated-message.ts | Migrates SDK imports. |
| src/everything/tools/echo.ts | Migrates SDK imports. |
| src/everything/server/roots.ts | Removes session-keyed Roots caching. |
| src/everything/server/logging.ts | Returns instance-specific timer cleanup. |
| src/everything/server/context.ts | Adds per-instance state and notification routing. |
| src/everything/resources/templates.ts | Uses structured resource-not-found errors. |
| src/everything/resources/session.ts | Migrates SDK imports. |
| src/everything/resources/index.ts | Registers modern-era minted resources. |
| src/everything/resources/files.ts | Adds static-document cache hints. |
| src/everything/README.md | Documents protocol support and transport choices. |
| src/everything/prompts/simple.ts | Migrates SDK imports. |
| src/everything/prompts/resource.ts | Wraps prompt arguments in a Zod object. |
| src/everything/prompts/index.ts | Migrates SDK imports. |
| src/everything/prompts/completions.ts | Migrates completion imports and schemas. |
| src/everything/prompts/args.ts | Updates prompt schema construction. |
| src/everything/package.json | Updates SDK dependencies and version. |
| src/everything/docs/instructions.md | Documents era-specific client behavior. |
| src/everything/docs/how-it-works.md | Explains revised protocol flows and state. |
| src/everything/docs/extension.md | Updates feature-extension guidance. |
| src/everything/docs/architecture.md | Describes dual-era server architecture. |
| src/everything/Dockerfile | Uses Node 24 images. |
| src/everything/CHANGELOG.md | Records v2.0.0 changes. |
| src/everything/AGENTS.md | Updates registration and state guidance. |
| src/everything/__tests__/tools.test.ts | Updates SDK call and error expectations. |
| src/everything/__tests__/stdio.test.ts | Tests modern connections and startup failures. |
| src/everything/__tests__/sse.test.ts | Tests independent client toggle state. |
| src/everything/__tests__/server.test.ts | Tests repeated Roots synchronization. |
| src/everything/__tests__/server-version.test.ts | Migrates client imports. |
| src/everything/__tests__/roots.test.ts | Tests uncached Roots requests. |
| src/everything/__tests__/resources.test.ts | Updates resource and subscription expectations. |
| src/everything/__tests__/logging.test.ts | Updates instance-scoped logging expectations. |
| src/everything/__tests__/in-memory-event-store.test.ts | Migrates SDK type imports. |
| scripts/version-pr-ci.test.mjs | Guards automated version-PR CI reporting. |
| scripts/smoke-servers.mjs | Migrates smoke checks to SDK v2. |
| scripts/release-notes.test.mjs | Tests release-ledger placement. |
| scripts/release-notes.mjs | Moves ledger beneath the package table. |
| scripts/lib/workflow-gate.test.mjs | Requires the interface-diff stage. |
| scripts/lib/win-shell-args.test.mjs | Tests Windows backslash quoting. |
| scripts/lib/win-shell-args.mjs | Corrects backslash escaping around quotes. |
| RELEASING.md | Documents dispatched CI statuses. |
| package.json | Updates tooling and adds interface validation. |
| docs/contribution-model.md | Links shared write-pacing guidance. |
| .github/workflows/version-packages.yml | Dispatches CI on version branches. |
| .github/workflows/python.yml | Adds dispatch support and commit statuses. |
| .github/workflows/prepare-python-release.yml | Dispatches CI after preparing version PRs. |
| .github/workflows/main-source.yml | Adds release-branch ancestry validation. |
| .claude/skills/testing/SKILL.md | Updates SDK test-harness guidance. |
| .claude/skills/security-advisory/SKILL.md | Updates SDK ownership references. |
| .claude/skills/pre-push-gate/SKILL.md | Documents interface-diff troubleshooting. |
| .claude/skills/pr-flow/SKILL.md | Adds isolated-worktree and cleanup procedures. |
| .claude/skills/local-dev/SKILL.md | Updates the development Node version. |
| .claude/skills/issue-triage/SKILL.md | Paces individual GitHub writes. |
| .claude/skills/client-smoke/SKILL.md | Documents testing both protocol eras. |
| .claude/skills/board-ops/SKILL.md | Slows sustained board-write loops. |
| .changeset/config.json | Customizes changelog attribution. |
Review effort: Balanced
| if jq -e 'all(.[]; .result == "success" or .result == "skipped")' <<<"$NEEDS" >/dev/null; then | ||
| STATE=success DESCRIPTION="Every job passed" | ||
| elif jq -e 'any(.[]; .result == "failure")' <<<"$NEEDS" >/dev/null; then | ||
| STATE=failure DESCRIPTION="A job failed; open the run for details" | ||
| else | ||
| NEWER=$(gh run list --workflow python.yml --event workflow_dispatch \ | ||
| --commit "$GITHUB_SHA" --json databaseId \ | ||
| --jq "[.[] | select(.databaseId > $GITHUB_RUN_ID)] | length") || NEWER=0 | ||
| # A failed lookup counts as no newer run: an error status is | ||
| # better than one left pending. | ||
| if [ "${NEWER:-0}" -gt 0 ]; then | ||
| echo "Superseded by a newer dispatched run, which reports instead" | ||
| exit 0 | ||
| fi | ||
| STATE=error DESCRIPTION="The run was cancelled; dispatch it again" | ||
| fi |

Part of #5159
Milestone merge for v2.0.0:
v2/main→main. No commits of its own; the branch isorigin/v2/mainatbbcc15b3, and the merged tree isorigin/v2/main's (db7a7c07), proven withgit merge-tree --write-tree origin/mainbefore opening.Preparation PRs, all merged to
v2/main:2.0.02026.10.18Release ledger: https://claude.ai/artifact/G5uY8rqMeKgbr5xmpzSCfi (tree
db7a7c07:local:gateandpack:verifypass, 19 / 19 milestone issues verified, 6 non-blocking findings)🤖 Generated with Claude Code