MCPHawk is a Logging & Monitoring solution for MCP traffic, providing deep visibility into MCP client-server interactions
Project description
MCPHawk is a new Logging & Monitoring solution for Model Context Protocol (MCP) traffic, providing deep visibility into MCP client-server interactions. It started off as a mix between Wireshark and mcpinspector, purpose-built for the MCP ecosystem, and is now slowly turning into something more.
Key Capabilities:
- Protocol-Aware Capture: Understands MCP's JSON-RPC 2.0 transport layer, capturing and reassembling messages from stdio pipes and HTTP streams
- Transport Agnostic: Monitors MCP traffic across all standard transports (stdio, HTTP Streaming, HTTP+SSE)
- Full Message Reconstruction: Advanced stream reassembly handles fragmented packets, chunked HTTP transfers, SSE streams, and stdio pipes
Core Features
🔍 MCP Protocol Analysis
- Complete JSON-RPC 2.0 Support: Correctly identifies and categorizes all MCP message types
- Requests: Method calls with unique IDs for correlation
- Responses: Success results and error responses with matching IDs
- Notifications: Fire-and-forget method calls without IDs
- Batch Operations: Support for JSON-RPC batch requests/responses
- Transport-Specific Handling: See MCP Transport Support table below for full details
- Chunked Transfer: Handles HTTP chunked transfer encoding transparently
- Protocol Compliance: Validates JSON-RPC 2.0 structure and MCP-specific extensions
🚀 Advanced Capture Capabilities
- Auto-Discovery Mode: Intelligently detects MCP traffic on any port using pattern matching
- TCP Stream Reassembly: Reconstructs complete messages from fragmented packets
- Multi-Stream Tracking: Simultaneously monitors multiple MCP client-server connections
- IPv4/IPv6 Dual Stack: Native support for both IP protocols
- Zero-Copy Architecture: Efficient packet processing without client/server overhead
📊 Analysis & Visualization
- Real-Time Web Dashboard: Live traffic visualization with WebSocket updates
- Message Flow Visualization: Track request-response pairs using JSON-RPC IDs
- Traffic Statistics: Method frequency, error rates, response times
- Search & Filter: Query by method name, message type, content patterns
- Export Capabilities: Save captured sessions for offline analysis
🛠️ Developer Experience
- MCP Server Integration: Query captured data using MCP protocol itself
- FastMCP-based implementation for maximum compatibility
- Available tools:
query_traffic,search_traffic,get_stats,list_methods - Supports both stdio and HTTP transports
- Multiple Interfaces:
- Web UI for interactive exploration
- CLI for scripting and automation
- MCP server for programmatic access
- Flexible Deployment:
- Standalone sniffer mode
- Integrated web + sniffer
- Historical log analysis without active capture
MCP Transport Support
| Official MCP Transport | Protocol Version | Capture Support | Details |
|---|---|---|---|
| stdio | All versions | ✅ Full | Process wrapper transparently captures stdin/stdout between client and server |
| HTTP Streaming | 2025-03-26+ | ✅ Full | HTTP POST with optional SSE streaming responses |
| HTTP+SSE (deprecated) | 2024-11-05 | ✅ Full | Legacy transport with separate SSE endpoint |
Note: Raw TCP traffic with JSON-RPC is also captured and marked as "unknown" transport type
Comparison with Similar Tools
| Feature | MCPHawk | mcpinspector | Wireshark |
|---|---|---|---|
| Passive sniffing (no proxy needed) | ✅ | ❌ | ✅ |
| MCP/JSON-RPC protocol awareness | ✅ | ✅ | ❌ |
| SSE/Chunked HTTP support | ✅ | ❓ | ❌ |
| TCP stream reassembly | ✅ | ❌ | ✅ |
| Auto-detect MCP traffic | ✅ | ❌ | ❌ |
| Web UI for live/historical traffic | ✅ | ✅ | ❌ |
| JSON-RPC message type detection | ✅ | ❌ | ❌ |
| MCP server for data access | ✅ | ❌ | ❌ |
| No client/server config needed | ✅ | ❌ | ✅ |
| Interactive testing/debugging | ❌ | ✅ | ❌ |
| Proxy/MITM capabilities | ✅ (stdio) | ✅ | ❌ |
When to use each tool:
- MCPHawk: Passive monitoring, protocol analysis, debugging MCP implementations, understanding traffic patterns
- mcpinspector: Active testing, crafting requests, interactive debugging with proxy
- Wireshark: General network analysis, non-MCP protocols, packet-level inspection
TLS/HTTPS Limitations
MCPHawk captures unencrypted MCP traffic only. It cannot decrypt:
- HTTPS/WSS (WebSocket Secure) connections
- TLS-encrypted TCP connections
- Any SSL/TLS encrypted traffic
This tool is ideal for:
- 🛠️ Local MCP development - Debug your MCP server implementations
- 🔍 Understanding MCP protocol - See actual JSON-RPC message flow
- 🐛 Troubleshooting local tools - Monitor Claude Desktop, Cline, etc. with YOUR local MCP servers
- 📊 Development/staging environments - Where TLS is often disabled
Installation
For Users
# Install from PyPI
pip install mcphawk
# Or install directly from GitHub
pip install git+https://github.com/tech4242/mcphawk.git
Requirements
- macOS/Linux: Requires
sudofor packet capture (standard for network sniffers) - Python: 3.9 or higher
- Permissions: Must run with elevated privileges to access network interfaces
Quick Start
# Get help
mcphawk --help
# Get help for specific command
mcphawk sniff --help
mcphawk web --help
# Start web UI with auto-detect mode (requires sudo on macOS)
sudo mcphawk web --auto-detect
# Monitor MCP traffic on a specific port (console output)
sudo mcphawk sniff --port 3000
# Monitor multiple ports with a custom filter
sudo mcphawk sniff --filter "tcp port 3000 or tcp port 8080"
# Auto-detect MCP traffic on any port
sudo mcphawk sniff --auto-detect
# Start web UI with sniffer on specific port
sudo mcphawk web --port 3000
# Start web UI with custom filter for multiple ports
sudo mcphawk web --filter "tcp port 3000 or tcp port 8080"
# View historical logs only (no active sniffing)
sudo mcphawk web --no-sniffer
# Custom web server configuration
sudo mcphawk web --port 3000 --host 0.0.0.0 --web-port 9000
# Enable debug output for troubleshooting
sudo mcphawk sniff --port 3000 --debug
sudo mcphawk web --port 3000 --debug
# Wrap an MCP server to capture stdio traffic
mcphawk wrap /path/to/mcp-server --arg1 --arg2
# Example: Wrap Context7 MCP server to monitor Claude Desktop's documentation lookups
mcphawk wrap npx -y @upstash/context7-mcp@latest
# Claude Desktop config to use the wrapped version:
# {
# "mcpServers": {
# "context7": {
# "command": "mcphawk",
# "args": ["wrap", "npx", "-y", "@upstash/context7-mcp@latest"]
# }
# }
# }
# Start MCP server with Streamable HTTP transport (default)
mcphawk mcp --transport http --mcp-port 8765
# Start MCP server with stdio transport (for Claude Desktop integration)
mcphawk mcp --transport stdio
# Start sniffer with integrated MCP server (HTTP transport)
sudo mcphawk sniff --port 3000 --with-mcp --mcp-transport http
# Start web UI with integrated MCP server
sudo mcphawk web --port 3000 --with-mcp --mcp-transport http --mcp-port 8765
MCP Server Integration
MCPHawk includes a built-in MCP server, allowing you to query captured traffic through the Model Context Protocol itself. This creates powerful possibilities:
- AI-Powered Analysis: Connect Claude or other LLMs to analyze traffic patterns
- Automated Monitoring: Build agents that detect anomalies or specific behaviors
- Integration Testing: Programmatically verify MCP interactions in CI/CD pipelines
Available Tools
The MCP server exposes these tools for traffic analysis:
| Tool | Description | Parameters |
|---|---|---|
query_traffic |
Fetch captured logs with pagination | limit, offset |
get_log |
Retrieve specific log entry | log_id |
search_traffic |
Search logs by content or type | search_term, message_type, traffic_type, limit |
get_stats |
Get traffic statistics | None |
list_methods |
List unique JSON-RPC methods | None |
Transport Options
HTTP Transport (Development & Testing)
The HTTP transport uses Server-Sent Events (SSE) for streaming responses:
# Start MCP server
mcphawk mcp --transport http --mcp-port 8765
# Initialize session (note: returns SSE stream)
curl -N -X POST http://localhost:8765/mcp \
-H 'Accept: text/event-stream' \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}'
# Example response (SSE format):
# event: message
# data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05",...}}
stdio Transport (Production & Claude Desktop)
For Claude Desktop integration:
{
"mcpServers": {
"mcphawk": {
"command": "mcphawk",
"args": ["mcp", "--transport", "stdio"]
}
}
}
The stdio transport follows the standard MCP communication pattern:
- Client sends
initializerequest - Server responds with capabilities
- Client sends
initializednotification - Normal tool calls can proceed
See examples/mcp_sdk_client.py for HTTP client example or examples/stdio_client.py for stdio communication.
Platform Support
Tested Platforms
- ✅ macOS (Apple Silicon & Intel) - Fully tested
- ✅ Linux (Ubuntu, Debian) - Fully tested
- ⚠️ Windows - Experimental (Scapy should work but untested)
Known Limitations
- Requires elevated privileges (
sudo) on macOS/Linux for packet capture - Limited to localhost/loopback interface monitoring
- Cannot decrypt TLS/HTTPS traffic (WSS, HTTPS)
- IPv6 support requires explicit interface configuration on some systems
- High traffic volumes (>1000 msgs/sec) may impact performance
Troubleshooting
Permission Denied Error:
# On macOS/Linux, use sudo:
sudo mcphawk web --auto-detect
No Traffic Captured:
- Ensure the MCP server/client is using localhost (127.0.0.1 or ::1)
- Check if traffic is on the expected port
- Try auto-detect mode to find MCP traffic:
--auto-detect - Verify traffic is unencrypted (not HTTPS/TLS)
- On macOS, ensure Terminal has permission to capture packets in System Preferences
SSE/HTTP Responses Not Showing:
- Confirm the server uses standard SSE format (event: message\ndata: {...}\n\n)
- Check if responses use chunked transfer encoding
- Enable debug mode to see detailed packet analysis:
--debug
Potential Upcoming Features
Vote for features by opening a GitHub issue!
- Auto-detect MCP traffic - Automatically discover MCP traffic on any port without prior configuration
- MCP Server Interface - Expose captured traffic via MCP server for AI agents to query and analyze traffic patterns
- Stdio capture - Transparent process wrapper to capture stdin/stdout communication
- Protocol Version Detection - Identify and display MCP protocol version from captured traffic
- Smart Search & Filtering - Search by method name, params, or any JSON field with regex support
- Performance Analytics - Request/response timing, method frequency charts, and latency distribution
- Export & Share - Export sessions as JSON/CSV, generate shareable links, create HAR-like files
- Test Generation - Auto-generate test cases from captured traffic
- Error Analysis - Highlight errors, group similar issues, show error trends
- Session Management - Save/load capture sessions, compare sessions side-by-side
- Interactive Replay - Click any request to re-send it, edit and replay captured messages
- Real-time Alerts - Alert on specific methods or error patterns with webhook support
- Visualization - Sequence diagrams, resource heat maps, method dependency graphs
... and a few more off the deep end:
- TLS/HTTPS Support (MITM Proxy Mode) - Optional man-in-the-middle proxy with certificate installation for encrypted traffic
- External Decryption Integration - Import decrypted streams from Wireshark, Chrome DevTools, or SSLKEYLOGFILE
For Developers
# Set up Python environment
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install backend dependencies
pip3 install -r requirements-dev.txt
pip3 install -e .
# Install frontend dependencies and build
cd frontend
npm install
npm run build
cd ..
# Run tests
python3 -m pytest -v
Some Vue options:
# Option 1: Use make (recommended)
make dev # Runs both frontend and backend
# Option 2: Run separately
# Terminal 1 - Frontend with hot reload
cd frontend && npm run dev
# Terminal 2 - Backend
mcphawk web --port 3000
# Option 3: Watch mode
cd frontend && npm run build:watch # Auto-rebuild on changes
mcphawk web --port 3000 # In another terminal
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcphawk-0.4.3.tar.gz.
File metadata
- Download URL: mcphawk-0.4.3.tar.gz
- Upload date:
- Size: 829.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9fdcc9ca4fd1d4df5f8d29f4607a87546b7e6e81f996d352ccf00821c80e3d09
|
|
| MD5 |
4d261b433c82602d75ebdbd46176ac41
|
|
| BLAKE2b-256 |
3a9db19d6cf9a20f7ccba851fc85d273bde1f28532bfe28729e1cad623993247
|
File details
Details for the file mcphawk-0.4.3-py3-none-any.whl.
File metadata
- Download URL: mcphawk-0.4.3-py3-none-any.whl
- Upload date:
- Size: 826.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2282d5a87227e69d69f0590887112a320c1c608be03825373f5304a3b4bb83ce
|
|
| MD5 |
96cbd1d9a730e825f427da5da85f05ee
|
|
| BLAKE2b-256 |
d1a5df688e8c3e0351c0ac67340b9b06613d24055167c60447400e4ac680d344
|