{"id":50405274,"url":"https://github.com/simonpainter/bgp-lg-mcp","last_synced_at":"2026-05-31T01:04:26.376Z","repository":{"id":338182513,"uuid":"1156583857","full_name":"simonpainter/bgp-lg-mcp","owner":"simonpainter","description":"I have been meaning to write a BGP route server MCP proxy for a while.","archived":false,"fork":false,"pushed_at":"2026-05-09T22:13:05.000Z","size":298,"stargazers_count":4,"open_issues_count":5,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-09T23:32:41.206Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simonpainter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-12T20:17:13.000Z","updated_at":"2026-05-09T22:13:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/simonpainter/bgp-lg-mcp","commit_stats":null,"previous_names":["simonpainter/bgp-lg-mcp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/simonpainter/bgp-lg-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonpainter%2Fbgp-lg-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonpainter%2Fbgp-lg-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonpainter%2Fbgp-lg-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonpainter%2Fbgp-lg-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simonpainter","download_url":"https://codeload.github.com/simonpainter/bgp-lg-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonpainter%2Fbgp-lg-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33715214,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-31T01:04:25.445Z","updated_at":"2026-05-31T01:04:26.368Z","avatar_url":"https://github.com/simonpainter.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BGP Looking Glass MCP Server\n\nQuery live BGP routing information, ping IP addresses, and trace network paths from public route servers via Claude Desktop or any MCP client.\n\n## What Is This?\n\nA **BGP Looking Glass** is an internet-accessible service that exposes BGP (Border Gateway Protocol) routing data. BGP is the protocol that powers the internet's routing infrastructure. Looking glasses let you see what routes a particular BGP speaker has learned and how it would route traffic to a given destination.\n\nThis project wraps 13 public RouteViews servers into an **MCP (Model Context Protocol) server**, making BGP queries, ping, and traceroute available to Claude Desktop and other AI assistants. Now you can ask Claude about internet routing with live, authoritative data.\n\n**Example questions Claude can answer:**\n\n- \"What's the AS path to 8.8.0.0/24?\"\n- \"Is this prefix routed?\"\n- \"How many BGP neighbors does the Linx route server have?\"\n- \"Who owns AS15169?\"\n- \"Which country is IP 1.1.1.1 located in?\"\n- \"Can you ping 8.8.8.8 from different servers and compare latencies?\"\n- \"Show me the network path to Google DNS\"\n- \"Compare routes to 1.1.1.1 across different regions\"\n\n## Features\n\n- **Query live BGP routes** from 13 globally-distributed public route servers\n- **Ping IP addresses** from route servers to test connectivity and measure latency\n- **Trace routes** to IP addresses to see the network path and identify which ASes are involved\n- **Look up IP geolocation \u0026 BGP metadata** using BGPKit public API\n- **Look up ASN ownership** using BGPKit public API\n- **Retrieve BGP summary statistics** including router ID, AS number, neighbor count\n- **IPv4 and IPv6 support** - works with both address families\n- **CIDR notation support** - look up entire subnets\n- **Public IP validation** - blocks private/reserved address ranges for safety\n- **Simple, fast setup** - works with Claude Desktop in minutes\n- **Direct telnet connections** - no heavy dependencies or complex infrastructure\n- **Real-time data** - queries live BGP data from public route servers\n\n## Quick Start\n\n### 1. Install\n\n```bash\npip install -e .\n```\n\n### 2. Configure Claude Desktop\n\nAdd this to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"bgp-lg\": {\n      \"command\": \"python3\",\n      \"args\": [\"/path/to/bgp-lg-mcp/server.py\", \"--stdio\"]\n    }\n  }\n}\n```\n\n### 3. Restart Claude Desktop\n\nThe BGP Looking Glass tools will appear in your MCP tools list. Start asking about BGP!\n\n## Available Tools\n\n### JSON Response Format\n\nAll tools support both **text** (default) and **JSON** response formats for flexibility in how you consume data.\n\n**Using JSON format:**\n\n```python\n# Get structured JSON instead of text\nroute_lookup(destination=\"8.8.8.0/24\", format=\"json\")\nbgp_summary(format=\"json\")\nasn_owner(asn=\"AS15169\", format=\"json\")\nip_lookup(ip=\"8.8.8.8\", format=\"json\")\nlist_servers(format=\"json\")\n```\n\n**Benefits of JSON format:**\n\n- **Programmatic parsing** - Easy to parse and process structured data\n- **Type safety** - Pydantic models validate all responses\n- **Consistent structure** - All tools follow the same JSON schema\n- **Error handling** - Errors also return structured JSON\n- **API integration** - Better for building on top of the MCP server\n\n**Example JSON response:**\n\n```json\n{\n  \"type\": \"ip_lookup\",\n  \"ip\": \"8.8.8.8\",\n  \"country\": \"US\",\n  \"asn\": 15169,\n  \"prefix\": \"8.8.8.0/24\",\n  \"name\": \"Google, YouTube (for Google Fiber see AS16591 record)\",\n  \"rpki\": \"valid\",\n  \"updated_at\": \"2026-02-25T10:00:00\"\n}\n```\n\n---\n\n### `route_lookup` - Query BGP Routes\n\nLook up how a specific IP address or subnet would be routed.\n\n**Parameters:**\n\n- `destination` - IPv4/IPv6 address or CIDR subnet (e.g., `8.8.8.0/24`)\n- `server` - Which route server to query (default: RouteViews Linx)\n- `format` - Response format: `text` (default) or `json`\n\n**Returns:** Raw BGP lookup output including matching routes, AS paths, next-hop information, and route attributes (or structured JSON if format=\"json\").\n\n**Example:**\n\n```python\nroute_lookup(destination=\"1.1.1.1\")\nroute_lookup(destination=\"2001:4860:4860::8888\", server=\"Equinix Sydney\")\nroute_lookup(destination=\"8.8.8.0/24\", format=\"json\")\n```\n\n---\n\n### `bgp_summary` - Get Router Statistics\n\nRetrieve BGP summary information from a route server.\n\n**Parameters:**\n\n- `server` - Which route server to query (default: RouteViews Linx)\n- `format` - Response format: `text` (default) or `json`\n\n**Returns:** BGP summary output showing:\n\n- Router BGP ID and AS number\n- Number of learned routes (RIB entries)\n- Total BGP neighbors and their status\n- Detailed neighbor table with peer information, session uptime, and prefix counts\n\n**Example:**\n\n```python\nbgp_summary()\nbgp_summary(server=\"Equinix Ashburn\")\nbgp_summary(format=\"json\")\n```\n\n**Use cases:**\n\n- Verify a route server is healthy\n- Monitor BGP session status with major networks\n- See which peers are actively advertising routes\n\n---\n\n### `list_servers` - Show Available Servers\n\nDisplay all configured BGP looking-glass servers.\n\n**Parameters:**\n\n- `format` - Response format: `text` (default) or `json`\n\n**Returns:** Server names, status (enabled/disabled), hostnames, and connection method.\n\n**Example:**\n\n```python\nlist_servers()\nlist_servers(format=\"json\")\n```\n\n---\n\n### `asn_owner` - Look Up ASN Owner\n\nRetrieve the owner name for an Autonomous System Number (ASN) using BGPKit API.\n\n**Parameters:**\n\n- `asn` - Autonomous System Number in format \"AS123\" or \"123\" (e.g., \"AS15169\", \"64512\")\n- `format` - Response format: `text` (default) or `json`\n\n**Returns:** Owner name for the ASN.\n\n**Example:**\n\n```python\nasn_owner(asn=\"AS15169\")\nasn_owner(asn=\"15169\")\nasn_owner(asn=\"AS64512\")\nasn_owner(asn=\"AS15169\", format=\"json\")\n```\n\n**JSON Example Response:**\n\n```json\n{\n  \"type\": \"asn_owner\",\n  \"asn\": \"AS15169\",\n  \"owner\": \"GOOGLE - Google LLC\"\n}\n```\n\n**Use cases:**\n\n- Identify who operates a particular AS\n- Verify AS ownership when analyzing routing information\n- Understand the entities involved in a BGP path\n\n---\n\n### `ip_lookup` - Geolocation and BGP Metadata\n\nLook up geolocation information and BGP metadata for an IP address using BGPKit API.\n\n**Parameters:**\n\n- `ip` - IPv4 or IPv6 address (e.g., `8.8.8.8` or `2001:4860:4860::8888`)\n  - Must be a public address (private/reserved addresses are rejected for safety)\n- `format` - Response format: `text` (default) or `json`\n\n**Returns:** IP geolocation data including:\n\n- **Country** - GeoIP country code\n- **ASN** - Autonomous System Number announcing the IP\n- **Prefix** - CIDR prefix covering the IP\n- **Name** - Organization name (if available)\n- **RPKI** - RPKI validation status (valid/invalid/unknown)\n- **Updated** - Timestamp of last update\n\n**Example:**\n\n```python\nip_lookup(ip=\"8.8.8.8\")\nip_lookup(ip=\"1.1.1.1\")\nip_lookup(ip=\"2001:4860:4860::8888\")\nip_lookup(ip=\"8.8.8.8\", format=\"json\")\n```\n\n**Text Output Example:**\n\n```\nIP Lookup: 8.8.8.8\nCountry: US\nASN: 15169\nPrefix: 8.8.8.0/24\nName: Google, YouTube (for Google Fiber see AS16591 record)\nRPKI Status: valid\nUpdated: 2026-02-25T10:00:00\n```\n\n**JSON Output Example:**\n\n```json\n{\n  \"type\": \"ip_lookup\",\n  \"ip\": \"8.8.8.8\",\n  \"country\": \"US\",\n  \"asn\": 15169,\n  \"prefix\": \"8.8.8.0/24\",\n  \"name\": \"Google, YouTube (for Google Fiber see AS16591 record)\",\n  \"rpki\": \"valid\",\n  \"updated_at\": \"2026-02-25T10:00:00\"\n}\n```\n\n**Use cases:**\n\n- Determine which country an IP address is located in\n- Find which organization operates an IP\n- Verify RPKI signing status of announced prefixes\n- Map traffic sources to organizations\n- Verify prefix ownership\n\n---\n\n### `ping_host` - Ping an IP Address\n\nPing an IP address from a BGP looking-glass server to test connectivity and measure round-trip time.\n\n**Parameters:**\n\n- `ip` - IPv4 or IPv6 address to ping (e.g., `8.8.8.8`, `1.1.1.1`)\n- `server` - Which route server to use for pinging (default: RouteViews Linx)\n- `format` - Response format: `text` (default) or `json`\n\n**Returns:** Ping statistics including:\n\n- **Success rate** - Percentage of successful pings (0-100%)\n- **Packets sent/received** - Total packets and successfully returned packets\n- **Round-trip times** - Minimum, average, and maximum latency in milliseconds\n\n**Example:**\n\n```python\nping_host(ip=\"8.8.8.8\")\nping_host(ip=\"1.1.1.1\", server=\"RouteViews Main\")\nping_host(ip=\"2001:4860:4860::8888\", format=\"json\")\n```\n\n**Text Output Example:**\n\n```\nPing Results for 8.8.8.8\nServer: RouteViews Linx\nPackets sent: 5\nPackets received: 5\nSuccess rate: 100%\nRound-trip times (ms): min=10.5, avg=11.2, max=12.3\n```\n\n**JSON Output Example:**\n\n```json\n{\n  \"type\": \"ping\",\n  \"ip\": \"8.8.8.8\",\n  \"server\": \"RouteViews Linx\",\n  \"stats\": {\n    \"sent\": 5,\n    \"received\": 5,\n    \"success_rate\": 100,\n    \"min_ms\": 10.5,\n    \"avg_ms\": 11.2,\n    \"max_ms\": 12.3\n  },\n  \"raw_output\": \"Success rate is 100 percent (5/5), round-trip min/avg/max = 10.5/11.2/12.3 ms\"\n}\n```\n\n**Supported Servers:**\n\n- RouteViews Main ✅\n- RouteViews Linx ❌ (command not available)\n- RouteViews 2 ❌ (command not available)\n- Other servers ❌ (limited access)\n\n**Use cases:**\n\n- Test connectivity to a remote IP address\n- Measure latency from different geographic locations\n- Verify if an IP address is reachable\n- Diagnose network issues by comparing latency\n- Monitor round-trip times over time\n\n---\n\n### `traceroute_host` - Trace Route to an IP Address\n\nTrace the network path (hops) to an IP address from a BGP looking-glass server.\n\n**Parameters:**\n\n- `ip` - IPv4 or IPv6 address to trace (e.g., `8.8.8.8`, `1.1.1.1`)\n- `server` - Which route server to use for tracing (default: RouteViews Linx)\n- `format` - Response format: `text` (default) or `json`\n\n**Returns:** Traceroute results including:\n\n- **Hop number** - Sequential hop from source to destination\n- **Hostname** - DNS name of the hop (if available)\n- **IP address** - IP address of the hop\n- **AS number** - Autonomous System number of the hop\n- **Response times** - Round-trip time for each probe (typically 3 probes per hop)\n\n**Example:**\n\n```python\ntraceroute_host(ip=\"8.8.8.8\")\ntraceroute_host(ip=\"1.1.1.1\", server=\"Equinix Sydney\")\ntraceroute_host(ip=\"2001:4860:4860::8888\", format=\"json\")\n```\n\n**Text Output Example:**\n\n```\nTraceroute to 8.8.8.8\nServer: RouteViews Linx\nTarget hostname: dns.google\nTotal hops: 12\n\n 1. gw.example.com (10.0.0.1) 1.2 1.1 1.3 ms\n 2. isp-gateway.net (203.0.113.1) [AS 64500] 5.2 5.1 5.3 ms\n 3. * (no response)\n 4. core-router.example.net (203.0.114.1) [AS 65001] 10.5 10.2 10.8 ms\n ...\n12. dns.google (8.8.8.8) [AS 15169] 25.3 25.1 25.5 ms\n```\n\n**JSON Output Example:**\n\n```json\n{\n  \"type\": \"traceroute\",\n  \"ip\": \"8.8.8.8\",\n  \"target_hostname\": \"dns.google\",\n  \"server\": \"RouteViews Linx\",\n  \"total_hops\": 12,\n  \"hops\": [\n    {\n      \"hop_number\": 1,\n      \"host\": \"gw.example.com\",\n      \"ip\": \"10.0.0.1\",\n      \"asn\": null,\n      \"times_ms\": [1.2, 1.1, 1.3],\n      \"rtt_avg_ms\": 1.2\n    },\n    {\n      \"hop_number\": 2,\n      \"host\": \"isp-gateway.net\",\n      \"ip\": \"203.0.113.1\",\n      \"asn\": 64500,\n      \"times_ms\": [5.2, 5.1, 5.3],\n      \"rtt_avg_ms\": 5.2\n    },\n    {\n      \"hop_number\": 3,\n      \"host\": \"*\",\n      \"ip\": null,\n      \"asn\": null,\n      \"times_ms\": [],\n      \"rtt_avg_ms\": null\n    }\n  ],\n  \"raw_output\": \"...\"\n}\n```\n\n**Supported Servers:**\n\n- RouteViews Main ✅\n- RouteViews Linx ❌ (command not available)\n- RouteViews 2 ❌ (command not available)\n- Other servers ❌ (limited access)\n\n**Understanding Traceroute Output:**\n\n- **Hops with times** - Successfully responded with latency data\n- **Hops with \\*** - The router didn't respond to traceroute probes (sometimes routers block ICMP/UDP)\n- **AS numbers** - Show which Autonomous Systems (networks) are involved in the path\n- **Increasing latency** - Each hop should have higher latency as you get further from the source\n\n**Use cases:**\n\n- Identify the network path between two points on the internet\n- Diagnose where network problems occur (which hop fails)\n- Understand which ASes are involved in routing traffic\n- Verify direct peering relationships between networks\n- Map network topology and interconnections\n- Debug latency issues by identifying slow hops\n\n---\n\n## Supported Route Servers\n\n13 globally-distributed public RouteViews servers, all freely accessible:\n\n| Server | Location | supports_ping | supports_traceroute |\n| -------- | ---------- | ------------- | ------------------- |\n| RouteViews Linx | London, UK | false | false |\n| RouteViews Main | Oregon, USA | true | true |\n| RouteViews2 | Oregon, USA | false | false |\n| Equinix Ashburn | Ashburn, USA | false | false |\n| DE-CIX New York | New York, USA | false | false |\n| Equinix Chicago | Chicago, USA | false | false |\n| NWAX Portland | Portland, USA | false | false |\n| AMS-IX Amsterdam | Amsterdam, Netherlands | false | false |\n| Equinix Singapore | Singapore | false | false |\n| HKIX Hong Kong | Hong Kong | false | false |\n| Equinix Sydney | Sydney, Australia | false | false |\n| IX.br São Paulo | São Paulo, Brazil | false | false |\n| RouteViews WIDE | Tokyo, Japan | false | false |\n\nAll servers are:\n\n- ✅ Publicly accessible (no registration required)\n- ✅ Freely available 24/7\n- ✅ Updated in real-time from BGP feeds\n- ✅ Maintained by the University of Oregon Route Views Project\n\n## Configuration\n\nEdit `config.json` to modify route servers or add new ones:\n\n```json\n{\n  \"servers\": [\n    {\n      \"name\": \"RouteViews Linx\",\n      \"host\": \"route-views.linx.routeviews.org\",\n      \"port\": 23,\n      \"connection_method\": \"telnet\",\n      \"username\": \"\",\n      \"password\": \"\",\n      \"prompt\": \"\u003e\",\n      \"timeout\": 15,\n      \"enabled\": true\n    }\n  ]\n}\n```\n\n### Configuration Fields\n\n- **name** - Server identifier (used when specifying which server to query)\n- **host** - Hostname or IP address of the BGP router\n- **port** - Telnet port (almost always 23)\n- **connection_method** - Currently \"telnet\"; SSH support can be added\n- **username** - Login username (empty = anonymous access)\n- **password** - Login password\n- **prompt** - Command prompt indicator (used to detect when responses are complete)\n- **timeout** - Connection timeout in seconds\n- **enabled** - Enable/disable without removing from config\n\n### Outbound rate limiting\n\nTo protect public infrastructure from connection floods, outbound requests are throttled:\n\n- Per-server telnet limit: `BGP_PER_SERVER_MAX_CONNECTIONS` (default: `2`)\n- Global outbound limit across telnet + BGPKit API calls: `BGP_GLOBAL_MAX_OUTBOUND` (default: `10`)\n\nWhen limits are reached, new requests wait for an available slot.\n\n## Running the Server\n\n### MCP Stdio Mode (Recommended for Claude Desktop)\n\n```bash\npython3 server.py --stdio\n```\n\nThis is the default for Claude Desktop integration. The server runs in the background and communicates via stdin/stdout.\n\n### Streamable-HTTP Mode\n\nFor web-based MCP clients or testing:\n\n```bash\npython3 server.py\n```\n\nStarts on `http://127.0.0.1:8000` with MCP endpoint at `/mcp`\n\nThe server supports two transport modes:\n\n- **Stdio** (`--stdio`) - For local MCP clients like Claude Desktop\n- **Streamable-HTTP** (default) - For web-based MCP clients and remote access\n\n## How It Works\n\n1. **You ask Claude a BGP question** - \"What's the AS path to 1.1.1.1?\"\n2. **Claude calls the appropriate MCP tool** - `route_lookup` with your query\n3. **The tool connects to a public route server** via telnet\n4. **Executes the BGP command** - `show ip bgp \u003cdestination\u003e`\n5. **Returns the raw router output** to Claude\n6. **Claude interprets and summarizes** the results for you\n\nAll communication uses simple on-demand telnet connections - no persistent sessions, no complex infrastructure.\n\n## Project Structure\n\nThe server consists of:\n\n- **server.py** - Main MCP server with all tools\n- **bgp_lg.py** - Library with worker functions (telnet client, IP validation, ASN lookup, config management)\n- **config.json** - Configuration for available route servers\n- **pyproject.toml** - Python dependencies\n\n## Examples\n\n### Check if a subnet is routed\n\n```text\nUser: Is 203.0.113.0/24 currently routed to the internet?\nClaude: route_lookup(destination=\"203.0.113.0/24\")\nResult: [Shows all routes matching that prefix from the route server]\nClaude: Based on the BGP data, this subnet is being announced by AS65001 with these paths...\n```\n\n### Look up an ASN owner\n\n```text\nUser: Who operates AS15169?\nClaude: asn_owner(asn=\"AS15169\")\nResult: Google LLC\nClaude: AS15169 is operated by Google LLC, which owns several large networks...\n```\n\n### Compare routing across regions\n\n```text\nUser: How does traffic to Google DNS (8.8.8.8) route from different regions?\nClaude: Calls route_lookup for 8.8.8.8 with different servers\nClaude: Shows how different route servers see the path to Google's infrastructure\n```\n\n### Monitor route server health\n\n```text\nUser: Is the Linx route server operating normally?\nClaude: bgp_summary(server=\"RouteViews Linx\")\nResult: Shows 63 active BGP neighbors, millions of routes, healthy sessions\nClaude: Yes, the Linx route server is operating normally with X neighbors...\n```\n\n## Requirements\n\n- Python 3.7+\n- Dependencies listed in `requirements.txt` (FastAPI, uvicorn, mcp)\n\n## Installation\n\n```bash\ngit clone https://github.com/yourusername/bgp-lg-mcp.git\ncd bgp-lg-mcp\npip install -e .\n```\n\n## Development\n\nInstall with dev dependencies:\n\n```bash\npip install -e \".[dev]\"\n```\n\n## Performance\n\n- **Connection time**: 50ms - 1.1s (depending on server)\n- **Command execution**: Typically \u003c500ms\n- **Total query time**: 0.5s - 1.5s per query\n- **No startup delay** - tools available immediately\n\n## Troubleshooting\n\n### Connection Error in Claude Desktop\n\n**Error:** \"Connection Error - Check if your MCP server is running...\"\n\n**Solution:** Ensure the server is running:\n\n```bash\npython3 server.py --stdio\n```\n\nAnd verify the config path in `claude_desktop_config.json` is correct.\n\n### Route lookup returns no results\n\n**Possible causes:**\n\n- The destination is a private IP (10.x.x.x, 192.168.x.x, etc.) - these are blocked for safety\n- The route server is temporarily unreachable\n- The server is overloaded (try a different server)\n\n**Solution:** Try a different server or verify the IP is public:\n\n```python\nroute_lookup(destination=\"1.1.1.1\", server=\"Equinix Ashburn\")\n```\n\n### Server won't start\n\n**Check:**\n\n- Python 3.7+ is installed: `python3 --version`\n- Dependencies are installed: `pip install -e .`\n- Port 8000 isn't in use (for streamable-http mode): `lsof -i :8000`\n\n## Limitations\n\n- **Telnet only** - Currently only supports telnet connections (RFC 854 compatible)\n- **Public IPs only** - Private/reserved address ranges are blocked\n- **No authentication required** - All configured servers are public and free\n- **Outbound request throttling** - Per-server and global concurrency limits are enforced\n\n## Contributing\n\nContributions welcome! Areas of interest:\n\n- SSH support for servers that don't support telnet\n- Additional public route servers\n- Performance optimizations\n- Additional BGP query types\n- Better error handling and diagnostics\n\n## License\n\nMIT\n\n## About BGP and Looking Glasses\n\n**BGP (Border Gateway Protocol)** is the routing protocol of the internet. It allows autonomous systems (networks) to exchange routing information.\n\n**A Looking Glass** is a service that exposes a BGP speaker's routing table and allows queries. They're invaluable for:\n\n- Troubleshooting routing issues\n- Verifying prefix announcements\n- Monitoring BGP session health\n- Network operations and visibility\n\nLearn more:\n\n- [Route Views Project](http://www.routeviews.org/) - Maintains the public servers used here\n- [BGP Basics](https://en.wikipedia.org/wiki/Border_Gateway_Protocol)\n- [Looking Glass Servers](http://www.routeviews.org/routeviews/index.php?type=lg)\n\n## Support\n\nIf you encounter issues or have suggestions, please open an issue on GitHub or check the troubleshooting section above.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonpainter%2Fbgp-lg-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimonpainter%2Fbgp-lg-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonpainter%2Fbgp-lg-mcp/lists"}