{"id":45398151,"url":"https://github.com/NimbleBrainInc/mcp-ipinfo","last_synced_at":"2026-03-06T20:01:35.542Z","repository":{"id":330223763,"uuid":"1062279613","full_name":"NimbleBrainInc/mcp-ipinfo","owner":"NimbleBrainInc","description":"MCP server for IPInfo API - IP geolocation, ASN lookup, privacy detection, and domain intelligence.","archived":false,"fork":false,"pushed_at":"2026-02-14T00:14:31.000Z","size":340,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-14T04:07:49.554Z","etag":null,"topics":["ipinfo","mcp","mcpb","nimblebrain","nimbletools"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NimbleBrainInc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-23T03:54:52.000Z","updated_at":"2026-02-13T21:27:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NimbleBrainInc/mcp-ipinfo","commit_stats":null,"previous_names":["nimblebraininc/mcp-ipinfo"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/NimbleBrainInc/mcp-ipinfo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimbleBrainInc%2Fmcp-ipinfo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimbleBrainInc%2Fmcp-ipinfo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimbleBrainInc%2Fmcp-ipinfo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimbleBrainInc%2Fmcp-ipinfo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NimbleBrainInc","download_url":"https://codeload.github.com/NimbleBrainInc/mcp-ipinfo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NimbleBrainInc%2Fmcp-ipinfo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30195529,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T19:07:06.838Z","status":"ssl_error","status_checked_at":"2026-03-06T18:57:34.882Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ipinfo","mcp","mcpb","nimblebrain","nimbletools"],"created_at":"2026-02-21T19:44:50.174Z","updated_at":"2026-03-06T20:01:35.535Z","avatar_url":"https://github.com/NimbleBrainInc.png","language":"Python","funding_links":[],"categories":["Utilities"],"sub_categories":[],"readme":"# MCP Server IPInfo\n\n![GitHub License](https://img.shields.io/github/license/nimblebraininc/mcp-ipinfo)\n![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/nimblebraininc/mcp-ipinfo/ci.yaml)\n\nThis is a version of the MCP Server for IPInfo that implements the complete IPInfo OpenAPI specification with strongly-typed models and comprehensive tool coverage.\n\n## Features\n\n- **Full OpenAPI Spec Implementation**: Complete implementation of IPInfo's OpenAPI specification\n- **Strongly Typed**: All API responses use Pydantic models for type safety\n- **HTTP Transport**: Supports streamable-http transport with health endpoint\n- **Comprehensive Tools**: 25+ MCP tools covering all IPInfo API endpoints\n- **Built-in Skill Resource**: Serves a `skill://ipinfo/usage` resource that teaches LLMs optimal tool selection and context reuse patterns\n\n## Installation\n\n```bash\n# Using uv (recommended)\nuv pip install -e .\n\n# Or with pip\npip install -e .\n```\n\n## Configuration\n\nSet your IPInfo API token as an environment variable:\n\n```bash\nexport IPINFO_API_TOKEN=your_token_here\n```\n\n## Running the Server\n\n### As a standalone MCP server\n\n```bash\n# Using uv\nuv run mcp-ipinfo\n\n# Or with Python\npython -m mcp_ipinfo.server\n```\n\n### In Claude Code\n\nAdd this configuration to your Claude Code settings:\n\n```json\n{\n  \"mcpServers\": {\n    \"ipinfo\": {\n      \"command\": \"/path/to/.local/bin/uv\",\n      \"args\": [\n        \"--directory\",\n        \"/path/to/mcp-server-ipinfo\",\n        \"run\",\n        \"mcp-ipinfo\"\n      ],\n      \"env\": {\n        \"IPINFO_API_TOKEN\": \"your_ipinfo_api_token_here\"\n      }\n    }\n  }\n}\n```\n\n## Skill Resource\n\nThe server includes a built-in skill at `skill://ipinfo/usage` that guides LLMs on:\n\n- **Tool selection**: Which tool to use for each intent (general lookup vs. VPN detection vs. WHOIS)\n- **Context reuse**: Carrying IP addresses across follow-up questions\n- **VPN detection**: Using the Plus API (`get_plus_ip_info`) instead of the Core API for privacy flags\n\nThe server's `instructions` field tells compatible MCP clients to read this resource before using tools. This is also published as a standalone skill at [mpak.dev/skills/@nimblebraininc/ipinfo](https://mpak.dev/skills/@nimblebraininc/ipinfo).\n\n## Available MCP Tools\n\n### Core IP Information\n\n- `get_ip_info(ip?)` - Get comprehensive IP information\n- `get_plus_ip_info(ip)` - Get full IP intelligence via Plus API (includes privacy detection)\n- `get_account_info()` - Get API account limits and features\n- `batch_lookup(ips[])` - Batch lookup multiple IPs\n- `summarize_ips(ips[])` - Get summary statistics for IP list\n- `map_ips(ips[])` - Create visual map of IP locations\n\n### Company \u0026 Carrier\n\n- `get_company_info(ip)` - Get company details for an IP\n- `get_carrier_info(ip)` - Get mobile carrier information\n\n### Privacy \u0026 Security\n\n- `get_plus_ip_info(ip)` - Detect VPN, proxy, Tor, relay (via Plus API)\n- `get_residential_proxy_info(ip)` - Detect residential proxy services\n- `get_abuse_contact(ip)` - Get abuse contact information\n\n### Network Information\n\n- `get_hosted_domains(ip, page?, limit?)` - Get domains on an IP\n- `get_ip_ranges(domain)` - Get IP ranges for a domain\n\n### WHOIS Lookups\n\n- `whois_lookup_by_ip(ip, page?, source?)` - WHOIS by IP\n- `whois_lookup_by_domain(domain, page?, source?)` - WHOIS by domain\n- `whois_lookup_by_asn(asn, page?, source?)` - WHOIS by ASN\n\n### Single Field Tools\n\n- `get_ip_city(ip?)` - Get just the city\n- `get_ip_country(ip?)` - Get just the country code\n- `get_ip_region(ip?)` - Get just the region/state\n- `get_ip_location(ip?)` - Get just the coordinates\n- `get_ip_postal(ip?)` - Get just the postal code\n- `get_ip_timezone(ip?)` - Get just the timezone\n- `get_ip_hostname(ip?)` - Get just the hostname\n- `get_ip_org(ip?)` - Get just the organization/ASN\n\n## Testing\n\nRun the test client to verify the implementation:\n\n```bash\npython test_client.py\n```\n\n## API Client Usage\n\nYou can also use the API client directly in your Python code:\n\n```python\nimport asyncio\nfrom mcp_ipinfo.api_client import IPInfoClient\n\nasync def main():\n    async with IPInfoClient() as client:\n        # Get current IP info\n        info = await client.get_current_info()\n        print(f\"Current IP: {info.ip}\")\n        print(f\"Location: {info.city}, {info.country}\")\n\n        # Get specific IP info\n        google = await client.get_info_by_ip(\"8.8.8.8\")\n        print(f\"Google DNS: {google.org}\")\n\n        # Privacy detection via Plus API\n        plus_info = await client.get_plus_info(\"1.1.1.1\")\n        print(f\"VPN detected: {plus_info.anonymous.is_vpn}\")\n        print(f\"ASN: {plus_info.as_info.asn}\")\n\nasyncio.run(main())\n```\n\n## Type Safety\n\nAll models are strongly typed using Pydantic:\n\n```python\nfrom mcp_ipinfo.api_models import (\n    FullResponse,      # Basic IP information\n    PlusResponse,      # Comprehensive IP intelligence (geo, ASN, privacy)\n    CompanyResponse,   # Company information\n    RangesResponse,    # IP ranges for a domain\n    # ... and many more\n)\n```\n\n## Requirements\n\n- Python 3.13+\n- aiohttp\n- fastmcp\n- pydantic\n- mcp\n\n## About\n\nPart of the [NimbleTools](https://www.nimbletools.ai) ecosystem.\nFrom the makers of [NimbleBrain](https://www.nimblebrain.ai). \n\n## License\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNimbleBrainInc%2Fmcp-ipinfo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNimbleBrainInc%2Fmcp-ipinfo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNimbleBrainInc%2Fmcp-ipinfo/lists"}