Official MCP server for IP geolocation, IP security, abuse contacts, ASN, timezone, astronomy, and user-agent parsing.
This server demonstrates solid tool definition quality with comprehensive schemas, detailed descriptions, and clear parameter documentation. All 4 tools have proper input schemas with type definitions and descriptions. Tool names follow verb_noun convention (get_*, lookup_*). Descriptions are substantive (150-350 chars, within baseline 194 char average) and explain WHAT the tool does, WHEN to use it, and key parameters. Parameters uniformly include descriptions and type constraints. However, output schemas are not explicitly documented in the visible code, only inferred from API documentation quoted in descriptions. Error handling is mentioned in descriptions (e.g., 'returns 401 on free plans') but recovery guidance is limited. No per-tool success/failure structure for batch operations. Tool annotations (toolAnnotations=true) are declared but not visible in source snippets provided. Overall, this is a well-crafted server that would benefit from explicit output schema documentation and richer error recovery patterns.
Read-only abuse contact lookup via GET /v3/abuse. Paid only. Cost: 1 credit. This endpoint is dedicated to abuse contact data; lookup_ip with include=abuse provides abuse data together with location, security, ASN/company, timezone, network, or currency. Returns { ip, abuse } with route, country, name, organization, kind, address, emails, and phone_numbers for reporting abuse. fields/excludes accept comma-separated abuse.* paths such as abuse.emails; ip is always returned. force_refresh bypasses cached data, makes a new upstream request, and can consume credits.
Read-only single-date astronomy lookup via GET /v3/astronomy. Works on free and paid plans. Cost: 1 credit. This endpoint covers one date or real-time sun/moon position; get_astronomy_time_series provides daily sunrise, moon, and twilight data across a date range. Returns { location, astronomy } plus ip for IP/caller lookups. astronomy includes date/current_time, sunrise/sunset, moonrise/moonset, twilight blocks, day_length, sun/moon position, distance, status, moon_phase, moon_illumination_percentage, and moon_angle. Selector priority is lat/long, location, ip, then caller IP when no selector is provided. lat and long must be provided together; date must be YYYY-MM-DD; elevation must be 0-10000 meters. time_zone changes timestamp formatting to include full dates. lang only changes location fields; non-English lang is paid-only and returns 401 on free plans.
Read-only daily astronomy series via GET /v3/astronomy/timeSeries. Works on free and paid plans. Cost: 1 credit per request. This endpoint covers date ranges up to 90 days; get_astronomy provides one-date and real-time sun/moon data. Returns { location, astronomy: [...] } with one daily item per date containing sunrise/sunset, moonrise/moonset, twilight blocks, day_length, sun/moon status, and moon_phase. Selector priority is lat/long, location, ip, then caller IP when no selector is provided. dateStart and dateEnd are required YYYY-MM-DD values with a maximum 90-day span. lat and long must be provided together; elevation must be 0-10000 meters. time_zone changes timestamp formatting to include full dates. lang only changes location fields; non-English lang is paid-only and returns 401 on free plans. force_refresh bypasses cached data, makes a new upstream request, and can consume credits.
Output schemas not explicitly documented in tool registration code. Only API response structure is described in narrative text. LLMs cannot plan downstream tool calls without knowing exact field names and types returned.
Error handling provides API status codes (401, 4xx) but no recovery guidance. Descriptions state 'returns 401 on free plans' without suggesting what action the agent should take (upgrade account, use free endpoint, etc.).
Parameters use string type for numeric-like inputs (lat, long, elevation, asn, date ranges). While documented with constraints in descriptions (lat/long are coordinates, elevation is 0-10000 meters), JSON Schema should use number type for lat/long and integer for elevation to enable type-aware LLM selection and validation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 72 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 67 | - | v1 |
Read-only ASN enrichment via GET /v3/asn. Paid only. Cost: 1 credit. Queries accept asn or ip, with asn taking priority. The response covers ASN relationships, route prefixes, allocation details, and WHOIS; lookup_ip provides basic ASN data together with geolocation. Returns { asn } core fields plus included peers, downstreams, upstreams, routes, or whois_response. include accepts those five values. fields/excludes accept full asn.* paths or root-relative paths such as upstreams.as_number. force_refresh bypasses cached data, makes a new upstream request, and can consume credits.
No explicit pagination guidance in schemas or return types. API likely returns paginated results, but tools do not expose offset/limit/cursor parameters or total count documentation.
dateStart and dateEnd parameters in get_astronomy_time_series are marked optional=false but descriptions reference them as 'Required' in prose. Schema definition should use required array or proper constraint.