AbuseIPDB MCP — wraps AbuseIPDB v2 API (api.abuseipdb.com/api/v2)
Three tools with complete input schemas and descriptions, but significant gaps in output documentation and parameter constraints. Tool names follow verb_noun pattern (check_ip, report_ip, get_blacklist). Descriptions are present (118-156 chars) and explain what each tool does, but lack guidance on when to use them or dependencies. Parameters have types and descriptions, but lack enums, ranges, and format constraints. No output schemas documented, LLMs cannot predict response structure for downstream chaining. Error handling is basic (generic API errors). Security concern: _apiKey exposed as parameter instead of server-side injection.
Check an IP address against the AbuseIPDB database. Returns abuse confidence score (0-100), ISP, usage type, country, number of reports, and last reported date. Example: check_ip("8.8.8.8").
Get the AbuseIPDB blacklist of the most-reported IP addresses. Returns IPs with their abuse confidence scores. Useful for building blocklists.
Report an abusive IP address to AbuseIPDB. Requires category IDs (e.g., "18,22" for DDoS + SSH brute force). Returns the updated abuse confidence score.
API key exposed as tool parameter (_apiKey) instead of server-side secret injection. Credentials in parameters leak into agent logs and prompt history.
No output schemas documented. LLMs cannot predict response structure (e.g., check_ip returns {ip, is_public, abuse_confidence_score, ...}). Breaks tool chaining and forces LLMs to guess field names.
Parameters lack constraints: 'ip' has no format validation (IPv4/IPv6 pattern), 'limit' has no min/max bounds (stated as 'default 100, max 10000' in description but not enforced), 'categories' accepts free-form string instead of enum of valid category IDs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Error handling is generic ('AbuseIPDB API error (status): text'). Does not guide LLM on recovery: is it retryable? Should user check API key? Are rate limits hit? No actionable error messages.
get_blacklist returns unbounded list (up to 10,000 IPs). No pagination support (offset/cursor). Returning thousands of items wastes tokens and risks context window exhaustion.