IP Geolocation MCP Server
The IP Geolocation MCP Server retrieves detailed information about IP addresses using the ipinfo.io API.
Capabilities:
Geolocation: Determine the approximate geographic location of IP addresses
Network Information: Retrieve details about internet service providers (ISPs) or network operators
IP Analysis: Get comprehensive data including country, organization, and other relevant details
Client IP Lookup: Automatically fetch information about the requesting client's IP if no specific IP is provided
Integration: Easily integrate with tools like Claude desktop via configuration
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@IP Geolocation MCP Serverwhere is 8.8.8.8 located?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
IP Geolocation MCP Server
A Model Context Protocol server that exposes the ipinfo.io API to AI agents. Geolocate IPv4 and IPv6 addresses, identify ISPs and ASNs, detect VPN/proxy/Tor exit nodes, and generate interactive maps for sets of IPs.
Installation
Sign up for a free IPInfo API token at https://ipinfo.io/signup if you don't have one. The server runs with no token (free Lite tier — country and ASN basics) but most fields require a token.
Claude Desktop (one-click bundle)
Download the .mcpb bundle from the latest release and open it to install in Claude Desktop. You can set your IPINFO_API_TOKEN (and optional cache tuning) in the install dialog; leave the token blank to run in the free Lite tier. The bundle launches the server with uv, so uv must be installed and on your system PATH (GUI apps don't inherit your shell's PATH).
Other MCP clients
Most MCP clients accept the following values:
Field | Value |
Command |
|
Arguments |
|
Environment |
|
Development Version
To run the latest from main:
Field | Value |
Command |
|
Arguments |
|
Environment |
|
Related MCP server: GeoIP MCP Server
Tools
ipinfo_lookup_my_ip()— Geolocate the calling client's own IP. Takes no arguments. On stdio transports the result reflects this server's outbound IP, not the end user's.ipinfo_lookup_ips(ips, detail="summary")— Geolocate one or more specified IPs. Defaults todetail="summary", which omits heavy nested blocks (continent, flags, currency, abuse, domains) for batch token savings; passdetail="full"for every field. Capped at 500,000 IPs per call. Invalid or special-use addresses (private, loopback, etc.) are filtered withctx.warning()and excluded from the result list, as are IPs that fail upstream — match returnedIPDetails.ipvalues back to your input to detect what was dropped. If every attempted lookup fails, a temporaryapi_erroris raised.ipinfo_summarize_ips(ips, group_by=("country", "asn"), top_n=50)— Geolocate and aggregate a batch into fixed-size counts and percentages by country, continent, ASN, and/or privacy flags. Use this for large log-analysis tasks where per-IP records would waste context. Returns mapped, skipped, and failed counts plus capped top-N groups.ipinfo_check_residential_proxy(ip)— Check whether an IP is a known residential-proxy exit node. Taggedenterprise— requires the IPInfo residential-proxy add-on.ipinfo_generate_map_url(ips)— Build an interactive ipinfo.io map for a set of IPs. Returns aMapResultwith the URL, the count that made the map, the IPs filtered out (with reasons, capped at 100), and atruncatedflag.
Plan tiers
Tier | Fields available |
Free Lite (no token) | country, country_code, continent, ASN basics |
Core | full geolocation, ASN details, privacy/VPN/proxy/Tor/hosting flags |
Plus | adds carrier and company data |
Enterprise | adds domains and abuse contacts |
Residential-proxy add-on | enables |
Errors
Every tool raises a ToolError whose message is a JSON-encoded envelope with a stable code (invalid_ip_address, special_ip_unsupported, no_valid_ips, too_many_ips, auth_invalid, auth_insufficient_scope, quota_exceeded, timeout, api_error, unknown_error), a temporary flag, optional retry_after_ms, a repair hint, and a request_id correlation id. Agents should parse the message as JSON and branch on code. Each tool also advertises the subset of codes it can raise via meta.error_codes, so you can see the branch set from tool introspection.
Configuration
Environment Variables
Variable | Description | Default |
| IPInfo API token. Without it the server runs in free Lite mode. | unset (Lite) |
| Per-IP cache TTL in seconds. Cached results retain their original |
|
| Maximum cache entries before oldest-first eviction. |
|
License
MIT License — see LICENSE. Release history in CHANGELOG.md.
Disclaimer
This project is not affiliated with IPInfo.
Available Tools
5 toolsipinfo_check_residential_proxyCheck Residential ProxyARead-onlyIdempotent
Classify whether an IP is a known residential-proxy exit node.
Returns ResidentialProxyDetails with is_residential_proxy (the canonical
yes/no), and — when true — service, last_seen (YYYY-MM-DD), and
percent_days_seen over a 7-day window. Useful for fraud, bot, and
ad-fraud detection. This is distinct from the general privacy flags on
ipinfo_lookup_ips (VPN / Tor / open web proxy / hosting): use this tool
only to detect residential-proxy networks that route traffic through real
residential IPs. Requires IPINFO_API_TOKEN with the Enterprise
residential-proxy add-on; absence surfaces as auth_insufficient_scope
(distinct from auth_invalid for a missing/wrong token).
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IPv4/IPv6 address to classify. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ip | Yes | |
| last_seen | No | |
| percent_days_seen | No | |
| service | No | |
| ts_retrieved | No | |
| is_residential_proxy | Yes | Whether the IP is a known residential-proxy exit node. Derived from ``service``: the IPInfo residential-proxy add-on returns a non-null ``service`` only for IPs it has classified as proxies, so ``service is not None`` is the canonical "yes/no" signal. Surfaces in JSON output so agents can branch on a stable boolean instead of inspecting all-None fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, openWorldHint. The description adds details on return structure (ResidentialProxyDetails with fields), and error conditions (auth_insufficient_scope vs auth_invalid). No contradiction with annotations.
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 description is concise and well-structured: purpose, return fields, use cases, sibling distinction, auth requirements. Every sentence adds value without redundancy.
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?
Given the simple tool (one parameter, output schema exists, rich annotations), the description is complete. It covers purpose, usage context, behavioral nuances, and authentication, leaving no gaps for an AI agent.
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% for the single 'ip' parameter (includes description, format, examples). The description does not add parameter-specific details beyond the schema, but baseline 3 is appropriate for this high coverage.
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?
The description clearly states the tool's purpose: 'Classify whether an IP is a known residential-proxy exit node.' This is a specific verb-resource combination and distinguishes it from the sibling 'ipinfo_lookup_ips' which provides general privacy flags.
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?
Provides explicit when-to-use ('fraud, bot, and ad-fraud detection') and when-not-to-use ('distinct from the general privacy flags on ipinfo_lookup_ips'). Also mentions alternative tool for VPN/Tor/hosting detection. Authentication requirements and error distinctions are clearly specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipinfo_generate_map_urlGenerate IP Map URLARead-onlyIdempotent
Build an interactive ipinfo.io map for a set of IPs.
Returns MapResult{url, mapped_ip_count, skipped_ips, skipped_count,
truncated}. skipped_ips is a list of {ip, reason} entries for filtered
inputs, capped at 100; truncated flags overflow. skipped_count is the
true total even when the list is capped, so mapped_ip_count + skipped_count equals the input length. Errors raise ToolError with a
JSON-encoded envelope.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | IPv4/IPv6 addresses to plot. Invalid or special-use IPs are filtered. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| mapped_ip_count | Yes | |
| skipped_ips | No | |
| skipped_count | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint. The description adds valuable behavioral context: the structure of the returned MapResult (url, mapped_ip_count, skipped_ips, etc.), how skipped_ips are capped at 100, the meaning of truncated, and error handling with ToolError. This goes beyond what annotations provide.
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 description is concise (two paragraphs) and front-loaded with the main purpose. Each sentence adds value, explaining the return value and error behavior. It could be slightly more structured, but it is efficient.
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?
Given the low complexity (one parameter, rich annotations, output schema present), the description is complete. It explains the return structure, handling of filtered IPs, and error reporting. No missing information is needed for proper use.
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 input schema has 100% coverage for the single parameter (ips), with a clear description and examples. The tool description does not add additional meaning beyond what the schema already provides. Baseline 3 is appropriate.
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?
The description clearly states the tool's purpose: 'Build an interactive ipinfo.io map for a set of IPs.' This is a specific verb+resource that distinguishes it from sibling tools like ipinfo_lookup_ips and ipinfo_summarize_ips.
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 description implies usage for mapping IPs but provides no explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it. No examples of use cases or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipinfo_lookup_ipsLook Up IPsARead-onlyIdempotent
Geolocate one or more IPs and return ISP/ASN details.
Returns a list in input order (after dedup and invalid-IP filtering); match
results back to your input via the ip field. IPs that fail upstream are
omitted and logged; if the batch resolves no IPs at all the failure is
raised rather than masked — auth_insufficient_scope when the upstream
returned nothing (token tier likely lacks /batch access; look IPs up one
at a time or upgrade to Core+), otherwise a retryable api_error. Defaults
to detail="summary" (heavy nested blocks
omitted); pass detail="full" for every field. Capped at 1,000 IPs per
call (too_many_ips above that): this tool returns one record per IP, so
for larger batches use ipinfo_summarize_ips (fixed-size aggregates) or
ipinfo_generate_map_url. Higher plan tiers populate more fields; see the
server instructions for the Lite/Core/Plus/Enterprise tier mapping. For
VPN/Tor/open-proxy/hosting detection read the privacy flags on each
record; for residential-proxy exit-node classification use the separate
ipinfo_check_residential_proxy tool. Typically completes in seconds;
bounded by a 120s tool timeout that surfaces as a timeout envelope.
Errors raise ToolError with a JSON-encoded envelope.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | IPv4/IPv6 addresses to look up. Invalid or special-use IPs are filtered. | |
| detail | No | 'summary' (default) OMITS heavy nested blocks (continent, country_flag*, country_currency, abuse, domains) for batch token savings; 'full' returns every IPDetails field. | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses rich behavioral details: dedup/filtering of invalid IPs, output order, omission of failed IPs, error conditions (auth_insufficient_scope, api_error, timeout), default detail level, cap at 1000 IPs, and performance characteristics. Annotations only indicate readOnlyHint, idempotentHint, and openWorldHint, so the description adds substantial value.
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 description is detailed but well-structured, starting with the core purpose followed by bullet-like points on behavior, errors, limits, and alternatives. It is front-loaded with essential information. While it is long, every sentence adds value, and the complexity warrants the length.
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?
Given the tool's complexity (batch lookup, error handling, token tiers, output structure, limits, related tools), the description is comprehensive. It covers input handling, output format, error scenarios, performance, and alternatives. An output schema exists, but the description complements it well.
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 descriptions and examples for both parameters. The description adds context: the 'detail' parameter's impact on response size and block omission, and that 'ips' are filtered. While schema alone is adequate, the description clarifies behavior beyond schema, justifying a score above baseline 3.
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?
The description clearly states 'Geolocate one or more IPs and return ISP/ASN details.' It uses a specific verb and resource, and distinguishes from siblings by naming alternatives for different use cases (e.g., ipinfo_summarize_ips for larger batches, ipinfo_check_residential_proxy for proxy detection).
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 description explicitly explains when to use this tool (for batch IP lookup with per-IP details) and when not (for >1000 IPs, use ipinfo_summarize_ips or ipinfo_generate_map_url; for residential proxy, use ipinfo_check_residential_proxy). It also covers token tier issues and fallback strategies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipinfo_lookup_my_ipLook Up My IPARead-onlyIdempotent
Geolocate the calling client's own IP. No arguments.
On stdio transports the result is this server's outbound IP, not the
end user's. Use ipinfo_lookup_ips when the caller already has a
specific IP. Errors raise ToolError with a JSON-encoded envelope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ip | Yes | |
| hostname | No | |
| city | No | |
| region | No | |
| region_code | No | |
| country | No | |
| country_name | No | |
| loc | No | |
| latitude | No | |
| longitude | No | |
| postal | No | |
| timezone | No | |
| continent | No | |
| country_flag | No | |
| country_flag_url | No | |
| country_currency | No | |
| isEU | No | |
| org | No | |
| asn | No | |
| privacy | No | |
| anycast | No | |
| bogon | No | |
| carrier | No | |
| company | No | |
| domains | No | |
| abuse | No | |
| ts_retrieved | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint, idempotentHint, openWorldHint. Description adds critical context: on stdio transports the result is the server's outbound IP, not the end user's, and errors raise ToolError with JSON envelope, which annotations don't cover.
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?
Three sentences, each providing essential information: purpose, transport caveat, and alternative usage. No redundant or superfluous text.
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?
For a no-argument tool with output schema and comprehensive annotations, the description covers edge cases (stdio transport) and error format, making it fully sufficient for proper 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?
No parameters; schema coverage is 100% (empty schema). Description confirms 'No arguments.' Baseline for 0 parameters is 4, as no additional meaning is needed.
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?
The description clearly states the tool geolocates the calling client's own IP, with no arguments. It distinguishes from sibling 'ipinfo_lookup_ips' for when a specific IP is available.
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 states no arguments needed, warns about stdio transport behavior (server's outbound IP vs end user's IP), and directs to alternative tool if caller has a specific IP. Also mentions error handling via ToolError with JSON envelope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipinfo_summarize_ipsSummarize IPsARead-onlyIdempotent
Aggregate one or more IP lookups into counts and percentages.
Uses the same validation, deduplication, cache, and upstream batch lookup
path as ipinfo_lookup_ips, but returns fixed-size summary buckets instead
of per-IP records. This is the preferred tool for large log-analysis tasks
such as "where did visitors come from?" when the caller does not need the
underlying records. Percentages are based on mapped_ip_count; filtered
and failed IPs are counted separately. Errors raise ToolError with a
JSON-encoded envelope.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | IPv4/IPv6 addresses to aggregate. Invalid or special-use IPs are filtered. | |
| group_by | No | Summary dimensions to include. Empty returns only mapped, skipped, and failed counts. | |
| top_n | No | Maximum buckets to return per requested group. truncated_groups reports the true distinct count when capped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mapped_ip_count | Yes | |
| skipped_count | Yes | |
| failed_count | Yes | |
| by_country | No | |
| by_continent | No | |
| by_asn | No | |
| by_privacy | No | |
| truncated_groups | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnly/ idempotent annotations, it details shared processing path with sibling, filtering/failed IP handling, and error format. Beneficial context that annotations alone don't provide.
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 concise paragraphs with front-loaded purpose. Every sentence adds value—no waste.
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?
Given 3 params and an output schema, description covers purpose, behavior, error handling, and relationships thoroughly. No gaps.
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 good descriptions and examples. Description adds no extra per-param details, so baseline 3 is appropriate.
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?
Clearly states it aggregates IP lookups into counts and percentages. Distinguishes from sibling ipinfo_lookup_ips by emphasizing summary output and large log-analysis use case.
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 says this is preferred for large log-analysis when underlying records are not needed, and clarifies percentage basis. Could be improved by stating when not to use it, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool performs a distinct function: residential proxy detection, map generation, IP lookup (batch), own IP lookup, and summary aggregation. Their purposes are clearly separated with no overlap.
All tools follow the consistent 'ipinfo_verb_noun' pattern (e.g., ipinfo_lookup_ips, ipinfo_summarize_ips), making the naming predictable and easy to understand.
With 5 tools covering geolocation, map visualization, and specialized proxy detection, the count is well-scoped for an IP geolocation service without unnecessary bloat.
The set covers core operations (lookup, self-lookup, batch, summary, map) and residential proxy detection. Minor gaps like WHOIS or IP range queries are absent but reasonable for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
IPInfo MCP — wraps ipinfo.io (free tier, no auth required for basic usage)
IPStack MCP Adapter turns IPStack's REST APIs into Model Context Protocol tools so any MCP-compatible client can call them directly in conversation. The first release ships IPStack IP geolocation and security lookups (single IP, caller's IP, and bulk). Additional APILayer services are added by registering them in a single config file, so the catalog grows without client-side changes.
IP Lookup MCP — ip-api.com (free, no auth for basic usage)
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP (Multi-Agent Conversation Protocol) server that enables natural language interaction with the AbstractAPI geolocation service, allowing users to retrieve geographic information about IP addresses.
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides IP geolocation services using MaxMind's GeoIP2 databases, allowing users to retrieve geographical information for single or multiple IP addresses including country, city, coordinates, and ASN details.GPL 3.0
- AlicenseBqualityDmaintenanceAn MCP server that provides access to the Netdetective API for querying information about IP addresses. It enables users to retrieve metadata for a specified IP address or the connecting client's default IP address.1MIT
- AlicenseNot gradedqualityFmaintenanceMCP server for IP geolocation lookups using ipinfo.io, with single, own, and batch queries.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/briandconnelly/mcp-server-ipinfo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server