SharkMCP
Um servidor MCP que expõe sharkd — a interface programática do Wireshark — como um conjunto de ferramentas para LLMs. Carregue ficheiros PCAP/PCAPNG e analise-os com linguagem natural.
Requisitos
- Python 3.10+
- Wireshark (fornece
sharkd)
Instalação
git clone https://github.com/weirdmachine64/sharkmcp.git
cd sharkmcp
pip install -e .
Ou execute diretamente a partir do repositório sem instalar:
uvx --from git+https://github.com/weirdmachine64/sharkmcp sharkmcp
Configuração
Adicione ao seu .mcp.json:
{
"mcpServers": {
"sharkmcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/weirdmachine64/sharkmcp", "sharkmcp"],
"env": {
"SHARKMCP_TIMEOUT": "300"
}
}
}
}
| Variável de ambiente | Padrão | Descrição |
|---|
SHARKMCP_SHARKD_BIN | sharkd | Caminho para o binário sharkd |
SHARKMCP_TIMEOUT | 300 | Tempo limite por pedido em segundos |
Ferramentas
Cada PCAP carregado recebe um subprocesso sharkd dedicado. Os resultados de análises pesadas (conversas, informação de especialista, objetos de exportação) são armazenados em cache na memória, para que chamadas subsequentes paginadas sejam servidas sem nova análise.
Session
| Ferramenta | Descrição |
|---|
load_pcap(path, alias?) | Carregar um ficheiro PCAP/PCAPNG |
list_pcaps() | Listar todos os PCAPs carregados |
unload_pcap(alias) | Encerrar sessão e libertar memória |
Overview
| Ferramenta | Descrição |
|---|
pcap_summary(alias) | Contagem de frames, duração, tamanho do ficheiro, protocolos vistos |
server_info(alias) | Todos os tipos de tap disponíveis, protocolos de follow, tipos de campo |
Packet Inspection
| Ferramenta | Descrição |
|---|
list_packets(alias, filter?, columns?, refs?) | Lista de frames paginada com filtro de exibição |
packet_detail(alias, frame, include_bytes?, include_hidden?) | Árvore de protocolo completa para um frame |
extract_fields(alias, fields, filter?) | Extrair campos arbitrários por pacote como uma tabela |
Utilities
Traffic Structure
Conversations & Topology
| Ferramenta | Descrição |
|---|
conversations(alias, type?, sort_by?) | Tabela de conversas — bytes/frames por par de pares |
endpoints(alias, type?, sort_by?) | Tabela de endpoints — tx/rx por host |
Tipos de camada suportados para ambos: tcp, udp, ip, ipv6, eth, sctp, dccp, mptcp, wifi, bluetooth, zigbee, fc, fddi, usb, e mais.
Protocol Statistics
| Ferramenta | Descrição |
|---|
voip_calls(alias, filter?) | Lista de chamadas SIP/H.323 com estado e participantes |
rtp_streams(alias, stream_spec?) | Inventário de fluxos RTP; passe stream_spec para jitter/perda por fluxo |
|
Export & Objects
Escape Hatch
| Ferramenta | Descrição |
|---|
tap(alias, specs, filter?, skip?, limit?) | Executar qualquer tap do sharkd diretamente — até 16 especificações numa única análise de PCAP. Use server_info para descobrir identificadores válidos. |
Example
> load_pcap("/captures/traffic.pcap", alias="traffic")
> protocol_hierarchy("traffic")
> expert_info("traffic", limit=20)
> conversations("traffic", type="tcp", sort_by="bytes")
> extract_fields("traffic", ["dns.qry.name", "dns.a"], filter="dns")
> follow_stream("traffic", "http", "tcp.stream eq 0")
> export_objects("traffic", type="http")
> download_object("traffic", "eo:http_0")
Architecture
LLM
│ MCP (stdio)
▼
SharkMCP server
│ JSON-RPC 2.0 (stdin/stdout)
├─ sharkd [pcap-1]
├─ sharkd [pcap-2]
└─ sharkd [pcap-N]
Um subprocesso sharkd por PCAP carregado. As sessões são isoladas — consultas concorrentes em aliases diferentes nunca se bloqueiam mutuamente.