Network analysis for the AI age
SaferSkills independently audited Mcpcap (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<!-- mcp-name: ai.mcpcap/mcpcap -->
<p align="center"> <img src="https://raw.githubusercontent.com/mcpcap/mcpcap/main/readme-assets/mcpcap-logo.png" alt="mcpcap logo" width="240" /> </p>
A modular Python MCP (Model Context Protocol) server for analyzing PCAP files. mcpcap exposes protocol-specific analysis tools that accept a local file path or remote HTTP URL at call time, so the server stays stateless and works cleanly with MCP clients.
mcpcap uses a modular architecture to analyze different network protocols found in PCAP files. Each module provides specialized analysis tools that can be called independently with any PCAP file, making it perfect for integration with Claude Desktop and other MCP clients.
mcpcap requires Python 3.10 or greater.
pip install mcpcapuv add mcpcapuvx mcpcapBuild the image from the repository root:
docker build -t mcpcap .Run it over HTTP for MCP clients that connect to a network endpoint:
docker run --rm \
-p 8080:8080 \
-v "$(pwd)/examples:/pcaps:ro" \
mcpcap --transport http --host 0.0.0.0 --port 8080Run it over stdio for clients that can spawn docker run directly:
docker run --rm -i \
-v "$(pwd)/examples:/pcaps:ro" \
mcpcapWhen you mount local captures into the container, use the container path in tool calls:
analyze_dns_packets("/pcaps/dns.pcap")Remote http:// and https:// PCAP URLs work without a volume mount because mcpcap downloads them inside the container at call time.
For the default HTTP workflow, start the bundled Compose service:
docker compose upThis pulls ghcr.io/mcpcap/mcpcap:latest, publishes http://127.0.0.1:8080/mcp, and mounts ./examples into the container as /pcaps.
analyze_dns_packets("/pcaps/dns.pcap")To analyze your own captures, change the volume in docker-compose.yml from ./examples:/pcaps:ro to your local capture directory.
For local development against the checked-out source instead of GHCR:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up --buildStart mcpcap as a stateless MCP server:
# Default stdio transport for Claude Desktop and similar clients
mcpcap
# Start with specific modules only
mcpcap --modules dns,tcp
# With packet analysis limits
mcpcap --max-packets 1000
# Start an HTTP transport server for remote MCP clients
mcpcap --transport http --host 127.0.0.1 --port 8080Use stdio transport for local MCP clients like Claude Desktop:
{
"mcpServers": {
"mcpcap": {
"command": "mcpcap",
"args": []
}
}
}Use HTTP transport when your MCP client expects a network endpoint:
mcpcap --transport http --host 127.0.0.1 --port 8080Point your HTTP-capable MCP client at:
http://127.0.0.1:8080/mcpDocker users can publish the same endpoint with:
docker run --rm \
-p 8080:8080 \
-v "/path/to/captures:/pcaps:ro" \
mcpcap --transport http --host 0.0.0.0 --port 8080Or with Compose:
docker compose upUse the analysis tools with any PCAP file by providing the file path or URL when you call the tool:
DNS Analysis:
analyze_dns_packets("/path/to/dns.pcap")
analyze_dns_packets("https://example.com/remote.pcap")DHCP Analysis:
analyze_dhcp_packets("/path/to/dhcp.pcap")
analyze_dhcp_packets("https://example.com/dhcp-capture.pcap")ICMP Analysis:
analyze_icmp_packets("/path/to/icmp.pcap")
analyze_icmp_packets("https://example.com/ping-capture.pcap")TCP Connection Analysis:
analyze_tcp_connections("/path/to/capture.pcap")
analyze_tcp_connections("/path/to/capture.pcap", server_ip="192.168.1.1", server_port=80)TCP Pattern Analysis:
analyze_tcp_anomalies("/path/to/capture.pcap", server_ip="10.0.0.1")TCP Retransmission Analysis:
analyze_tcp_retransmissions("/path/to/capture.pcap")Traffic Flow Analysis:
analyze_traffic_flow("/path/to/capture.pcap", server_ip="192.168.1.100")SIP Analysis:
analyze_sip_packets("/path/to/voip-signaling.pcap")
analyze_sip_packets("https://example.com/sip-call-flow.pcap")CapInfos Analysis:
analyze_capinfos("/path/to/any.pcap")
analyze_capinfos("https://example.com/capture.pcap")If you are using Docker with a bind mount, pass the in-container path instead of the host path:
analyze_capinfos("/pcaps/dns.pcap")mcpcap provides specialized analysis prompts to guide LLM analysis:
# Load specific modules
mcpcap --modules dns # DNS analysis only
mcpcap --modules tcp # TCP analysis only
mcpcap --modules dhcp # DHCP analysis only
mcpcap --modules icmp # ICMP analysis only
mcpcap --modules sip # SIP analysis only
mcpcap --modules dns,tcp # DNS and TCP analysis
mcpcap --modules dns,dhcp,icmp,tcp,sip,capinfos # All modules (default)# Limit packet analysis for large files
mcpcap --max-packets 1000# Default stdio transport
mcpcap
# HTTP transport for network-accessible MCP clients
mcpcap --transport http
# HTTP transport on a custom interface and port
mcpcap --transport http --host 0.0.0.0 --port 9000mcpcap --modules dns,dhcp,icmp,tcp,sip,capinfos --max-packets 500mcpcap [--modules MODULES] [--max-packets N] [--transport {stdio,http}] [--host HOST] [--port PORT]Options:
--modules MODULES: Comma-separated modules to load (default: dns,dhcp,icmp,tcp,sip,capinfos)dns, dhcp, icmp, tcp, sip, capinfos--max-packets N: Maximum packets to analyze per file (default: unlimited)--transport {stdio,http}: MCP transport to expose (default: stdio)--host HOST: Host to bind for HTTP transport (default: 127.0.0.1)--port PORT: Port to bind for HTTP transport (default: 8080)Examples:
# Start with all modules
mcpcap
# DNS and TCP analysis only
mcpcap --modules dns,tcp
# TCP analysis for troubleshooting connections
mcpcap --modules tcp
# With packet limits for large files
mcpcap --max-packets 1000
# Expose mcpcap over HTTP
mcpcap --transport http --host 127.0.0.1 --port 8080Example PCAP files are included in the examples/ directory:
dns.pcap - DNS traffic for testing DNS analysisdhcp.pcap - DHCP 4-way handshake captureThere is currently no bundled ICMP sample capture in examples/.
npm install -g @modelcontextprotocol/inspector
npx @modelcontextprotocol/inspector mcpcapThen test the tools:
// In the MCP Inspector web interface
analyze_dns_packets("./examples/dns.pcap")
analyze_dhcp_packets("./examples/dhcp.pcap")
analyze_capinfos("./examples/dns.pcap")
analyze_tcp_connections("/absolute/path/to/capture.pcap")
analyze_sip_packets("/absolute/path/to/voip-signaling.pcap")mcpcap's modular design supports easy extension:
MCP Client Request → analyze_*_packets(pcap_file)
→ BaseModule.analyze_packets()
→ Module._analyze_protocol_file()
→ Structured JSON ResponseCreate new protocol modules by:
BaseModule_analyze_protocol_file(pcap_file)Future modules might include:
Both analysis tools accept remote PCAP files via HTTP/HTTPS URLs:
# Examples of remote analysis
analyze_dns_packets("https://raw.githubusercontent.com/mcpcap/mcpcap/main/examples/dns.pcap")
analyze_dhcp_packets("https://example.com/network-capture.pcap")
analyze_icmp_packets("https://example.com/ping-test.pcap")
analyze_capinfos("https://example.com/network-metadata.pcap")
analyze_tcp_connections("https://example.com/tcp-session.pcap")
analyze_sip_packets("https://example.com/sip-signaling.pcap")Features:
.pcap, .pcapng, and .cap filesWhen analyzing PCAP files:
Contributions welcome! Areas for contribution:
MIT
For questions, issues, or feature requests, please open an issue on GitHub.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.