Skip to content

DO NOT MERGE: main-source probe (pass) - #5123

Closed
cliffhall wants to merge 84 commits into
mainfrom
v2/chore/5119-probe-pass
Closed

cliffhall wants to merge 84 commits into
mainfrom
v2/chore/5119-probe-pass

Conversation

@cliffhall

Copy link
Copy Markdown
Member

Part of #5119

Throwaway probe of the Source is v2/main check, now live on main since #5122. Expected: PASS (head is origin/v2/main). Closed unmerged, and its branch deleted, once the check reports.

🤖 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 19 commits October 10, 2026 03:19
… the initial roots

When a roots/list_changed overtakes the initial roots/list, the initial refresh's stale answer is discarded, but it used to release the tool calls waiting on the initial load, which then ran against the command-line directories before the newer roots applied. The overtaking refresh now replaces the initialization gate while the initial load is pending, and waiting calls follow it until it settles (Copilot on #5098).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
…l answer arrives

The failed-overtaking-refresh test released the held initial roots/list before asserting, so it would also pass if callers stayed blocked on it. Assert first, then release for cleanup (Copilot on #5098).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
The failed-overtaking-refresh test returned right after releasing the held initial roots/list, so its answer handling and root validation could race afterEach's teardown. Wait for the stale answer to be discarded first (Copilot on #5099).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
…stem-roots-refresh-order

fix(filesystem): apply only the newest roots refresh's answer
A runtime roots/list_changed refresh now replaces the initialization barrier, as the initial load and an overtaking refresh already did, so tool calls that arrive while its roots/list is pending wait for the result instead of running against the previous allow-list, which could still include a root the client had just withdrawn. The initialRootsPending flag is no longer needed.

Closes #5101

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
…list is sent

Each roots refresh (and the initial load) now replaces the initialization barrier before it sends roots/list, a microtask later, rather than just after. The SDK currently dispatches the client's roots/list handler asynchronously, so a newer change announced from that handler already lands after the older barrier is installed (verified: removing the deferral fails no test); the ordering is now guaranteed by the server rather than by that SDK detail (Copilot on #5103). Tests: a call queued behind a runtime refresh that fails is released against the current roots (Copilot on #5102); a refresh whose roots/list answer announces another change keeps the newest barrier (documents the case; passes with or without the deferral today). Comment wording fixed (Copilot on #5102).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
…erring it

Deferring initialize() a microtask (so its barrier is installed before roots/list is sent) also deferred its generation claim. The initial load now takes its generation synchronously in oninitialized and only its request is deferred, so a roots/list_changed handled before that request runs always counts as newer (Copilot on #5102). The SDK currently runs the deferred initial load before a later notification's handler, so this ordering is not reachable today (moving the claim back fails no test); the claim makes it explicit. New test: an update announced right after initialize wins over the held initial roots. Also renames the re-entrant announcement test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
Tool calls waited on the refresh promise itself, so a call that started waiting on refresh A stayed blocked on A's roots/list even after a newer refresh B had installed itself and applied the client's current roots; a slow or unanswered A stalled calls until its request timed out. The barrier is now separate from the refresh: each refresh installs a new barrier before it sends roots/list and settles it when it finishes, and installing one settles the barrier it replaces, so waiting calls wake and move on to the newest. This also makes the microtask deferral from the previous commits unnecessary (the barrier is installed synchronously). New test: a call waiting on an unanswered older refresh completes once a newer one finishes; it times out with the previous barrier (Copilot on #5103).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
…stem-roots-refresh-barrier

fix(filesystem): hold tool calls while any roots refresh is pending
… one

OIDC trusted publishing needs npm >= 11.5.1, and Node 22 bundles npm 10.x, so publish-npm installed npm@11.20.0 next to id-token: write. It now runs an exactly pinned Node 24.21.0, whose bundled npm (11.19.0) meets the floor, and installs nothing; a step fails the job before publishing if the bundled npm is ever below 11.5.1. The build jobs keep Node 22. The release skill's note on pinning moves from the npm CLI to the Node release.

Closes #5104

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
…ll shape

scripts/release-npm-floor.test.mjs reads publish-npm out of release.yml, as release-dist-tag.test.mjs does, and runs the npm floor step with a stub npm on PATH: 11.5.1, 11.6.0, 11.19.0 and 12.0.0 pass, 11.5.0, 11.4.9, 10.9.9 and 9.0.0 fail. It also asserts an exact Node pin whose bundled npm meets the floor, the check ahead of the download and the publish, and no step that installs or runs a fetched package (comment lines ignored). The previous workflow fails all five; loosening the floor to 11.5.0 fails the refusal test (Copilot on #5105 and #5106).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
npm publish reads a bare dir/file argument as GitHub owner/repo shorthand and tries to clone it over SSH; the MCP Inspector's first release through the same split publish job failed that way (modelcontextprotocol/inspector#2551). release.yml already passes ./release-artifact/*.tgz; this asserts it, so the ./ cannot be lost in an edit. Reproduced locally with Node 24.21.0's npm: the bare path exits 128 on 'git ls-remote ssh://git@github.com/release-artifact/...', the ./ path dry-run-publishes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
…se-update-branch-warning

docs(release): warn against Update branch on the milestone merge PR
…ase-publish-bundled-npm

ci(release): publish with Node 24's bundled npm instead of installing one
The fetch tool set no tool annotations, unlike every tool in the git and time servers, and AGENTS.md requires them on every tool that is added or changed. It now declares readOnlyHint: true, destructiveHint: false, idempotentHint: true and openWorldHint: true (the values proposed on #3572), so clients can apply allow-reads/gate-sends policies to it. Protocol test pins them in tools/list; README lists them.

Closes #3572

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
…tool-annotations

fix(fetch): annotate the fetch tool
A one-time, recorded exception to "all work lands on v2/main" (#4968): v1.0.0
shipped from v2/release/1.0.0, so merging it here makes the release line an
ancestor of v2/main and lets the v2.0.0 milestone merge into main be a pure
merge.

Conflicts resolved:
- src/*/CHANGELOG.md: the release branch's 1.0.0 entries, as published.
- package.json overrides: port the release-only fast-uri ^3.1.8 pin (a83e890).
- package.json / src/*/package.json, src/{fetch,git}/pyproject.toml, uv.lock,
  package-lock.json: v2/main's SDK v2 dependencies; every release-branch
  security floor and lock bump is already present on v2/main.
- src/fetch server.py, src/time tests/test_server.py,
  src/filesystem __tests__/server-roots.test.ts: v2/main's SDK v2 spelling of
  the same fix (#3572, #5060, #5097).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
The SDK v2 migration did not ship in 1.0.0, so its four major changesets
come back with their original content (0c505a6^). The three filesystem
roots changesets describe fixes cherry-picked into 1.0.0 (#5094, #5097,
#5101) and would otherwise be listed again in 2.0.0's changelog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: cliffhall <cliff@futurescale.com>
…ncile-release-1.0.0

Reconcile v2/main with the v1.0.0 release branch: changesets, changelogs, merge of v2/release/1.0.0
Copilot AI balanced review requested due to automatic review settings October 11, 2026 05:11
@cliffhall cliffhall added the v2 label Oct 11, 2026
@changeset-bot

changeset-bot Bot commented Oct 11, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 9245b93

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 4 packages
Name Type
@modelcontextprotocol/server-everything Major
@modelcontextprotocol/server-filesystem Major
@modelcontextprotocol/server-memory Major
@modelcontextprotocol/server-sequential-thinking Major

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another 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 e2f223fa6576 (Merge 9245b93 into bbb701e)

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

Tools Prompts Resources Resource templates
Base 13 4 7 2
Head 12 4 7 2

initialize

--- base/initialize.json
+++ target/initialize.json

- capabilities.tasks: {"cancel":{},"list":{},"requests":{"tools":{"call":{}}}}

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.

## 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`

## 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[simulate-research-query]: {"annotations":{"destructiveHint":false,"openWorldHint":false},"description":"Simulates a deep research operation that gathers, analyzes, and synthesizes information. Demonstrates MCP task-based opera...
- 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].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[toggle-simulated-logging].execution: {"taskSupport":"forbidden"}
- tools[toggle-simulated-logging].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[toggle-simulated-logging].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- tools[toggle-subscriber-updates].execution: {"taskSupport":"forbidden"}
- tools[toggle-subscriber-updates].inputSchema.$schema: "http://json-schema.org/draft-07/schema#"
+ tools[toggle-subscriber-updates].inputSchema.$schema: "https://json-schema.org/draft/2020-12/schema"
- 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"

prompts

--- base/prompts.json
+++ target/prompts.json

+ prompts[args-prompt].arguments[state].description: "Name of the state"

Updated by this run for 9245b93cdcd511b24a77d22fcae8257349a639e4.

@cliffhall

Copy link
Copy Markdown
Member Author

Probe done; see #5120 for the result. Closing unmerged.

@cliffhall cliffhall closed this Oct 11, 2026
@cliffhall
cliffhall deleted the v2/chore/5119-probe-pass branch October 11, 2026 05:12

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

This was an intentional 121-file, 84-commit guard probe that has already passed and been closed unmerged as designed.

0 open findings

What changed in this PR

This throwaway PR validated that the main source guard accepts a head equal to v2/main. The check passed, and PR #5123 was closed unmerged as intended; the large diff is the accumulated v2/main delta rather than probe-specific work.

Changes:

  • Verified the Source is v2/main check succeeds.
  • Exposed 121 existing v2/main changes against main.
  • Closed the probe without merging.
File Description
.changeset/​everything-sdk-v2.md Records Everything’s SDK v2 breaking release.
.changeset/​filesystem-sdk-v2.md Records Filesystem’s SDK v2 breaking release.
.changeset/​memory-sdk-v2.md Records Memory’s SDK v2 breaking release.
.changeset/​sequentialthinking-sdk-v2.md Records Sequential Thinking’s SDK v2 breaking release.
.claude/​skills/​client-smoke/​SKILL.md Updates protocol-era smoke guidance.
.claude/​skills/​pre-push-gate/​SKILL.md Documents the interface-diff gate.
.claude/​skills/​release/​SKILL.md Adds release-branch recovery guidance.
.claude/​skills/​security-advisory/​SKILL.md Updates TypeScript SDK package references.
.claude/​skills/​testing/​SKILL.md Updates test harness guidance for SDK v2.
.github/​workflows/​everything-mcp-diff.yml Adds Everything interface-diff CI.
AGENTS.md Documents the expanded quality gate.
docs/​quality-gate.md Describes interface-diff behavior and CI.
package-lock.json Locks SDK v2 and interface-diff dependencies.
package.json Adds SDK v2 tooling and the new gate stage.
scripts/​interface-diff.mjs Implements Everything interface comparison.
scripts/​interface-diff.test.mjs Tests interface-diff classification and reporting.
scripts/​lib/​workflow-gate.test.mjs Requires interface-diff in the local gate.
scripts/​smoke-servers.mjs Ports smoke clients to SDK v2.
src/​everything/​README.md Documents Node requirements and temporary task removal.
src/​everything/​__tests__/​harness.ts Ports the in-process harness to SDK v2.
src/​everything/​__tests__/​in-memory-event-store.test.ts Updates SDK message types.
src/​everything/​__tests__/​registrations.test.ts Updates capability-registration expectations.
src/​everything/​__tests__/​resources.test.ts Updates SDK v2 resource errors.
src/​everything/​__tests__/​roots.test.ts Ports Roots handlers and errors.
src/​everything/​__tests__/​sampling-elicitation.test.ts Ports sampling and elicitation tests.
src/​everything/​__tests__/​server-version.test.ts Ports client and transport imports.
src/​everything/​__tests__/​server.test.ts Ports server factory tests.
src/​everything/​__tests__/​sse.test.ts Ports the legacy SSE client test.
src/​everything/​__tests__/​stdio.test.ts Ports stdio transport tests.
src/​everything/​__tests__/​streamable-http.test.ts Ports Streamable HTTP tests.
src/​everything/​__tests__/​surface.test.ts Updates the advertised tool surface.
src/​everything/​__tests__/​tasks.test.ts Preserves skipped task characterization tests.
src/​everything/​__tests__/​tools.test.ts Updates SDK v2 tool-error expectations.
src/​everything/​docs/​features.md Documents temporary task unavailability.
src/​everything/​docs/​instructions.md Removes unavailable task tools.
src/​everything/​docs/​structure.md Updates package and file structure documentation.
src/​everything/​package.json Replaces SDK v1 with SDK v2 packages.
src/​everything/​prompts/​args.ts Ports prompt schemas to Zod objects.
src/​everything/​prompts/​completions.ts Ports completable prompt registration.
src/​everything/​prompts/​index.ts Updates the server import.
src/​everything/​prompts/​resource.ts Ports resource prompt schemas.
src/​everything/​prompts/​simple.ts Updates the server import.
src/​everything/​resources/​files.ts Updates the server import.
src/​everything/​resources/​index.ts Updates the server import.
src/​everything/​resources/​session.ts Ports resource types.
src/​everything/​resources/​subscriptions.ts Ports subscription handlers.
src/​everything/​resources/​templates.ts Ports resource templates and completion.
src/​everything/​server/​index.ts Migrates server construction and removes task capability.
src/​everything/​server/​logging.ts Ports logging types.
src/​everything/​server/​roots.ts Ports Roots notification handling.
src/​everything/​tools/​echo.ts Updates SDK imports.
src/​everything/​tools/​get-annotated-message.ts Updates SDK imports.
src/​everything/​tools/​get-env.ts Updates SDK imports.
src/​everything/​tools/​get-resource-links.ts Updates SDK imports.
src/​everything/​tools/​get-resource-reference.ts Updates SDK imports.
src/​everything/​tools/​get-roots-list.ts Ports handler context usage.
src/​everything/​tools/​get-structured-content.ts Ports content types.
src/​everything/​tools/​get-sum.ts Updates SDK imports.
src/​everything/​tools/​get-tiny-image.ts Updates SDK imports.
src/​everything/​tools/​gzip-file-as-resource.ts Ports resource types.
src/​everything/​tools/​index.ts Unregisters removed experimental task tools.
src/​everything/​tools/​simulate-research-query.ts Removes the SDK v1 task implementation.
src/​everything/​tools/​toggle-simulated-logging.ts Ports handler context usage.
src/​everything/​tools/​toggle-subscriber-updates.ts Ports handler context usage.
src/​everything/​tools/​trigger-elicitation-request-async.ts Removes the SDK v1 async task tool.
src/​everything/​tools/​trigger-elicitation-request.ts Ports elicitation requests.
src/​everything/​tools/​trigger-long-running-operation.ts Ports progress notifications.
src/​everything/​tools/​trigger-sampling-request-async.ts Removes the SDK v1 async task tool.
src/​everything/​tools/​trigger-sampling-request.ts Ports sampling requests.
src/​everything/​tools/​trigger-url-elicitation.ts Ports URL elicitation requests.
src/​everything/​transports/​in-memory-event-store.ts Ports event-store types.
src/​everything/​transports/​sse.ts Uses the legacy SSE bridge.
src/​everything/​transports/​stdio.ts Ports the stdio transport.
src/​everything/​transports/​streamableHttp.ts Uses the Node Streamable HTTP transport.
src/​fetch/​README.md Documents the Python SDK v2 requirement.
src/​fetch/​pyproject.toml Adds validation and MCP v2 dependencies.
src/​fetch/​src/​mcp_server_fetch/​server.py Ports Fetch to the Python SDK v2 API.
src/​fetch/​tests/​harness.py Updates validation documentation.
src/​fetch/​tests/​test_protocol.py Updates protocol tests for SDK v2.
src/​fetch/​uv.lock Locks Fetch’s Python SDK v2 dependencies.
src/​filesystem/​README.md Documents the Node requirement.
src/​filesystem/​__tests__/​bin-smoke.test.ts Ports the binary smoke client.
src/​filesystem/​__tests__/​helpers.ts Ports the in-process harness.
src/​filesystem/​__tests__/​server-paths.test.ts Updates client types.
src/​filesystem/​__tests__/​server-roots.test.ts Ports Roots tests and errors.
src/​filesystem/​__tests__/​server-tools.test.ts Updates SDK v2 tool behavior tests.
src/​filesystem/​__tests__/​stdio.test.ts Ports stdio server types.
src/​filesystem/​index.ts Ports the stdio entry point.
src/​filesystem/​package.json Replaces SDK v1 with SDK v2 packages.
src/​filesystem/​roots-utils.ts Updates the Root type import.
src/​filesystem/​server.ts Ports server and Roots handling.
src/​git/​README.md Documents the Python SDK v2 requirement.
src/​git/​pyproject.toml Adds validation and MCP v2 dependencies.
src/​git/​src/​mcp_server_git/​server.py Ports Git to the Python SDK v2 API.
src/​git/​tests/​conftest.py Updates wire serialization for SDK v2.
src/​git/​tests/​test_entrypoints.py Updates result field naming.
src/​git/​tests/​test_protocol.py Updates protocol and era tests.
src/​git/​tests/​test_server.py Updates serve-loop tests.
src/​git/​uv.lock Locks Git’s Python SDK v2 dependencies.
src/​memory/​README.md Documents the Node requirement.
src/​memory/​__tests__/​entry-point.test.ts Ports client and transport imports.
src/​memory/​__tests__/​helpers.ts Ports the in-process harness.
src/​memory/​__tests__/​resource.test.ts Ports resource notification tests.
src/​memory/​__tests__/​stdio-smoke.test.ts Ports the stdio smoke client.
src/​memory/​__tests__/​tools.test.ts Updates schemas and SDK v2 errors.
src/​memory/​index.ts Ports schemas and subscription handlers.
src/​memory/​package.json Replaces SDK v1 with SDK v2 packages.
src/​sequentialthinking/​README.md Documents the Node requirement.
src/​sequentialthinking/​__tests__/​entry-point.test.ts Ports client and transport imports.
src/​sequentialthinking/​__tests__/​helpers.ts Ports the in-process harness.
src/​sequentialthinking/​__tests__/​input-schema.test.ts Updates SDK v2 validation messages.
src/​sequentialthinking/​__tests__/​stdio-smoke.test.ts Ports the stdio smoke client.
src/​sequentialthinking/​__tests__/​tools-list.test.ts Updates schemas and advertised metadata.
src/​sequentialthinking/​index.ts Ports server registration and Zod schemas.
src/​sequentialthinking/​package.json Replaces SDK v1 with SDK v2 packages.
src/​time/​README.md Documents the Python SDK v2 requirement.
src/​time/​pyproject.toml Adds validation and MCP v2 dependencies.
src/​time/​src/​mcp_server_time/​server.py Ports Time to the Python SDK v2 API.
src/​time/​tests/​test_protocol.py Updates protocol and era tests.
src/​time/​tests/​test_server.py Updates the renamed SDK error type.
src/​time/​uv.lock Locks Time’s Python SDK v2 dependencies.

🧠 Review effort: Balanced


💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

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.

4 participants