
Un servidor MCP tipo navaja suiza para analizar archivos PCAP
Un servidor MCP que expone sharkd — la interfaz programática de Wireshark — como un conjunto de herramientas para LLMs. Cargue archivos PCAP/PCAPNG y analícelos con lenguaje natural.
sharkd)git clone https://github.com/weirdmachine64/sharkmcp.git
cd sharkmcp
pip install -e .
O ejecútelo directamente desde el repositorio sin instalar:
uvx --from git+https://github.com/weirdmachine64/sharkmcp sharkmcp
Añada a su .mcp.json:
{
"mcpServers": {
"sharkmcp": {
"command": "uvx",
"args": ["--from", "git+https://github.com/weirdmachine64/sharkmcp", "sharkmcp"],
"env": {
"SHARKMCP_TIMEOUT": "300"
}
}
}
}
| Variable de entorno | Por defecto | Descripción |
|---|---|---|
SHARKMCP_SHARKD_BIN | sharkd | Ruta al binario de sharkd |
SHARKMCP_TIMEOUT | 300 | Tiempo de espera por solicitud en segundos |
Cada PCAP cargado obtiene un subproceso sharkd dedicado. Los resultados de escaneos costosos (conversaciones, información experta, objetos exportados) se almacenan en caché en memoria para que las llamadas de seguimiento paginadas se sirvan sin volver a escanear.
| Herramienta | Descripción |
|---|---|
load_pcap(path, alias?) | Cargar un archivo PCAP/PCAPNG |
list_pcaps() | Listar todos los PCAP cargados |
unload_pcap(alias) | Terminar sesión y liberar memoria |
| Herramienta | Descripción |
|---|---|
pcap_summary(alias) | Conteo de tramas, duración, tamaño de archivo, protocolos vistos |
server_info(alias) | Todos los tipos de tap disponibles, protocolos de seguimiento, tipos de campo |
| Herramienta | Descripción |
|---|---|
list_packets(alias, filter?, columns?, refs?) | Lista de tramas paginada con filtro de visualización |
packet_detail(alias, frame, include_bytes?, include_hidden?) | Árbol de protocolo completo para una trama |
extract_fields(alias, fields, filter?) | Extraer campos arbitrarios por paquete como tabla |
| Herramienta | Descripción |
|---|---|
validate(alias, filter?, field?) | Validar un filtro de visualización y/o nombre de campo |
complete(alias, field?, pref?) | Autocompletar nombres de campo o preferencias por prefijo |
get_preference(alias, preference?) | Leer preferencias del disector |
set_preference(alias, name, value) | Establecer una preferencia del disector para esta sesión |
set_frame_comment(alias, frame, comment) | Anotar una trama (ámbito de sesión) |
| Herramienta | Descripción |
|---|---|
protocol_hierarchy(alias, filter?) | Árbol de protocolo anidado con conteos de tramas/bytes |
io_stats(alias, interval_ms?, filter?) | Conteos de tramas y bytes por intervalo |
iograph(alias, graphs, interval_ms?, filters?) | Gráfico de tráfico multilínea; soporta packets, bytes, bits, sum:<field>, avg:<field>, min:<field>, max:<field>, load:<field>, frames:<field> |
follow_stream(alias, protocol, filter) | Reensamblar un flujo (tcp, udp, tls, http, http2, quic, sip, dccp, websocket) |
| Herramienta | Descripción |
|---|---|
conversations(alias, type?, sort_by?) | Tabla de conversaciones — bytes/tramas por par de peers |
endpoints(alias, type?, sort_by?) | Tabla de endpoints — tx/rx por host |
Tipos de capa admitidos para ambos: tcp, udp, ip, ipv6, eth, sctp, dccp, mptcp, wifi, bluetooth, zigbee, fc, fddi, usb, y más.
| Herramienta | Descripción |
|---|---|
expert_info(alias, filter?) | Detección de anomalías por trama — errores, advertencias, notas, chats |
protocol_stats(alias, protocol) | Estadísticas agregadas para dns, http, http_requests, http_server, sip, dhcp, h225, http2, rtsp |
service_response_time(alias, protocol) | Latencia solicitud/respuesta para smb, smb2, snmp, ldap, diameter, rpc, gtp, y más |
response_time_delay(alias, protocol) | Retardo de ida y vuelta para radius, h225_ras, megaco, mgcp |
sequence_diagram(alias, type?) | Datos de diagrama de flujo para tcp, icmp, icmpv6, any |
| Herramienta | Descripción |
|---|---|
voip_calls(alias, filter?) | Lista de llamadas SIP/H.323 con estado y participantes |
rtp_streams(alias, stream_spec?) | Inventario de flujos RTP; pase stream_spec para jitter/pérdidas por flujo |
multicast_streams(alias, filter?) | Estadísticas de flujos multicast UDP |
| Herramienta | Descripción |
|---|---|
export_objects(alias, type?) | Listar objetos extraíbles (http, imf, smb, tftp, dicom, ftp-data) |
download_object(alias, token) | Descargar un objeto, claves de sesión TLS (ssl-secrets) o audio RTP (rtp:<spec>) como base64 |
| Herramienta | Descripción |
|---|---|
tap(alias, specs, filter?, skip?, limit?) | Ejecutar cualquier tap de sharkd directamente — hasta 16 especificaciones en un escaneo de PCAP. Use server_info para descubrir identificadores válidos. |
> 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")
LLM
│ MCP (stdio)
▼
SharkMCP server
│ JSON-RPC 2.0 (stdin/stdout)
├─ sharkd [pcap-1]
├─ sharkd [pcap-2]
└─ sharkd [pcap-N]
Un subproceso sharkd por PCAP cargado. Las sesiones están aisladas: las consultas concurrentes en diferentes alias nunca se bloquean entre sí.