AbuseIPDB MCP
AbuseIPDB MCP is our first-party Model Context Protocol server. It lets an AI assistant such as Claude, Cursor, VS Code Copilot, or Codex look up IP reputation directly from AbuseIPDB while you work, instead of you copying addresses into a browser tab.
Status: beta · stdio transport · read-only.
What is MCP?
The Model Context Protocol (MCP) is an open standard that lets an AI assistant call external tools in a structured way. An MCP server is a small program that advertises a set of tools; an MCP client is the application you already use — Claude Desktop, Claude Code, Cursor, VS Code with GitHub Copilot, or Codex.
You do not run AbuseIPDB MCP yourself. Your client launches it when it needs it, passes it your AbuseIPDB API key, and talks to it over standard input and output. When the assistant needs to know whether an IP address is malicious, it calls one of the server's tools and gets structured data back.
The server is read-only. It only looks IP addresses up. It cannot submit reports, and it cannot fetch blacklists. Lookups consume your API quota, but do not submit or change abuse reports.
Why use it?
- No tab switching: ask about an IP address inside the tool you are already working in.
- No manual lookup: the assistant pulls confidence score, report count, country, ISP, usage type, and domain in one call.
- Bulk triage: paste a list of addresses and check them with one tool call. The server makes a separate AbuseIPDB API request for each unique, valid address.
- Log investigation: hand the assistant a log excerpt and let it extract and check the addresses it finds.
- Plain-English summaries: every result includes a risk tier and a short summary alongside the raw fields.
Before you start
- An AbuseIPDB API key. Create one for free on your API settings page.
- Python 3.11 or newer.
- uv, which provides the
uvxcommand. Every example below usesuvx, which downloads and runs the server on demand. There is nothing to install first.
Your MCP client starts the server for you. To check that it can start from a macOS or Linux terminal first, run:
ABUSEIPDB_API_KEY=your_key_here uvx mcp-server-abuseipdb
For Windows PowerShell:
$env:ABUSEIPDB_API_KEY = "your_key_here"
uvx mcp-server-abuseipdb
The server waits for MCP input, so an idle terminal is expected. Starting it checks that a key is present, but does not validate the key against AbuseIPDB. Press Ctrl+C to stop it, then configure your client below and make a lookup to verify the connection.
Quick start
Pick the section that matches your client, save the configuration, then restart or reload the client. The
package on PyPI is mcp-server-abuseipdb. If your configuration already contains other servers,
add the abuseipdb entry alongside them.
Claude, Cursor, and other mcpServers clients
Most MCP clients accept a top-level mcpServers object. That includes Claude Desktop
(Settings → Developer → Edit Config), Claude Code (.mcp.json in your
project root), and Cursor (.cursor/mcp.json for one project, ~/.cursor/mcp.json for all
of them).
{
"mcpServers": {
"abuseipdb": {
"command": "uvx",
"args": ["mcp-server-abuseipdb"],
"env": {
"ABUSEIPDB_API_KEY": "your_key_here"
}
}
}
}
In Cursor, also add "type": "stdio" inside the abuseipdb entry. Restart Claude Desktop
after saving, or reload the MCP server in your editor.
For shared project files, reference an environment variable instead of committing a key. The syntax differs by client:
- Claude Code: use
"ABUSEIPDB_API_KEY": "${ABUSEIPDB_API_KEY}". - Cursor: use
"ABUSEIPDB_API_KEY": "${env:ABUSEIPDB_API_KEY}".
Set the variable in the environment that launches the client before starting it. Keep Claude Desktop's configuration private; do not assume it supports the same variable substitution.
VS Code with GitHub Copilot
Save this as .vscode/mcp.json in your workspace. For a user-level setup, run
MCP: Open User Configuration from the Command Palette. VS Code prompts you for the key rather
than storing it in the file:
{
"inputs": [
{
"id": "abuseipdb-api-key",
"type": "promptString",
"description": "AbuseIPDB API key",
"password": true
}
],
"servers": {
"abuseipdb": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-server-abuseipdb"],
"env": {
"ABUSEIPDB_API_KEY": "${input:abuseipdb-api-key}"
}
}
}
}
Run MCP: List Servers to start, restart, or inspect the server.
Codex
Add this to ~/.codex/config.toml for all projects, or to .codex/config.toml inside a
trusted project:
[mcp_servers.abuseipdb]
command = "uvx"
args = ["mcp-server-abuseipdb"]
[mcp_servers.abuseipdb.env]
ABUSEIPDB_API_KEY = "your_key_here"
Restart Codex after saving. For a project configuration you intend to commit, omit the
[mcp_servers.abuseipdb.env] block and add env_vars = ["ABUSEIPDB_API_KEY"] under
[mcp_servers.abuseipdb] instead. Set the variable before starting Codex. See the
Codex MCP documentation.
Example prompts
Once the server is connected, confirm that your client lists check_ip and bulk_check,
then ask in plain language. Approve the tool call if your client prompts you. A successful lookup verifies
that your API key works; an authentication error means the key needs checking on your API settings page.
Single IP check
- “Check 118.25.6.39 on AbuseIPDB.”
- “Is 1.2.3.4 malicious? Use the last 90 days of reports.”
- “What ISP and country does 8.8.8.8 belong to, and has it been reported?”
Bulk check
- “Check all of these against AbuseIPDB and tell me which ones are risky: 1.2.3.4, 5.6.7.8, 9.10.11.12.”
- “Here are the top 20 source IPs from my firewall export. Rank them by abuse confidence score.”
Log investigation
- “Pull the source IPs out of this SSH auth log, check them on AbuseIPDB, and summarise anything scoring above 50.”
- “These addresses hit my login endpoint overnight. Which are known brute-force sources?”
Tool reference
check_ip
Checks one public IP address.
| Parameter | Default | Notes |
|---|---|---|
ip |
required | Public IPv4 or IPv6 address |
max_age_in_days |
30 |
AbuseIPDB report window, 1–365 |
verbose |
true |
Include AbuseIPDB report details when available |
Returns the abuse confidence score, a risk tier, report metadata, source fields such as country, ISP, usage type and domain, and a short plain-English message.
bulk_check
Checks a list of public IP addresses.
| Parameter | Default | Notes |
|---|---|---|
ips |
required | IPv4 or IPv6 addresses, up to 100 per call by default |
max_age_in_days |
30 |
AbuseIPDB report window, 1–365 |
Duplicate addresses are removed before the lookup. Invalid addresses come back as per-item errors rather than failing the whole call. If AbuseIPDB rate-limits one item, the remaining items in that same call are marked skipped instead of being burned against an exhausted quota.
Limits and safety
- A score of 0 is not proof an IP is safe. Review the report count and available report
details as well as the score.
max_age_in_dayscontrols the report window; it does not recalculate the abuse confidence score for that window. - Each API lookup uses your check quota. A
bulk_checkthat checks 100 unique, valid addresses makes 100 API requests. Duplicates, locally rejected inputs, and items skipped after a rate limit do not trigger additional requests. AbuseIPDB determines the quota; the server does not cache or predict whether a later request will be allowed. - Rate limits surface as errors, not silence. An HTTP 429 comes back as a structured
RATE_LIMITEDerror, and a later call works again as soon as your quota allows. When your remaining quota drops to 10% or less of your plan limit, results carry a notice. - Public addresses only. Hostnames, URLs, CIDR ranges, and private or reserved addresses are rejected by default.
- Keep your key out of source control. Use a private client configuration, your client's
environment-variable syntax, or its secret prompt. An
envblock containing a literal key is still a secret and must not be committed. Never place the key inargs. The server reads the key from the environment and does not return it in tool output.
Links
- Source on GitHub
-
mcp-server-abuseipdbon PyPI - MCP Registry
(
io.github.abuseipdb/abuseipdb-mcp) - Get an AbuseIPDB API key