Skip to main content
Glama
briandconnelly

IP Geolocation MCP Server

IP Geolocation MCP Server

PyPI CI License: MIT

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

uvx

Arguments

mcp-server-ipinfo

Environment

IPINFO_API_TOKEN = <YOUR TOKEN>

Development Version

To run the latest from main:

Field

Value

Command

uvx

Arguments

--from, git+https://github.com/briandconnelly/mcp-server-ipinfo, mcp-server-ipinfo

Environment

IPINFO_API_TOKEN = <YOUR TOKEN>

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 to detail="summary", which omits heavy nested blocks (continent, flags, currency, abuse, domains) for batch token savings; pass detail="full" for every field. Capped at 500,000 IPs per call. Invalid or special-use addresses (private, loopback, etc.) are filtered with ctx.warning() and excluded from the result list, as are IPs that fail upstream — match returned IPDetails.ip values back to your input to detect what was dropped. If every attempted lookup fails, a temporary api_error is 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. Tagged enterprise — requires the IPInfo residential-proxy add-on.

  • ipinfo_generate_map_url(ips) — Build an interactive ipinfo.io map for a set of IPs. Returns a MapResult with the URL, the count that made the map, the IPs filtered out (with reasons, capped at 100), and a truncated flag.

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 ipinfo_check_residential_proxy. Sold separately on top of Enterprise; not included by default.

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

IPInfo API token. Without it the server runs in free Lite mode.

unset (Lite)

IPINFO_CACHE_TTL

Per-IP cache TTL in seconds. Cached results retain their original ts_retrieved timestamp.

3600

IPINFO_CACHE_SIZE

Maximum cache entries before oldest-first eviction.

4096

License

MIT License — see LICENSE. Release history in CHANGELOG.md.

Disclaimer

This project is not affiliated with IPInfo.

Available Tools

5 tools
ipinfo_check_residential_proxyCheck Residential ProxyA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
ipYesIPv4/IPv6 address to classify.

Output Schema

ParametersJSON Schema
NameRequiredDescription
ipYes
last_seenNo
percent_days_seenNo
serviceNo
ts_retrievedNo
is_residential_proxyYesWhether 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

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 URLA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipsYesIPv4/IPv6 addresses to plot. Invalid or special-use IPs are filtered.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
mapped_ip_countYes
skipped_ipsNo
skipped_countYes
truncatedYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 IPsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipsYesIPv4/IPv6 addresses to look up. Invalid or special-use IPs are filtered.
detailNo'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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 IPA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
ipYes
hostnameNo
cityNo
regionNo
region_codeNo
countryNo
country_nameNo
locNo
latitudeNo
longitudeNo
postalNo
timezoneNo
continentNo
country_flagNo
country_flag_urlNo
country_currencyNo
isEUNo
orgNo
asnNo
privacyNo
anycastNo
bogonNo
carrierNo
companyNo
domainsNo
abuseNo
ts_retrievedNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 IPsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipsYesIPv4/IPv6 addresses to aggregate. Invalid or special-use IPs are filtered.
group_byNoSummary dimensions to include. Empty returns only mapped, skipped, and failed counts.
top_nNoMaximum buckets to return per requested group. truncated_groups reports the true distinct count when capped.

Output Schema

ParametersJSON Schema
NameRequiredDescription
mapped_ip_countYes
skipped_countYes
failed_countYes
by_countryNo
by_continentNo
by_asnNo
by_privacyNo
truncated_groupsNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4.4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

With 5 tools covering geolocation, map visualization, and specialized proxy detection, the count is well-scoped for an IP geolocation service without unnecessary bloat.

Completeness4/5

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

ActivityStale
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    An 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.
  • A
    license
    Not graded
    quality
    C
    maintenance
    An 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
  • A
    license
    B
    quality
    D
    maintenance
    An 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.
    1
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for IP geolocation lookups using ipinfo.io, with single, own, and batch queries.
    1
    MIT

Latest Blog Posts

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