Keel
Network Diagnostics MCP Server
Probing what lies beneath the surface -- network diagnostics for AI tools.
What It Does
Keel is a Model Context Protocol (MCP) server that gives AI assistants 14 network diagnostic tools. It handles the things you'd normally reach for ping, dig, nmap, or openssl to do -- but exposed as structured, validated MCP tool calls.
Tools
| Tool | Description | Key Parameters |
|---|---|---|
health |
Server version and status check | -- |
ping |
TCP connect ping (port 80) with latency stats | host, count (1--100), timeout |
traceroute |
Trace network route to a host | host, max_hops (1--64) |
dns_lookup |
Resolve DNS records (A, AAAA, MX, CNAME, TXT, NS) | domain, record_type, nameserver |
reverse_dns |
Reverse DNS lookup for an IP address | ip |
port_check |
Check if a single TCP port is open | host, port, timeout |
port_scan |
Scan common TCP ports (rate-limited, max 100) | host, ports |
check_ssl_cert |
Inspect SSL/TLS certificate details and expiry | host, port |
whois_lookup |
WHOIS domain registration lookup | domain |
http_check |
HTTP request with status, timing, headers, size | url |
subnet_scan |
Discover live hosts on a local subnet (RFC 1918 only) | subnet (CIDR, max /20) |
get_public_ip |
Get the machine's public IP address | -- |
speed_test |
Measure download speed (Mbps) and latency | -- |
dns_propagation |
Check DNS propagation across public resolvers | domain, record_type |
Installation
From PyPI:
pip install keel-mcp
Or isolated with pipx:
pipx install keel-mcp
Usage
Run the server directly (stdio transport):
keel
Claude Code
Register as a local MCP server:
claude mcp add keel -- keel
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"keel": {
"command": "keel",
"args": []
}
}
}
If installed in a virtual environment, use the full path to the binary:
{
"mcpServers": {
"keel": {
"command": "/path/to/.venv/bin/keel",
"args": []
}
}
}
Security
Keel is designed to be safe for AI-driven use:
- SSRF protection --
http_checkresolves hostnames and blocks requests to internal, private, loopback, and link-local IP addresses (including IPv4-mapped IPv6). Cloud metadata endpoints (169.254.x.x) are blocked. - Input validation -- All inputs pass through validators that reject shell metacharacters, malformed hostnames, and invalid ports before reaching any network call or subprocess.
- Rate limiting --
port_scanenforces a minimum 1-second interval between scans to prevent abuse. - Subnet restriction --
subnet_scanonly allows RFC 1918 private subnets and caps at /20 (4096 addresses) with concurrency limiting. - No shell injection -- Subprocess calls (
traceroute,whois) useexec-style invocation, never shell interpolation.
Development
git clone https://github.com/seayniclabs/keel.git
cd keel
python -m venv .venv
source .venv/bin/activate
pip install -e ".[test]"
python -m pytest tests/ -q
License
Metadata
Release files for keel-mcp 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| keel_mcp-0.2.1.tar.gz | 20.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| keel_mcp-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.3 kB
Release files / keel_mcp-0.2.1.tar.gz
| Download URL | keel_mcp-0.2.1.tar.gz |
|---|---|
| Size | 20.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e21d0dba5b117a7ef8f5b8a64d0beb433164018b2f0e4b5801f164fe1a1428d
|
|
BLAKE2b-256 checksum How to use checksums |
86c53d35357c34ca608fd0b431fb4b7d3003a7917a48ccc311fd6f62354f3f0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|
Release files / keel_mcp-0.2.1-py3-none-any.whl
| Download URL | keel_mcp-0.2.1-py3-none-any.whl |
|---|---|
| Size | 12.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
91086bda1e217b950ab31e57407d0303620af7d5ca4c3f2d086cfa230d5bff4f
|
|
BLAKE2b-256 checksum How to use checksums |
78aee873c1231ee99c0e57120c9b1d9286b2c44b8fdefab9fad1acf995e6128e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.12
|