mcp-tester
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-testerrun the automated control test for all domains"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-tester
Instrumented MCP server for testing client conformance to */list_changed notifications and other protocol features.
Why
PR mcaps-microsoft/msx-mcp#321 proposed dynamic tool surfacing via notifications/tools/list_changed. The PR was closed with the claim that "Copilot CLI caches tools/list at session start and ignores notifications/tools/list_changed" -- but no instrumented experiment was ever run to prove or disprove this.
This repo provides the apparatus to test that claim -- and any MCP client's conformance to list_changed -- with real evidence.
Related MCP server: MCP Test Server
What It Does
Probe MCP Server (
src/server.ts) -- A self-instrumenting MCP server that logs every JSON-RPC message on its stdio pipe. It exposes alpha-state tools, resources, and prompts, plus trigger tools that swap them to beta-state and send the corresponding*/list_changednotification.Automated Client Driver (
src/driver.ts) -- An SDK-based MCPClientthat drives the server through the full mutation cycle. This is the control: it proves the protocol works when both endpoints honor the spec. Any client that diverges from this behavior is provably non-conformant.Log Analyzer (
src/analyze.ts) -- Reads the JSONL log and emits a markdown evidence table answering specific questions: Did the client receive the notification? Did it re-fetch? Can it call the new item? Can it still call the removed item?Human Protocol (
PROTOCOL.md) -- Step-by-step instructions for running the same test against Copilot CLI or any other MCP client.
Quick Start
git clone https://github.com/ericchansen/mcp-tester.git
cd mcp-tester
npm install
npm run buildRun the automated control (SDK client)
npm run driver -- --domain allThis spawns the probe server, runs the full mutation protocol for tools, resources, and prompts, and reports results. You should see all three domains pass with full conformance.
Analyze a log
npm run analyze -- path/to/log.jsonl --domain toolsTesting Your Own MCP Client
See PROTOCOL.md for step-by-step instructions on testing Copilot CLI or any other MCP client against this probe.
Repo Layout
mcp-tester/
|-- README.md # This file
|-- PROTOCOL.md # Human-driven test procedure
|-- LICENSE # MIT
|-- package.json
|-- tsconfig.json
|-- src/
| |-- server.ts # Probe MCP server (stdio)
| |-- logger.ts # JSONL stdio tap + log writer
| |-- analyze.ts # CLI: parses log -> markdown evidence table
| +-- driver.ts # CLI: spawns server, drives it via SDK Client
+-- results/
+-- copilot-cli/
+-- .gitkeep # Committed experiment results go hereHow the Probe Works
Initial State (Alpha)
Domain | Alpha Item |
Tools |
|
Resources |
|
Prompts |
|
Plus five permanent tools: mcptester_mutate_tools, mcptester_mutate_resources, mcptester_mutate_prompts, mcptester_status.
After Mutation (Beta)
When a mcptester_mutate_* tool is called:
The alpha item is removed (via SDK
handle.remove())The beta item is registered
The SDK auto-sends the corresponding
notifications/*/list_changeddebouncedNotificationMethodscoalesces remove + register into a single notification
Domain | Beta Item |
Tools |
|
Resources |
|
Prompts |
|
Logging
Every JSON-RPC message (inbound and outbound) is logged to a JSONL file. The logger taps process.stdin and process.stdout via Transform streams installed before the SDK transport, so it sees every byte without interfering with the protocol.
Limitations
stdio transport only -- no HTTP/SSE testing yet
Three
list_changedflows only -- future tests planned for sampling, elicitation, roots, progress, completionsSingle-server testing -- tests one MCP server connection at a time
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseBqualityDmaintenanceA mock MCP server for testing MCP client implementations and development workflows. Supports tools, prompts, and resources across multiple transport protocols (stdio, HTTP, SSE).1MIT
- AlicenseNot gradedqualityDmaintenanceA comprehensive testing server for validating MCP scanner tools and implementations, providing diverse tools, resources, and prompts that exercise various aspects of the Model Context Protocol specification.5 npmMIT
- AlicenseNot gradedqualityDmaintenanceA test server that exercises all MCP protocol features including prompts, tools, resources, and sampling, intended for MCP client builders.214,312 npm-
- AlicenseNot gradedqualityDmaintenanceA test MCP server that exercises all MCP protocol features, including prompts, tools, resources, and sampling, for client builders.214,312 npm-