Skip to main content
Glama
Presidio-Federal

Wireshark MCP Server

README.md
# Wireshark MCP Server Container

A containerized [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that provides comprehensive network packet analysis using Wireshark/tshark. Connect it to any MCP-compatible AI client for automated network security analysis, protocol inspection, and traffic forensics.

## How It Works: GitHub-Based PCAP Sync

**This container does not store PCAP files.** Instead, it uses a GitHub repository as the source of truth for your packet captures.

```
┌──────────────┐       ┌─────────────────────────┐       ┌──────────────────┐
│  Your GitHub │       │  Wireshark MCP Container │       │   AI Client      │
│  Repository  │◄─────►│                          │◄─────►│  (Cursor, etc.)  │
│              │  sync  │  tshark analysis engine  │  MCP  │                  │
│  pcaps/      │       │  /tmp/wireshark_workspace │       │                  │
└──────────────┘       └─────────────────────────┘       └──────────────────┘
```

The workflow:

1. **Store PCAPs in GitHub** -- Push `.pcap` / `.pcapng` files to any GitHub repo (public or private).
2. **Configure credentials** -- Provide your GitHub username, PAT, repo URL, and optional path/branch via environment variables or HTTP headers.
3. **Sync on demand** -- Use `wireshark_list_pcaps` to see what's available, then `wireshark_sync_pcap` or `wireshark_sync_all_pcaps` to pull files into the container's temporary workspace.
4. **Analyze** -- Run any of the 19 analysis tools against synced PCAPs.
5. **Clean up** -- Use `wireshark_clean_project` or let the automatic TTL (default 24h) purge stale workspaces.

This design means the container stays stateless and ephemeral -- PCAP data lives in your GitHub repo, and the container only pulls what it needs for the current analysis session.

## Quick Start

### Pull from GHCR

```bash
docker pull ghcr.io/<your-org>/wireshark-mcp-container:latest
```

### Run with Docker

```bash
docker run -d \
  -p 3020:3020 \
  -e DISABLE_JWT_AUTH=true \
  -e GITHUB_USERNAME=your-github-username \
  -e GITHUB_PAT=ghp_xxxxxxxxxxxxxxxxxxxx \
  -e GITHUB_REPO=https://github.com/your-org/your-pcap-repo \
  -e GITHUB_PATH=pcaps \
  -e GITHUB_BRANCH=main \
  --name wireshark-mcp \
  ghcr.io/<your-org>/wireshark-mcp-container:latest
```

### Build Locally

```bash
docker build -t wireshark-mcp:latest -f dockerfile .

docker run -d \
  -p 3020:3020 \
  --env-file .env \
  --name wireshark-mcp \
  wireshark-mcp:latest
```

## Configuration

All configuration is done through environment variables. See [`.env.example`](.env.example) for a complete reference.

### Required

| Variable | Description |
|---|---|
| `GITHUB_USERNAME` | Your GitHub username |
| `GITHUB_PAT` | GitHub Personal Access Token (needs `repo` scope for private repos) |
| `GITHUB_REPO` | Full GitHub repo URL (e.g., `https://github.com/org/pcap-repo`) |

### Optional

| Variable | Default | Description |
|---|---|---|
| `GITHUB_PATH` | _(root)_ | Subdirectory in the repo where PCAPs are stored |
| `GITHUB_BRANCH` | `main` | Branch to sync from |
| `PORT` | `3020` | Server port |
| `HOST` | `0.0.0.0` | Bind address |
| `TRANSPORT` | `streamable-http` | MCP transport (`streamable-http` or `stdio`) |
| `DISABLE_JWT_AUTH` | `true` | Set to `false` to enable Azure AD JWT authentication |
| `AZURE_AD_TENANT_ID` | | Required when JWT auth is enabled |
| `AZURE_AD_CLIENT_ID` | | Optional audience validation when JWT auth is enabled |
| `ENABLE_AUTH_LOGGING` | `false` | Log user access to tools |
| `WIRESHARK_PROJECT_TTL` | `86400` | Seconds before stale project workspaces are auto-purged |

### Passing Credentials via HTTP Headers

Instead of environment variables, credentials can be passed per-request via HTTP headers. This is useful when multiple users share a single server instance:

| Header | Maps to |
|---|---|
| `X-GitHub-Username` | `GITHUB_USERNAME` |
| `X-GitHub-PAT` | `GITHUB_PAT` |
| `X-GitHub-Repo` | `GITHUB_REPO` |
| `X-GitHub-Path` | `GITHUB_PATH` |
| `X-GitHub-Branch` | `GITHUB_BRANCH` |

Headers take precedence over environment variables.

## MCP Tools

### PCAP Management

| Tool | Description |
|---|---|
| `wireshark_list_pcaps` | List synced and available PCAPs (local + GitHub) |
| `wireshark_sync_pcap` | Download a single PCAP from GitHub |
| `wireshark_sync_all_pcaps` | Download all PCAPs from GitHub (skips already-synced) |
| `wireshark_remove_pcap` | Remove a local PCAP copy |
| `wireshark_clean_project` | Remove entire project workspace |

### Analysis

| Tool | Description |
|---|---|
| `wireshark_pcap_triage` | Automated first-pass triage (start here) |
| `wireshark_analyze_pcap` | Comprehensive packet analysis |
| `wireshark_protocol_hierarchy` | Protocol distribution breakdown |
| `wireshark_conversations` | TCP/UDP/IP conversation statistics |
| `wireshark_display_filter` | Apply Wireshark display filters |
| `wireshark_follow_stream` | Reconstruct TCP/UDP stream payloads |
| `wireshark_top_talkers` | Identify highest-volume traffic sources |

### Protocol Deep-Dives

| Tool | Description |
|---|---|
| `wireshark_tcp_health` | TCP retransmissions, dup ACKs, health scoring |
| `wireshark_dns_analysis` | DNS queries, NXDOMAIN, tunneling detection |
| `wireshark_http_summary` | HTTP methods, status codes, response times |
| `wireshark_tls_analysis` | TLS versions, ciphers, certificate info |

### Security

| Tool | Description |
|---|---|
| `wireshark_extract_credentials` | Extract plaintext credentials from traffic |
| `wireshark_check_threats` | Check PCAP IPs against threat intelligence |
| `wireshark_check_ip_threat` | Check a single IP against threat feeds |

## Typical Analysis Workflow

```
1. wireshark_list_pcaps          → See what's in your GitHub repo
2. wireshark_sync_pcap           → Pull a capture file into the container
3. wireshark_pcap_triage         → Get an overview and recommendations
4. wireshark_tcp_health          → Drill into TCP issues (if flagged)
5. wireshark_display_filter      → Filter to specific traffic patterns
6. wireshark_follow_stream       → Reconstruct an application conversation
7. wireshark_check_threats       → Check IPs against threat intelligence
8. wireshark_clean_project       → Clean up when done
```

## GitHub Repository Setup for PCAPs

1. Create a GitHub repository (private recommended for sensitive captures).
2. Create a directory for your PCAP files (e.g., `pcaps/`).
3. Push your `.pcap` or `.pcapng` files to that directory.
4. Create a [Personal Access Token](https://github.com/settings/tokens) with `repo` scope (for private repos) or `public_repo` scope (for public repos).
5. Configure the container with your repo URL, path, and token.

```bash
# Example repo structure
your-pcap-repo/
├── pcaps/
│   ├── incident-2025-01-15.pcap
│   ├── baseline-traffic.pcapng
│   └── suspicious-dns.pcap
└── README.md
```

## Local Development

### Prerequisites

- Python 3.11+
- tshark / Wireshark installed
- pip

### Setup

```bash
pip install -r requirements.txt

# Copy and configure environment
cp .env.example .env
# Edit .env with your GitHub credentials

# Run the server
python server.py
```

### Install tshark

**macOS:**
```bash
brew install wireshark
```

**Ubuntu/Debian:**
```bash
sudo apt-get install tshark
```

## License

ISC