IPinfo MCP Server
OfficialIPinfo MCP Server lets MCP-compatible AI assistants query IP address data (geolocation, network ownership, privacy, residential proxy) and API quota.
Look up full IP data: geolocation, network, and metadata; detailed mode adds city-level geo, privacy flags, and richer AS data.
Geolocate IPs: country/continent by default; detailed mode adds city, region, coordinates, timezone, postal code.
Get ASN/network ownership: ASN, name, domain; detailed mode adds network type and last changed.
Check privacy/anonymity: VPN, proxy, relay, Tor, hosting, anycast, mobile, satellite.
Detect residential proxies: flags IPs, service name, last seen, percent days seen.
Check API usage/quota: daily/monthly requests, limit, remaining, and per-feature quotas.
Batch query many public IPv4/IPv6 addresses with pagination, caching, validation errors, and per-IP errors.
Requires an IPinfo API token; available features depend on plan (Lite, Core, Plus, Residential Proxy).
Click on "Deploy 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., "@IPinfo MCP ServerWhat's the geolocation and ASN for 8.8.8.8?"
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.
IPinfo MCP Server
The official IPinfo MCP Server lets AI assistants such as Claude answer questions about IP addresses. Ask where an IP is located, which company or network it belongs to, or whether it's a VPN, proxy, Tor exit node, or residential proxy, and the assistant looks it up with IPinfo data.
It implements the Model Context Protocol (MCP), the open standard AI assistants use to connect to external tools, so it works with any MCP-compatible client. It supports the IPinfo Lite, Core, Plus, and Residential Proxy plans.
For the full guide, see the official documentation.
Related MCP server: mcp-ipinfo
Installation
All tools require an IPinfo API token. Get a free one at ipinfo.io/signup.
Hosted server
Point your MCP client at https://mcp.ipinfo.io/ (Streamable HTTP) and send your token as a bearer credential:
Authorization: Bearer <your-ipinfo-token>Local server (PyPI)
The server is published on PyPI as ipinfo-mcp-server and runs over stdio. With uv installed, add it to your MCP client configuration:
{
"mcpServers": {
"ipinfo": {
"command": "uvx",
"args": ["ipinfo-mcp-server"],
"env": {
"IPINFO_TOKEN": "<your-ipinfo-token>"
}
}
}
}Claude Desktop extension
Download mcp.mcpb from the latest GitHub release and open it with Claude Desktop. You'll be asked for your API token during installation.
MCP Registry
The server is listed in the MCP Registry as io.github.ipinfo/mcp.
Tools
Tool | Description | Plan requirement |
| Full IP data: geolocation, network, and metadata | Any; |
| Geographic location | Any; |
| Autonomous system (network ownership) | Any; |
| VPN, proxy, relay, Tor, hosting, anycast, mobile, satellite flags | Paid plan |
| Residential proxy detection | Residential Proxy access |
| API usage and remaining quota | Any |
Tools that lack access for the token's plan return an ACCESS_DENIED error.
Common parameters
All tools except ipinfo_quota take a list of IPs and are paginated:
Parameter | Type | Default | Description |
|
| required | Public IPv4 or IPv6 addresses. Private, loopback, reserved, multicast, and bogon addresses are rejected and reported in |
|
|
| 1-based page of the result set. Values below 1 are clamped to 1. |
|
|
| IPs resolved per page, up to 1000. Only IPs on the requested page are fetched, so smaller pages consume less quota per call. |
ipinfo_lookup, ipinfo_geolocate, and ipinfo_asn also take:
Parameter | Type | Default | Description |
|
|
|
|
Common output
IP-based tools return:
Field | Description |
| Object keyed by IP with the tool-specific data below. |
| Object keyed by IP for IPs the API returned an error for. These IPs are left out of |
| Object keyed by input for values that aren't valid public IPs. Only present when there are any. |
|
|
|
|
If the whole request fails (for example a missing or invalid token), the tool returns an error object instead, with code (ACCESS_DENIED, RATE_LIMITED, INVALID_TOKEN, NO_TOKEN, API_ERROR, or UNKNOWN), message, and suggestion.
ipinfo_lookup
Returns the raw IPinfo API response for each IP.
detailed: false(Lite):ip,asn,as_name,as_domain,country,country_code,continent,continent_code.detailed: true(full lookup):ip,hostname,geo(city, region, country, continent, coordinates, timezone, postal code),as(ASN, name, domain, type),anonymous(proxy, relay, Tor, VPN),mobile, and theis_anonymous,is_anycast,is_hosting,is_mobile,is_satelliteflags. Some fields are only available on Plus.
ipinfo_geolocate
Returns, per IP: ip, country, country_code, continent, continent_code. With detailed: true, also city, region, region_code, latitude, longitude, timezone, postal_code.
ipinfo_asn
Returns, per IP: ip, asn, name, domain. With detailed: true, also type (isp, hosting, business, education) and last_changed.
ipinfo_check_privacy
Returns, per IP: ip, is_anonymous, anonymous (is_proxy, is_relay, is_tor, is_vpn), is_anycast, is_hosting, is_mobile, is_satellite.
ipinfo_check_residential_proxy
Returns, per IP: ip and is_residential_proxy. For residential proxies, also service (proxy service name), last_seen (date), and percent_days_seen.
ipinfo_quota
Takes no parameters. Returns token, requests (day, month, limit, remaining), and per-feature quotas under features.
Configuration
The server is configured through environment variables:
Variable | Default | Description |
| API token (stdio transport; over HTTP the token comes from the request) | |
|
| Base URL for |
|
| Base URL for legacy |
|
| Seconds a cached IP result stays fresh |
|
| Transport type ( |
|
| HTTP host (only for |
|
| HTTP port (only for |
With the http transport, each request authenticates with its own Authorization: Bearer <token> header.
Feedback
Bugs and feature requests: open an issue on GitHub Issues.
Security vulnerabilities: don't open a public issue; follow the security policy.
Questions about your IPinfo account or plan: contact support@ipinfo.io.
Contributing
Contributions are welcome. See CONTRIBUTING.md for the workflow and the requirements a change has to meet.
Development
Prerequisites
Python 3.14+
Setup
uv sync --dev
cp .env.example .env
# Add your IPinfo token to .envRunning the server
The server supports two transports: stdio (default) and HTTP.
# stdio (default, used by MCP clients)
uv run ipinfo-mcp-server
# HTTP
IPINFO_TRANSPORT=http HOST=0.0.0.0 PORT=8000 uv run ipinfo-mcp-serverTests
# All tests
uv run pytest
# Integration tests (requires IPINFO_TOKEN)
uv run pytest tests/integration/Integration tests hit the real IPinfo API and validate response structure only (no exact value assertions). They require IPINFO_TOKEN to be set and are skipped otherwise.
Type checking
uv run pyrightLinting
uv run ruff check .
uv run ruff format .Available Tools
6 toolsipinfo_asnIpinfo AsnARead-onlyIdempotentInspect
Get autonomous system (network ownership) information for IP addresses.
By default queries the IPinfo Lite endpoint, which returns ASN, name, and domain. Set detailed=True to query the full lookup endpoint, which also includes the network type (e.g. isp, hosting, business, education).
Results are paginated.
If the API reports an error for specific IPs, those IPs are listed in errors with the reason and left out of results.
Results are cached in memory for the session, so repeat lookups of the same IP are served from cache without consuming API quota. You do not need to maintain your own cache or deduplicate IPs before calling this tool. The _meta field reports api_calls_made and from_cache counts.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | Public IP addresses to query, IPv4 or IPv6, e.g. ["8.8.8.8", "2001:4860:4860::8888"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results. | |
| page | No | Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results. | |
| detailed | No | Which IPinfo endpoint to query. Leave false to use the Lite endpoint, which returns the ASN, name, and domain. Set to true to use the full lookup endpoint, which also returns the network type (isp, hosting, business, education) and when the AS record last changed; it requires a token whose plan includes that data, otherwise the call fails with ACCESS_DENIED. | |
| page_size | No | How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses pagination behavior, per-IP error reporting with reasons, in-memory caching and its quota implications, the _meta counters, and the ACCESS_DENIED risk for detailed lookups without the right plan. This gives an agent actionable behavioral context well beyond the 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 organized into clear thematic paragraphs and every sentence adds useful information, such as caching, error handling, and endpoint differences. It is slightly longer than strictly needed—'Results are paginated' overlaps with the page/page_size parameters—but overall it is structured and free of filler.
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 output schema exists and annotations cover safety, the description is remarkably complete: it covers endpoint selection, pagination, error reporting, validation errors, quota caching, and plan limitations. An agent has everything needed to call the tool correctly and interpret its side effects.
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 the input schema already documents all four parameters thoroughly, including validation behavior, clamping, defaults, and plan requirements. The description adds context around caching and quota, but it does not materially redefine parameter semantics beyond the schema, 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?
The description opens with a specific verb and resource: 'Get autonomous system (network ownership) information for IP addresses.' It further clarifies the return fields (ASN, name, domain, network type), which clearly distinguishes it from siblings like ipinfo_geolocate, ipinfo_check_privacy, and ipinfo_lookup.
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 explains what the tool does and how parameters alter endpoints, but it gives no guidance on when to choose this tool over alternatives such as ipinfo_lookup or ipinfo_check_privacy. No exclusions, comparison points, or selection conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipinfo_check_privacyIpinfo Check PrivacyARead-onlyIdempotentInspect
Check whether IP addresses are using privacy or anonymity services.
Returns privacy flags for each IP: whether it is anonymous, using a VPN, proxy, relay, or Tor, and whether it is an anycast, hosting, mobile, or satellite address.
Requires a paid API token. Results are paginated.
If the API reports an error for specific IPs, those IPs are listed in errors with the reason and left out of results. Do not treat a missing result as "no privacy services detected": check errors.
Results are cached in memory for the session, so repeat checks of the same IP are served from cache without consuming API quota. You do not need to maintain your own cache or deduplicate IPs before calling this tool. The _meta field reports api_calls_made and from_cache counts.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | Public IP addresses to query, IPv4 or IPv6, e.g. ["8.8.8.8", "2001:4860:4860::8888"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results. | |
| page | No | Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results. | |
| page_size | No | How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With read-only and idempotent annotations already given, the description still adds substantial behavioral context: paid token requirement, pagination, per-IP errors that must be checked, in-memory caching, quota consumption, and _meta counts. It also explicitly warns not to interpret missing results as 'no privacy services detected.'
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 long but every sentence earns its place: purpose, return flags, auth, pagination, error semantics, and caching. The most important behavioral warnings are front-loaded after the purpose, and the structure is easy to scan.
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 multi-IP privacy-checking tool, the description covers auth, pagination, error behavior, caching, quota, and validation; an output schema exists for exact return shape. Nothing required to invoke and interpret the tool correctly appears missing.
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 already documents all three parameters fully, including validation rules for ips and clamping for page/page_size, so the description does not need to compensate. It adds only peripheral operational context (quota per page, caching) rather than new parameter-level semantics, matching the baseline for high schema 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 starts with a specific verb and resource: 'Check whether IP addresses are using privacy or anonymity services,' and enumerates the exact flags returned (anonymous, VPN, proxy, relay, Tor, anycast, hosting, mobile, satellite). This makes it distinct from siblings like geolocation, ASN, quota, and even residential-proxy checking.
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 purpose statement makes the intended use clear, and the description adds operational conditions: paid API token required, pagination, error handling, and caching. It does not explicitly name sibling tools or say when not to use this tool, so it misses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipinfo_check_residential_proxyIpinfo Check Residential ProxyARead-onlyIdempotentInspect
Check whether IP addresses are known residential proxies.
Returns whether each IP is a residential proxy and, if so, the proxy service name, the date it was last seen, and the percentage of days the IP was observed as a proxy.
Requires a paid API token with residential proxy access. Results are paginated.
If the API reports an error for specific IPs, those IPs are listed in errors with the reason and left out of results. Do not treat a missing result as "not a residential proxy": check errors.
Results are cached in memory for the session, so repeat checks of the same IP are served from cache without consuming API quota. You do not need to maintain your own cache or deduplicate IPs before calling this tool. The _meta field reports api_calls_made and from_cache counts.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | Public IP addresses to query, IPv4 or IPv6, e.g. ["8.8.8.8", "2001:4860:4860::8888"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results. | |
| page | No | Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results. | |
| page_size | No | How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: paid token requirement, pagination, per-IP error handling, in-memory caching, quota consumption, and the _meta field. It also warns not to treat missing results as 'not a residential proxy,' which is critical for correct interpretation.
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 every sentence earns its place: purpose, return values, requirements, error handling, caching, and quota behavior. It is front-loaded with the core purpose and organized into clear paragraphs 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 output schema exists and the input schema is fully documented, the description covers all operational essentials: authentication, pagination, error semantics, caching, and quota tracking. An agent has everything needed to invoke and interpret the tool 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 description coverage is 100%, so the schema already fully documents all three parameters. The description reinforces pagination behavior and clamping but does not add new parameter-level meaning beyond what the schema provides, matching the baseline.
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 opens with a specific verb and resource: 'Check whether IP addresses are known residential proxies.' It clearly states what the tool does, but it does not explicitly differentiate it from the sibling ipinfo_check_privacy, so it stops short of a 5.
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 provides context such as requiring a paid token and pagination, but it gives no guidance on when to choose this tool over ipinfo_check_privacy or other siblings. No exclusions or alternative routing are mentioned, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipinfo_geolocateIpinfo GeolocateARead-onlyIdempotentInspect
Get geographic location data for one or more IP addresses.
By default queries the IPinfo Lite endpoint, which returns country and continent. Set detailed=True to query the full lookup endpoint, which adds city, region, coordinates, timezone, and postal code.
Results are paginated.
If the API reports an error for specific IPs, those IPs are listed in errors with the reason and left out of results.
Results are cached in memory for the session, so repeat lookups of the same IP are served from cache without consuming API quota. You do not need to maintain your own cache or deduplicate IPs before calling this tool. The _meta field reports api_calls_made and from_cache counts.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | Public IP addresses to query, IPv4 or IPv6, e.g. ["8.8.8.8", "2001:4860:4860::8888"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results. | |
| page | No | Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results. | |
| detailed | No | Which IPinfo endpoint to query. Leave false to use the Lite endpoint, which returns country and continent only. Set to true to use the full lookup endpoint, which also returns city, region, latitude and longitude, timezone, and postal code; it requires a token whose plan includes that data, otherwise the call fails with ACCESS_DENIED. | |
| page_size | No | How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds substantial non-obvious behavior beyond that: pagination, per-IP error reporting, in-memory caching, quota consumption toggled by page_size, ACCESS_DENIED on insufficient token plans, and validation rejection of private/reserved addresses. This is strong behavioral disclosure.
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 compact and front-loaded, with every sentence carrying distinct information: endpoint choice, pagination, error handling, caching, and quota metadata. There is no filler and no unnecessary repetition of schema details.
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?
It covers successful behavior, failure/error behavior, input validation behavior, caching/quota semantics, and pagination; the output schema handles the return shape. Combined with the rich input schema and annotations, nothing an agent needs to invoke this tool correctly is missing.
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 already documents all four parameters with 100% coverage, including clamping, validation rejection, and detailed endpoint requirements, so the description does not need to repeat those. It adds behavioral context such as caching and pagination rather than new parameter-level meaning, keeping this at the baseline for fully covered schemas.
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?
Opens with a specific verb and object ('Get geographic location data') and immediately scopes to one or more IPs, making its geolocation focus unmistakable. It names the Lite vs full endpoints and is clearly distinct from sibling ASN, privacy, residential-proxy, and quota tools.
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 first line states the use case, and later adds explicit parameter-level guidance: 'By default queries the IPinfo Lite endpoint... Set detailed=True...' and 'You do not need to maintain your own cache or deduplicate IPs before calling this tool.' It stops short of naming sibling alternatives or exclusion criteria, so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipinfo_lookupIpinfo LookupARead-onlyIdempotentInspect
Look up geolocation, network, and metadata for one or more IP addresses.
By default queries the IPinfo Lite endpoint, which returns country, continent, and ASN info. Set detailed=True to query the full lookup endpoint, which adds city-level geolocation, privacy flags (VPN, proxy, Tor, hosting, anycast), and richer AS data.
Results are paginated. Use page and page_size to control which slice is returned.
If the API reports an error for specific IPs, those IPs are listed in errors with the reason and left out of results.
Results are cached in memory for the session, so repeat lookups of the same IP are served from cache without consuming API quota. You do not need to maintain your own cache or deduplicate IPs before calling this tool. The _meta field reports api_calls_made and from_cache counts.
| Name | Required | Description | Default |
|---|---|---|---|
| ips | Yes | Public IP addresses to query, IPv4 or IPv6, e.g. ["8.8.8.8", "2001:4860:4860::8888"]. Private, loopback, reserved, multicast, and bogon addresses are rejected: they are reported under validation_errors and left out of results. | |
| page | No | Page of the result set to return, 1-based. Values below 1 are clamped to 1, and a page past the last one returns no results. | |
| detailed | No | Which IPinfo endpoint to query. Leave false to use the Lite endpoint, which returns country, continent, and basic ASN. Set to true to use the full lookup endpoint, which also returns city-level geolocation, privacy flags (VPN, proxy, Tor, hosting, anycast), and richer AS data; it requires a token whose plan includes that data, otherwise the call fails with ACCESS_DENIED. | |
| page_size | No | How many IPs to resolve and return per page. Clamped to a maximum of 1000, the API batch limit. Only the IPs on the requested page are fetched, so a smaller page size consumes less quota per call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly supplements the readOnly/idempotent annotations by disclosing pagination behavior, per-IP error handling, in-memory caching, quota consumption, and the _meta counts. It also explains which endpoint is used by default and when ACCESS_DENIED can occur. No contradiction with annotations exists; in fact, the cache description reinforces the idempotentHint.
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 dense but every sentence earns its place: purpose, endpoint selection, pagination, error handling, caching, and quota accounting. It is front-loaded with the main purpose and progresses logically to operational details with no filler or repetition.
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 moderate complexity, the description covers all operational concerns an agent needs: endpoint selection, pagination, caching, quota behavior, error handling, and output metadata. An output schema exists, so the description need not enumerate return fields, and the sibling context is simple enough that no additional routing information is required.
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 the baseline is 3. The description does add useful behavior-level detail such as caching and errors, but it does not substantially add meaning to the parameters themselves beyond what the schema already specifies. For instance, the detailed parameter is already fully described in the schema.
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 opens with a clear verb-resource statement: 'Look up geolocation, network, and metadata for one or more IP addresses.' It specifies the resource and the batch capability, which distinguishes it from single-purpose siblings like ipinfo_asn. However, it never explicitly names sibling tools or contrasts itself with ipinfo_geolocate, so differentiation is implicit rather than explicit.
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 gives clear context on how to use the tool, including when to set detailed=True, how pagination works, and that caching means the agent should not deduplicate IPs. It does not explicitly state when to choose this tool over a sibling or exclude cases for siblings, so it stops short of full 5-level guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ipinfo_quotaIpinfo QuotaARead-onlyIdempotentInspect
Check your IPinfo API usage and remaining quota.
Returns daily and monthly request counts, the plan limit, and how many requests remain.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not carry the full burden for behavioral safety. The description adds that it returns counts and limits, which is useful but is mostly return-value information rather than a new behavioral trait. It does not contradict the 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 two short sentences with no redundant filler. The core purpose is front-loaded in the first sentence, and the second sentence concisely summarizes the return payload without drifting into unnecessary detail.
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 zero-parameter, read-only tool with rich annotations and an output schema, the description is complete enough. It tells the agent what the tool does and what data it returns, which is all that is needed to decide and invoke it correctly in this context.
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 has zero parameters and 100% schema description coverage, so the schema effectively documents everything for inputs. The baseline for a no-parameter tool is 4, and the description appropriately avoids inventing parameter-related details. Nothing is missing here.
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 states a specific verb ('Check') and resource ('IPinfo API usage and remaining quota'), making the tool's purpose immediately clear. The title 'Ipinfo Quota' and description distinguish it from sibling tools focused on geolocation, ASN, privacy, and residential proxy checks. An agent can tell this is the quota/usage tool without opening the schema or comparing options.
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 the tool is for checking current API usage and quota, so an agent would use it when those details are needed. However, it does not explicitly mention when not to use it or name any sibling alternative. There is no exclusion or routing guidance beyond the clear purpose.
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.
6 tool updates
v0.1.13- Changed
ipinfo_asn1 field changed- removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
ipinfo_check_privacy1 field changed- removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
ipinfo_check_residential_proxy1 field changed- removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
ipinfo_geolocate1 field changed- removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
ipinfo_lookup1 field changed- removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
ipinfo_quota1 field changed- removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
6 tool updates
v0.1.12- First observed
ipinfo_asn - First observed
ipinfo_check_privacy - First observed
ipinfo_check_residential_proxy - First observed
ipinfo_geolocate - First observed
ipinfo_lookup - First observed
ipinfo_quota
TDQS
Scored across 6 tools
The general ipinfo_lookup tool can return geolocation, ASN, and privacy flags (in detailed mode), overlapping with ipinfo_geolocate, ipinfo_asn, and ipinfo_check_privacy. Descriptions help clarify intended use, but an agent may still wonder when to use specialized tools versus the general lookup.
All tools use the ipinfo_ prefix and snake_case, but suffixes mix verbs (lookup, geolocate) and nouns (asn, quota), and the check_* tools are more verbose. The pattern is mostly consistent with minor deviations.
Six tools is well-scoped for IP intelligence: one general lookup, three specialized lookups (geolocation, ASN, privacy), a residential proxy check, and a quota check. Each targets a distinct API endpoint without excessive granularity.
Core IP intelligence is covered: geolocation, ASN, privacy, residential proxy, quota, and a general lookup. Some IPinfo API features like IP ranges or hosted domains are missing, but these are minor gaps agents can work around.
Maintenance
Related MCP Connectors
IPInfo MCP — wraps ipinfo.io (free tier, no auth required for basic usage)
IP Lookup MCP — ip-api.com (free, no auth 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.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server providing IP address lookup capabilities. Enables AI assistants to fetch details about public IP addresses or the user's current device IP.58 npmISC
- AlicenseNot gradedqualityBmaintenanceProvides IP geolocation data via ipinfo.io, enabling querying IP addresses for location, ISP, and other details through natural language.364 npmMIT
- FlicenseAqualityDmaintenanceProvides IP address geolocation and related info via an API, with MCP server integration for easy use in AI tools.1-
- FlicenseNot gradedqualityCmaintenanceEnables IP address information lookup through natural language, including current public IP, geolocation, ISP, coordinates, and IPv4/IPv6 details via MCP stdio.-