Verify an MCP server before release by exercising a real protocol session, comparing runtime capabilities with source and documentation, testing failure paths, and recording reproducible evidence. Use when shipping or reviewing an MCP server, tool, resource, prompt, catalog, or install path.
Test the server that users will run. A schema review or a passing unit test is not runtime evidence.
This skill complements security review. It focuses on protocol behavior, published-contract drift, transport correctness, and reproducible release evidence.
initialize, notifications/initialized, discovery, and invocation in
the same session. A new process is a new STDIO session.Identify:
Prefer repository-native commands. Inspect package.json, pyproject.toml,
Makefile, CI workflows, and contributor instructions before inventing a test
harness.
Build the candidate and start the documented entry point with test-safe configuration. Capture:
For STDIO, stdout is protocol-only. Logs, banners, and stack traces belong on stderr. For HTTP transports, record the status, relevant MCP headers, and session identifier handling without printing credentials.
If the server cannot start from its documented instructions, report that as a release failure and preserve the startup error verbatim.
Run this sequence through a real MCP client or the repository's integration harness:
initialize with a protocol version the server claims to support.notifications/initialized.ping.tools/listresources/listresources/templates/listprompts/listDo not send post-initialization requests through separate one-shot processes. That accidentally tests several incomplete sessions instead of one valid session.
Build four inventories from current evidence:
| Surface | Evidence | |---|---| | Source | Registered tool, resource, template, and prompt definitions | | Runtime | Results from the live discovery methods | | Generated metadata | Catalogs, manifests, or generated indexes | | Documentation | README, reference pages, and install output |
Compare by stable identifier. Report:
Regenerate derived files with the repository's own build command, then fail if the working tree still contains unexplained generated changes.
For every discovered item, verify the runtime definition against its source:
inputSchema defines types, required fields, enums, and bounds where needed.outputSchema when one is published.prompts/get returns usable messages for valid arguments.At minimum, probe:
Verify that each response has the correct request ID, a useful error message, and no successful side effect. For STDIO, also confirm every stdout line is a complete protocol message and a healthy session leaves stderr clean unless the server explicitly documents diagnostic output.
When the project publishes an install command:
An install string that was only inspected is unverified.
Use this format:
# MCP Release QA
Candidate: [commit]
Transport: [STDIO | Streamable HTTP | SSE]
Verdict: PASS | PASS WITH CAVEATS | FAIL
## Commands and results
- `[exact command]` — [exit status and result]
## Session transcript
- initialize: [result]
- discovery: [result]
- representative calls: [result]
- negative paths: [result]
## Parity
| Identifier | Source | Runtime | Metadata | Docs | Result |
|---|---|---|---|---|---|
## Findings
| Severity | Evidence | Impact | Narrowest fix |
|---|---|---|---|
## Missing evidence
- [check that could not run and why]
Use FAIL for a server that cannot start, complete a valid session, keep the
transport parseable, or safely reject invalid input. Use PASS WITH CAVEATS
only for bounded documentation or metadata drift that does not misrepresent a
dangerous capability. Otherwise use PASS.
Copy a source-pinned command for your client. You run it yourself.
Destination: .claude/skills/mcp-release-qa · pinned to the source commit
# Run from your project root
git clone https://github.com/github/awesome-copilot.git .skillboard-tmp
git -C .skillboard-tmp checkout f11a4e441c5ff061b4f8ae37952be8c602e4034e
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/skills/mcp-release-qa" ".claude/skills/"
rm -rf .skillboard-tmpReview the source before running. This copies files into your project; it is not a one-click install and does not verify runtime safety.
sudo apt update && sudo apt install -y gitnpm install -g @anthropic-ai/claude-code# Run from your project root
git clone https://github.com/github/awesome-copilot.git .skillboard-tmp
git -C .skillboard-tmp checkout f11a4e441c5ff061b4f8ae37952be8c602e4034e
mkdir -p ".claude/skills"
cp -r ".skillboard-tmp/skills/mcp-release-qa" ".claude/skills/"
rm -rf .skillboard-tmpDestination: .claude/skills/mcp-release-qa
Scanner static-checks@0.1.0 · commit f11a4e441c5f. Static checks cannot prove runtime safety – review the source and the exact diff before installing. How checks work.
No static rules matched. This is not a safety guarantee.