Skip to content

Release v2.0.0: merge v2/main into main - #5166

Open
cliffhall wants to merge 142 commits into
mainfrom
v2/chore/5159-release-v2.0.0
Open

cliffhall wants to merge 142 commits into
mainfrom
v2/chore/5159-release-v2.0.0

Conversation

@cliffhall

@cliffhall cliffhall commented Oct 18, 2026 •

Copy link
Copy Markdown
Member

Part of #5159

Milestone merge for v2.0.0: v2/main → main. No commits of its own; the branch is origin/v2/main at bbcc15b3, and the merged tree is origin/v2/main's (db7a7c07), proven with git merge-tree --write-tree origin/main before opening.

⚠️ Merge with Create a merge commit. Never squash or rebase, and do not press Update branch: either puts a commit on one side that the other does not have.

Preparation PRs, all merged to v2/main:

Release ledger: https://claude.ai/artifact/G5uY8rqMeKgbr5xmpzSCfi (tree db7a7c07: local:gate and pack:verify pass, 19 / 19 milestone issues verified, 6 non-blocking findings)

🤖 Generated with Claude Code

cliffhall and others added 30 commits October 7, 2026 12:22
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>
cliffhall and others added 22 commits October 13, 2026 00:50
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
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
Copilot AI balanced review requested due to automatic review settings October 18, 2026 23:26
@cliffhall cliffhall added the v2 label Oct 18, 2026
@changeset-bot

changeset-bot Bot commented Oct 18, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: bbcc15b

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@github-actions

Copy link
Copy Markdown
Contributor

everything: MCP interface diff

Base: bbb701e7ac1e (Merge pull request #5122 from modelcontextprotocol/v2/chore/5119-main-source-bootstrap)
Head: the build in this checkout, at 8f160f47faf6 (Merge bbcc15b into bbb701e)

⚠️ Interface changes detected in 6 part(s) of the interface. Review them below to confirm they are intended.

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.

@cliffhall cliffhall linked an issue Oct 18, 2026 that may be closed by this pull request
5 of 7 tasks

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 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

Comment on lines +240 to +255
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
@cliffhall cliffhall mentioned this pull request Oct 18, 2026
5 of 7 tasks

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Release v2.0.0

4 participants