MCPMon - Model Context Protocol Monitor
A VS Code extension for hardcore MCP (Model Context Protocol) debugging and monitoring. MCPMon provides real-time protocol message capture, interactive server exploration, and comprehensive debugging tools for MCP implementations.
Built from scratch without dependencies on official MCP packages - ensuring reliable operation even when upstream client libraries encounter issues. Our ground-up implementation of the MCP specification provides robust protocol handling across all transport types.

Real-time protocol monitoring with request/response correlation, tool execution, and message validation
Architecture
MCPMon implements the complete MCP client stack independently:
- Custom JSON-RPC 2.0 implementation - Full spec compliance without external dependencies
- Native MCP protocol handling - Direct implementation of initialize, tools/list, resources/list, and all core methods
- Multi-transport support - STDIO processes, Streamable HTTP (2025-06-18), and legacy HTTP/SSE
- Independent message validation - Built-in protocol compliance checking
- Request/response correlation - Proper message pairing and flow tracking
This approach ensures MCPMon remains functional regardless of changes or issues in official MCP client libraries, whilst providing deeper insight into the protocol mechanics.
Features
- 🔍 Real-time Protocol Monitoring - Capture and analyze all JSON-RPC messages
- 🛠️ Interactive Tool Calling - Discover and execute MCP tools with dynamic parameter forms
- 📡 Multi-Transport Support - Connect via STDIO processes, Streamable HTTP, or legacy HTTP/SSE endpoints
- ⚙️ Server Configuration UI - Add and manage custom MCP servers
- 📊 Message Analysis - Validate JSON-RPC compliance and track message correlation
- 🚀 Live Connection Status - Real-time server health monitoring
Installation
From VS Code Marketplace
Done! Thanks!
Quick Start
Open MCPMon Panel
- Press
Ctrl+Shift+P
(or Cmd+Shift+P
on Mac)
- Type "MCPMon: Show Protocol Viewer"
- Press Enter
Connect to a Server
- Use the pre-configured servers or add your own
- Click the connect button next to any server
- Watch real-time messages in the protocol viewer
Explore Server Capabilities
- Once connected, use "List Tools" and "List Resources" buttons
- Click "Call Tool" to interactively execute server tools
- All protocol exchanges are captured and displayed
Server Configuration
Adding STDIO Servers
STDIO servers run as child processes and communicate via stdin/stdout:
{
"name": "My Custom Server",
"type": "stdio",
"command": "python",
"args": ["-m", "my_mcp_server"],
"env": {
"API_KEY": "your-api-key"
},
"cwd": "/path/to/server"
}
Adding Streamable HTTP Servers (Recommended)
Streamable HTTP servers use the new MCP 2025-06-18 transport specification:
{
"name": "My Streamable HTTP Server",
"type": "streamable-http",
"url": "https://example.com/mcp",
"authToken": "your-bearer-token-here",
"protocolVersion": "2025-06-18"
}
Adding HTTP/SSE Servers (Legacy - Deprecated)
⚠️ Deprecated as of 2025-06-18: Use Streamable HTTP instead. This legacy transport uses separate /message
and /sse
endpoints.
Legacy HTTP/SSE servers communicate via separate REST endpoints with optional Server-Sent Events:
{
"name": "My HTTP Server",
"type": "http",
"url": "http://localhost:3000",
"authToken": "your-bearer-token-here",
"useSSE": true
}
Worked Examples
Example 1: Filesystem Server (STDIO)
The MCP Filesystem server provides file operations:
Server Configuration:
- Name:
Filesystem Server
- Type:
stdio
- Command:
npx
- Args:
["@modelcontextprotocol/server-filesystem", "/tmp"]
What you can do:
- List available tools:
read_file
, write_file
, create_directory
, etc.
- Call
read_file
with path parameter to read file contents
- Call
write_file
to create or modify files
- All file operations are captured in the protocol viewer
Example 2: Git Server (STDIO)
The MCP Git server provides Git repository operations:
Server Configuration:
- Name:
Git Server
- Type:
stdio
- Command:
npx
- Args:
["@modelcontextprotocol/server-git", "--repository", "."]
What you can do:
- List tools:
git_status
, git_diff
, git_log
, git_commit
, etc.
- Call
git_status
to see repository status
- Call
git_diff
with file paths to see changes
- Execute Git commands and see results in real-time
Example 3: SQLite Server (STDIO)
The MCP SQLite server provides database operations:
Server Configuration:
- Name:
SQLite Server
- Type:
stdio
- Command:
npx
- Args:
["@modelcontextprotocol/server-sqlite", "--db-path", "./test.db"]
What you can do:
- List tools:
execute_query
, describe_table
, list_tables
- Call
list_tables
to see available database tables
- Call
execute_query
with SQL to run database queries
- Monitor all SQL operations via the protocol viewer
Understanding the Protocol Viewer
The protocol viewer shows all MCP communication in real-time:
Message Types
- 🟢 Request - Client asking server to do something
- 🔵 Response - Server replying to a request
- 🟡 Notification - One-way message (no response expected)
Message Details
- Timestamp - When the message was sent/received
- Direction -
client->server
or server->client
- Correlation ID - Links requests with their responses
- Raw JSON - Complete JSON-RPC message
- Validation - Whether the message is valid JSON-RPC 2.0
Interactive Features
- List Tools - Discover what tools the server offers
- List Resources - See what resources are available
- Call Tool - Execute tools with parameter forms
- Message Filtering - Search and filter protocol messages
Troubleshooting
Server Won't Connect
STDIO Issues:
- Verify the command and arguments are correct
- Check that the server executable is in your PATH
- Look at stderr output in the protocol viewer
- Ensure required dependencies are installed
HTTP Issues:
- Verify the server URL is accessible
- Check that the server implements required endpoints (
/health
, /message
)
- For SSE: ensure
/sse
endpoint is available
- Look for CORS issues in browser dev tools
- If using auth tokens, verify the token is valid and has proper permissions
- Check for 401 Unauthorized responses in the protocol viewer
No Messages Appearing
- Check the connection status indicator
- Verify the server is responding to the initialize request
- Look for error messages in the VS Code developer console
- Try disconnecting and reconnecting
- Ensure the server responds to
tools/list
requests
- Check that tool parameters match the server's schema
- Verify the server implements the
tools/call
method
- Look for validation errors in the protocol messages
License
MIT License - see LICENSE file for details
Support
- Report issues on GitHub
- Check VS Code developer console for errors
- Enable debug logging for detailed troubleshooting