Lets AI assistants perform IP intelligence lookups including geolocation, network ownership, and privacy detection.
Also known as ipinfo/mcp, mcp, ipinfo-mcp-server
- Stars
- 2
- Tools
- 14
- Downloads, 30 days
- 1,367
- Latest version
- 0.3.2
- Last commit
- Nov 13, 2026
- License
- Apache-2.0
What is IPinfo MCP?
IPinfo lets AI assistants perform IP intelligence lookups including geolocation, network ownership, and privacy detection. It exposes 14 tools, such as ipinfo_lookup, ipinfo_geolocate, ipinfo_asn.
Summary generated from the project's README
About IPinfo MCP server
The IPinfo MCP server provides AI assistants with the ability to perform detailed IP intelligence lookups. It allows users to query geolocation data, network ownership, and privacy indicators such as VPN or Tor usage. This server is designed for developers using MCP-compatible clients like Claude Desktop, and it can be deployed as a local server via PyPI using stdio or as a remote hosted server via HTTP.
Users can access different levels of data depending on their IPinfo account plan, including Lite, Core, Plus, and Residential Proxy tiers. The server includes specific tools like ipinfo_lookup for full metadata, ipinfo_geolocate for geographic details, and ipinfo_check_privacy for detecting anonymous connections. For local setups, authentication is handled through an IPINFO_TOKEN environment variable, while the hosted version utilizes OAuth for secure access.
What you can do with it
- 1Identify IP geolocationAsk the assistant to find the city, region, or coordinates associated with a specific IP address.
Written from the project's README. Every use case is checked against a quote from it.
How to install IPinfo MCP
Formats verified 10 Nov 2026Install IPinfo MCP in Claude Code
$ claude mcp add --env IPINFO_TOKEN=<YOUR_IPINFO_TOKEN> mcp -- uvx ipinfo-mcp-serverInstall IPinfo MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"mcp": {
"command": "uvx",
"args": [
"ipinfo-mcp-server"
],
"env": {
"IPINFO_TOKEN": "<YOUR_IPINFO_TOKEN>"
}
}
}
}Install IPinfo MCP in VS Code
.vscode/mcp.json
{
"servers": {
"mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"ipinfo-mcp-server"
],
"env": {
"IPINFO_TOKEN": "<YOUR_IPINFO_TOKEN>"
}
}
}
}Install IPinfo MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"mcp": {
"command": "uvx",
"args": [
"ipinfo-mcp-server"
],
"env": {
"IPINFO_TOKEN": "<YOUR_IPINFO_TOKEN>"
}
}
}
}Install IPinfo MCP in Codex
~/.codex/config.toml
[mcp_servers.mcp] command = "uvx" args = ["ipinfo-mcp-server"] [mcp_servers.mcp.env] IPINFO_TOKEN = "<YOUR_IPINFO_TOKEN>"
Install IPinfo MCP in Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"mcp": {
"command": "uvx",
"args": [
"ipinfo-mcp-server"
],
"env": {
"IPINFO_TOKEN": "<YOUR_IPINFO_TOKEN>"
}
}
}
}IPinfo MCP tools 14
Detected from the READMEipinfo_lookupipinfo_geolocateipinfo_asnipinfo_check_privacyipinfo_check_residential_proxyipinfo_quotaipinfo_lite_lookupipspagepage_sizedetailedresults
| ipinfo_lookup | — | |
| ipinfo_geolocate | — | |
| ipinfo_asn | — | |
| ipinfo_check_privacy | — | |
| ipinfo_check_residential_proxy | — | |
| ipinfo_quota | — | |
| ipinfo_lite_lookup | — | |
| ips | — | |
| page | — | |
| page_size | — | |
| detailed | — | |
| results | — |
Show all 14 toolsShow fewer tools
errorsvalidation_errors
| errors | — | |
| validation_errors | — |
Configuration
IPINFO_TOKENRequiredSecretYour IPinfo API token. Get a free one at https://ipinfo.io/signup
IPINFO_TRANSPORT
| Name | Description | |
|---|---|---|
| IPINFO_TOKEN | Your IPinfo API token. Get a free one at https://ipinfo.io/signup | RequiredSecret |
| IPINFO_TRANSPORT | — |
Automated checks
Ran Nov 12, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachablePass
- Open source license (OSI)Pass
- Commit or release in the last yearPass
- Package name not close to a popular packagePass
- Remote endpoint uses HTTPSPass
- Destructive tools are labelledPass
- No hidden instructions to the modelPass
- No critical advisory in the package or its dependenciesPass
README
View on GitHubIPinfo 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.
Installation
You need an IPinfo account. Sign up for free at ipinfo.io/signup.
Hosted server
Point your MCP client at https://mcp.ipinfo.io/ (Streamable HTTP). The first time it connects, it asks you to sign in with your IPinfo account through OAuth.
Local server (PyPI)
The server is published on PyPI as ipinfo-mcp-server and runs over stdio, authenticating with your API token. 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.
The server is also listed on LightNow.
Tools
| Tool | Description | Plan requirement |
|---|---|---|
ipinfo_lookup |
Full IP data: geolocation, network, and metadata | Any; detailed: true needs Core/Plus |
ipinfo_geolocate |
Geographic location | Any; detailed: true needs Core/Plus |
ipinfo_asn |
Autonomous system (network ownership) | Any; detailed: true needs Core/Plus |
ipinfo_check_privacy |
VPN, proxy, relay, Tor, hosting, anycast, mobile, satellite flags | Paid plan |
ipinfo_check_residential_proxy |
Residential proxy detection | Residential Proxy access |
ipinfo_quota |
API usage and remaining quota | Any |
ipinfo_lite_lookup |
Lite IP data, for agents without an account | None; only offered to AAuth agents |
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 |
|---|---|---|---|
ips |
string[] |
required | Public IPv4 or IPv6 addresses. Private, loopback, reserved, multicast, and bogon addresses are rejected and reported in validation_errors. |
page |
integer |
1 |
1-based page of the result set. Values below 1 are clamped to 1. |
page_size |
integer |
25 |
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 |
|---|---|---|---|
detailed |
boolean |
false |
false queries the Lite endpoint. true queries the full lookup endpoint, which returns more fields. |
Common output
IP-based tools return:
| Field | Description |
|---|---|
results |
Object keyed by IP with the tool-specific data below. |
errors |
Object keyed by IP for IPs the API returned an error for. These IPs are left out of results. |
validation_errors |
Object keyed by input for values that aren't valid public IPs. Only present when there are any. |
_pagination |
total_results, page, page_size, total_pages, has_next, has_previous. |
_meta |
api_calls_made and from_cache. Results are cached in memory, so repeat lookups don't consume API quota. |
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 (omitted when connected with OAuth), requests (day, month, limit, remaining), and per-feature quotas under features.
ipinfo_lite_lookup
Only offered to agents that sign their requests with AAuth, who get it in place of the tools above. Takes the common parameters and returns the Lite data for each IP: ip, asn, as_name, as_domain, country, country_code, continent, continent_code. When the daily limit for lookups without an account is reached, it returns a RATE_LIMITED error.
Configuration
The server is configured through environment variables:
| Variable | Default | Description |
|---|---|---|
IPINFO_TOKEN |
API token (stdio transport; over HTTP the token comes from the request) | |
IPINFO_API_BASE_URL |
https://api.ipinfo.io |
Base URL for api.ipinfo.io endpoints |
IPINFO_LEGACY_BASE_URL |
https://ipinfo.io |
Base URL for legacy ipinfo.io endpoints (e.g. /me) |
IPINFO_CACHE_TTL |
3600 |
Seconds a cached IP result stays fresh |
IPINFO_TRANSPORT |
stdio |
Transport type (stdio or http) |
HOST |
0.0.0.0 |
HTTP host (only for http transport) |
PORT |
8000 |
HTTP port (only for http transport) |
IPINFO_OAUTH_ISSUER |
OAuth issuer whose access tokens are accepted; OAuth is off when unset | |
IPINFO_MCP_RESOURCE_URL |
Public URL of this server, required with IPINFO_OAUTH_ISSUER |
|
IPINFO_OAUTH_JWKS_URI |
<issuer>/.well-known/jwks.json |
Where the issuer publishes its signing keys |
IPINFO_OPENAI_APPS_CHALLENGE |
Token served at /.well-known/openai-apps-challenge for OpenAI's domain verification |
|
IPINFO_AAUTH_PROVIDER_KEY |
Ed25519 private key, PEM encoded, for AAuth; AAuth is off when unset | |
IPINFO_AAUTH_ISSUER |
Public URL of this server for AAuth, required with the key |
With the http transport, each request authenticates with its own Authorization: Bearer <token> header.
Setting IPINFO_OAUTH_ISSUER turns on OAuth for the http transport. The server then advertises the issuer at /.well-known/oauth-protected-resource, answers requests without a valid credential with 401 Unauthorized, and verifies access tokens against the issuer's signing keys. A verified access token is sent to the IPinfo API in place of an API token. API tokens keep working as before.
Setting IPINFO_AAUTH_PROVIDER_KEY turns on AAuth for the http transport, so agents that sign their requests with AAuth can use ipinfo_lite_lookup without an IPinfo account. Generate the key with openssl genpkey -algorithm ed25519, and give every replica the same one. IPINFO_AAUTH_ISSUER must be the server's public URL: https, no port, path, or trailing slash. With AAuth on, the server also serves:
/aauth, the MCP endpoint for AAuth agents, whose only tool isipinfo_lite_lookup. Listing its tools needs no signature; calling one needs an AAuth signature. WhenIPINFO_MCP_RESOURCE_URLis set, only signatures made for that host are accepted./.well-known/aauth-resource.json, which points agents at/aauth. It names the origin ofIPINFO_MCP_RESOURCE_URL, or ofIPINFO_AAUTH_ISSUERwhen that is unset./.well-known/aauth-agent.jsonand/.well-known/aauth-jwks.json, the documents of the server's own AAuth agent,aauth:ipinfo-mcp@<issuer host>.
The main endpoint is unaffected.
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+
- uv
Setup
uv sync --dev
cp .env.example .env
# Add your IPinfo token to .env
Running 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-server
Tests
# 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 pyright
Linting
uv run ruff check .
uv run ruff format .
IPinfo MCP questions
How do I add IPinfo MCP to Claude Code?
Run claude mcp add --env IPINFO_TOKEN=<YOUR_IPINFO_TOKEN> mcp -- uvx ipinfo-mcp-server in your terminal. Add --scope user to make it available in every project.
How do I add IPinfo MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does IPinfo MCP provide?
It exposes 14 tools, including ipinfo_lookup, ipinfo_geolocate, ipinfo_asn, ipinfo_check_privacy, ipinfo_check_residential_proxy.
What kind of information can I get about an IP address?
You can find geolocation, network ownership (ASN), and metadata such as whether an IP is a VPN, proxy, Tor exit node, or residential proxy.
Does the server support OAuth?
Yes, when using the hosted HTTP server, the first connection asks you to sign in with your IPinfo account through OAuth.
Can I check if an IP is a residential proxy?
Yes, there is a specific tool called ipinfo_check_residential_proxy for residential proxy detection.