FindIP
OfficialFindIP MCP server
Ask your assistant about an IP address or a risky session, and get the answer from FindIP.
@findip/mcp is a Model Context Protocol server for FindIP. It gives Claude, Cursor and other MCP clients IP intelligence and FindIP Shield risk signals. It runs locally over stdio and only reads data.
Tools
Tool | What it does | Key |
| Country, city, ISP and ASN for an IP, plus risk signals: VPN, proxy, Tor, relay, hosting, scanner, malicious listings, threat score | API key |
| Server-side risk check for a Shield session: score, recommendation, challenge status, IP and network rotation | Site secret key |
| Your Shield sites with today's event and risky-event counts | API key |
| Recent high-risk events on a site, for example "what risky traffic hit my signup form this week" | API key |
| One event in plain language: where it came from, which signals fired, what was recommended | API key |
All five tools are read-only. docs/BACKEND.md lists the FindIP endpoint behind each one.
Related MCP server: IPLocate MCP Server
Setup
You need Node.js 18.17 or later and a FindIP API key. Keys are free at findip.net.
Claude Code
claude mcp add findip --env FINDIP_API_KEY=your_api_key -- npx -y @findip/mcpClaude Desktop
Add this to claude_desktop_config.json (Settings, Developer, Edit Config), then restart Claude Desktop:
{
"mcpServers": {
"findip": {
"command": "npx",
"args": ["-y", "@findip/mcp"],
"env": {
"FINDIP_API_KEY": "your_api_key"
}
}
}
}Cursor
Add this to ~/.cursor/mcp.json, or to .cursor/mcp.json in a project:
{
"mcpServers": {
"findip": {
"command": "npx",
"args": ["-y", "@findip/mcp"],
"env": {
"FINDIP_API_KEY": "your_api_key"
}
}
}
}Configuration
Variable | Purpose |
| Your FindIP API key. Required for |
| Secret key ( |
| Set to |
| Request timeout. Default 15000. |
| Override the FindIP hosts, for testing. |
The Shield account tools allow 60 requests per account per minute. Repeated requests with a wrong key are blocked for 10 minutes.
Keys are read from the environment only. They are never accepted as tool arguments and never appear in tool output or error messages.
Examples
"Look up 203.0.113.9. Is it a VPN or a hosting provider?"
"Verify Shield session sess_8f2c and tell me why it was flagged."
"What risky traffic hit my signup form this week?"
"Explain event 5b1e... on shop.example. Should I worry?"
How to read the results
FindIP reports risk signals. A VPN, a hosting network or a high score tells you about the connection, not about the person behind it. Use the signals to decide who gets a closer look, an extra step or a manual review.
The Shield browser SDK collects signals and can add friction in the page, but a browser can be scripted or bypassed, so it is not a security boundary. Decisions that matter belong on your server: call server verification (the endpoint verify_session uses) from your backend before you allow, challenge or block. A session with risk_status: "unknown" had no IP intelligence; treat it as unknown, not as safe.
Privacy
The server talks only to FindIP:
api.findip.net,shield.findip.netandwww.findip.net.Shield tools never return end-user identity (email, user ID and their hashes). FindIP removes it before the data leaves its servers.
Site listings are a short summary: no site keys, no settings.
No telemetry, and nothing is written to disk.
Development
npm install
npm run typecheck
npm test # vitest, all HTTP mocked
npm run buildLicense
MIT
Available Tools
5 toolsexplain_eventExplain a Shield eventARead-onlyIdempotent
Explains one Shield event in plain language: where it came from, which risk signals fired, the score and recommendation, and what the in-page SDK did. The explanation describes risk signals, not a verdict about the visitor.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Site ID, name or domain. Optional; without it each of your sites is checked | |
| event_id | Yes | Event ID from recent_risky_events |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive and openWorld, so the safety profile is covered. The description adds real behavioral context beyond that: what the response contains and, importantly, the framing caveat that it reports risk signals rather than a verdict about the visitor, which shapes how an agent should present results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the resource and the payload contents, and the second sentence delivers the interpretive caveat. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly takes on the burden of describing return values by enumerating the fields of the explanation. It leaves unaddressed only edge behavior, such as what happens when an event_id is not found or the site scope is ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (site scoping and event_id provenance) are already documented in the schema. The description adds no syntax, format, or resolution detail for site/event_id, so it sits at the baseline where the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Explains) and resource (one Shield event), then enumerates the exact contents of the explanation: origin, risk signals that fired, score, recommendation, and in-page SDK behavior. That level of detail distinguishes it from recent_risky_events, which lists rather than explains events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The descoping is implicit: 'one Shield event' signals single-event investigation, and the schema's event_id note points an agent at recent_risky_events as the source. But the description itself never states when to choose this over recent_risky_events or lookup_ip, nor whether it must follow one of them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_shield_sitesList Shield sitesARead-onlyIdempotent
Lists the FindIP Shield sites on your account: ID, name, domain, status, last event time and today's event and risky-event counts. Start here to find the site to ask about.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. With no output schema, the description earns credit for spelling out the shape of the returned record (per-site identity plus last-event and today's event/risky-event counts), which is behaviorally informative. It omits account/scope caveats and any pagination or result-size behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first defines the resource and returned fields, the second front-loads usage guidance. No filler, and the actionable routing cue is placed last where it reads as the takeaway.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema and rich annotations, the description supplies what an agent needs to call it and interpret the result. Minor gaps remain around result size, ordering, and what 'today' means (time zone), but these do not block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The description correctly implies no filtering or argument-based scoping; the caller just invokes it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists') and resource ('FindIP Shield sites on your account') and enumerates the fields returned (ID, name, domain, status, last event time, event counts). It doesn't name a sibling explicitly, but 'Start here to find the site to ask about' distinguishes it from lookup_ip, recent_risky_events and explain_event by positioning it as the object-discovery step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Start here' gives clear guidance on where this tool fits in a workflow, implying it precedes per-site or per-IP queries. It stops short of saying when not to use it or naming the specific follow-up tools, so the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_ipLook up an IP addressARead-onlyIdempotent
IP intelligence for one IPv4 or IPv6 address from FindIP: country, city, ISP and ASN, connection type, and risk signals (VPN, proxy, Tor, relay, hosting, scanner, malicious listings, threat score). Signals describe the network an address belongs to, not the person using it.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IPv4 or IPv6 address, for example 8.8.8.8 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered and the bar is lower. The description adds one genuinely valuable interpretive caveat — signals describe the network, not the person — which prevents misattribution of VPN/Tor flags to an individual. It does not mention rate limits, auth/provider requirements, or behavior on invalid input, so it adds context but is not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the purpose and return fields, followed by a single caveat that earns its place. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return values and does so by enumerating the field groups. Combined with full schema coverage and complete annotations, an agent has what it needs to call this correctly; only error/failure behavior is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so the schema already documents the IPv4/IPv6 format and an example. The description restates the same accepted formats and adds no further syntax, normalization, or validation guidance. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'IP intelligence for one IPv4 or IPv6 address' — and enumerates the exact fields returned (country, city, ISP, ASN, connection type, risk signals). This is clearly distinguishable from the session- and site-oriented siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implicit: the agent can infer this is the tool for resolving attributes of a known address. However, the description never states when to reach for it versus explain_event or recent_risky_events, nor does it give any prerequisite or exclusion. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_risky_eventsRecent risky eventsARead-onlyIdempotent
Recent events on one Shield site at or above a risk score, newest first: event name, page, IP, country, network, network signals, score, recommendation and reasons. Good for questions like "what risky traffic hit my signup form this week". End-user identity is never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| site | Yes | Site ID, name or domain, as shown by list_shield_sites | |
| limit | No | Maximum events to return. Default 25 | |
| range | No | Time window. Default 7d | |
| event_name | No | Only this event, for example signup_attempt, login_attempt or payment_attempt | |
| min_risk_score | No | Lowest risk score to include. Default 50 (high and critical) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the description builds on that by disclosing result ordering, the per-event payload shape, and the privacy property ('End-user identity is never returned') — a behavioral fact an agent would otherwise not know. It omits any note on truncation or how the default risk threshold interacts with the returned set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope ('one Shield site', 'newest first') is front-loaded and the use-case example plus privacy note are short and purposeful. The enumerated field list makes the opening sentence long and dense, but it substitutes for an absent output schema rather than wasting space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned fields, and it adds ordering, scoping, and a privacy guarantee. Combined with a fully documented five-parameter schema, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with every parameter documented and enums constrained, so the schema does the heavy lifting. The description reinforces 'at or above a risk score' and 'one Shield site' but adds no format or default details beyond the schema — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Recent events on one Shield site at or above a risk score'), with ordering ('newest first') and the exact fields returned. It distinguishes itself from explain_event by being a scoped list rather than a single-event explanation, though it never names the sibling outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example question ('what risky traffic hit my signup form this week') gives an agent a concrete trigger for selecting this tool over lookup_ip or verify_session. It gives no explicit when-not-to-use or named alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_sessionVerify a Shield sessionARead-onlyIdempotent
Server-side risk check for one FindIP Shield session: risk score, recommendation (allow, monitor, challenge, block), whether a challenge was passed, and the session picture (IP, ASN and country rotation, network flags, risk reasons). This is the same check a backend runs before acting on a signup, login or checkout. An unknown session returns verified: false; a session without IP intelligence returns risk_status "unknown", which is not the same as safe. Uses the site secret key from FINDIP_SHIELD_SECRET_KEY.
| Name | Required | Description | Default |
|---|---|---|---|
| event | No | Optional event the check is for, for example signup_attempt | |
| session_id | Yes | Shield session ID sent by the browser SDK (FindIP.getSession().sessionId) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing the auth requirement (site secret key from FINDIP_SHIELD_SECRET_KEY) and two non-obvious edge cases: unknown sessions return verified: false, and missing IP intelligence yields risk_status "unknown", explicitly flagged as not equivalent to safe. These are exactly the failure modes an agent would otherwise misread.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the operation and its outputs come first, edge cases and the auth requirement follow. Every sentence contributes, though the paragraph is long with no visual separation between capability, edge cases, and prerequisites.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of explaining return values and does so concretely, plus the two deceptive-return cases and the credential requirement. An agent has everything needed to call it and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema, and the description adds little parameter-level detail beyond implying the session_id targets a single session and that event is contextual. Baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Server-side risk check for one FindIP Shield session') and then enumerates exactly what the check yields: risk score, recommendation, challenge status, and the session picture. The 'one session' scoping implicitly separates it from aggregate siblings like recent_risky_events and IP-only siblings like lookup_ip.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the use case — 'the same check a backend runs before acting on a signup, login or checkout' — which tells an agent precisely when this tool belongs in a flow. It does not name alternatives or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
explain_event - First observed
list_shield_sites - First observed
lookup_ip - First observed
recent_risky_events - First observed
verify_session
TDQS
Scored across 5 tools
Each tool targets a clearly distinct object and action: raw IP intel (lookup_ip), session risk verdict (verify_session), site inventory (list_shield_sites), site-level event listing (recent_risky_events), and single-event narrative (explain_event). The descriptions explicitly disambiguate the look-alike pair (IP-level vs session-level risk) and clarify that 'unknown' is not 'safe'. The two event tools are separated by list-vs-explain, which is easy for an agent to reason about.
Four of five names follow a verb_noun pattern (lookup_ip, verify_session, list_shield_sites, explain_event). The exception is recent_risky_events, a bare noun phrase with no verb, which breaks the otherwise predictable convention. All are snake_case, so the deviation is minor rather than chaotic.
Five tools is a tight, well-scoped set for an IP intelligence plus Shield session/event domain, and each tool has an evident role. It sits at the low end, with no room for filtering or drill-down variants, which is a slight under-provisioning rather than an excess.
Core read workflows are covered (identify a site, list its risky events, explain one event, check a session, look up an IP), but there are notable gaps: no way to list all events for a site regardless of risk, no event-detail fetch separate from the plain-language explanation, and no session listing or site configuration inspection. An agent asking 'what happened on my site today' or 'show me this specific event's raw data' can hit a dead end.
Maintenance
Related MCP Connectors
Free IP risk and geolocation lookup: proxy, VPN and datacenter detection. No API key.
IP geolocation, ASN and network data, plus VPN, proxy and Tor detection. ASN tools need no key.
Free no-key IP intelligence: geolocation, VPN detection, DNS, WHOIS, blacklists, breach checks
Check IPDetective usage and investigate IP bot, VPN, proxy, ASN and country signals.
Related MCP Servers
- AlicenseAqualityDmaintenanceLook up IP address geolocation, network information, detect proxies and VPNs, and find abuse contact details using IPLocate.io628 npm20MIT
- AlicenseNot gradedqualityDmaintenanceEnables IP address intelligence lookup including geolocation, network information, privacy detection (VPN/proxy/Tor), company data, and abuse contacts using IPLocate.io API. Supports both IPv4 and IPv6 addresses with comprehensive analysis tools and security assessment capabilities.28 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides a no-key IP intelligence API for MCP clients, enabling IP geolocation, VPN/datacenter detection, DNS, WHOIS, blacklist checks, security headers, port scanning, and more.MIT
- AlicenseNot gradedqualityAmaintenanceEnables checking any IP address for VPN, proxy, Tor, datacenter hosting, anonymity, and fraud risk signals, plus API service status, directly from MCP-capable clients like Claude and Cursor.98 npm2MIT