An MCP server that gives AI agents access to public internet interconnection data: who peers with whom, where, and under what policy.
Five tools with strong naming (verb_noun pattern), comprehensive descriptions (150-300 chars each), and complete input schemas with types and descriptions. Tool annotations present (read_only_hint, open_world_hint). Output schemas documented in docstrings. Key weakness: descriptions are lengthy and could be more concise for LLM parsing; some parameter descriptions embed examples rather than using enums; error handling guidance is minimal.
List the networks present at one internet exchange. Use this to answer who is at an exchange and who there would peer: the inverse of list_presence. It is the tool for "we are already at this exchange, who else is here" and for sizing an exchange before joining it.
Find the internet exchanges and facilities several networks all share. Use this to answer where two or more networks could interconnect. It does the intersection for you: call it once with every AS number, rather than calling list_presence per network and comparing the lists yourself, which is slower and gets the edge cases wrong. Get the AS numbers from lookup_network first if you only have names.
List the internet exchanges and facilities one network is present at. Use this to answer where a network can be reached: which exchanges it has ports at and how much capacity, and which data centres it is in. Get the AS number from lookup_network first if you only have a name.
Look up a network on the internet by AS number or by name. Use this to answer who a network is, how big they are, and whether they will peer. It is the starting point for any question about interconnection: other tools take an AS number, and this is how you get one from a name.
Look up who owns an IP address or address range. Use this to answer who a network is by their address space, and whether they hold the addresses they claim. It is the tool for "this IP is at this exchange, who is it" and for checking whether a network's IRR records match reality.
Descriptions exceed 300 chars and embed examples ('AS3320', 'Hurricane', 'DE-CIX Frankfurt') that LLMs may reuse literally. Should use enums/patterns instead.
No error handling guidance in tool descriptions. LLMs cannot determine what to do if a lookup returns 'not_found' or 'ambiguous'. Missing recovery hints.
Parameter 'policy' in find_at_exchange has enum values but description says 'Optionally keep only networks stating this general peering policy' without explaining what each enum means or when to use it.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Output schemas documented in docstrings but not formally exposed in tool registration. LLMs cannot parse docstring prose to infer response structure for chaining.
No pagination guidance in list_presence or find_at_exchange descriptions. Limit defaults to 50 but no mention of total count or next_cursor in response.