{
  "markdown": "# GeoLocation MCP Server\n\n![Coverage](.github/badges/jacoco.svg)\n\nFast and up-to-date IP geolocation data for LLMs\n\n<details>\n<summary>Demo</summary>\n\n![demo](docs/demo.gif)\n\n</details>\n\nFor public IPv4 / IPv6 address:\n\n- Flags: isDatacenter, isTorExitNode, isVPN\n- City name, region ISO code, latitude/longitude, accuracy radius, postal code, timezone\n- Country name, ISO code, EU membership/GDPR\n- ASN number, ISP/organization name, network CIDR\n\n## MCP tools\n\n| Tool                     | Description                                   |\n| ------------------------ | --------------------------------------------- |\n| `getGeoLocationData`     | single IP lookup                              |\n| `getGeoLocationDataBulk` | batch lookup, failed IPs don't block the rest |\n\n## Data sources\n\n| Data                    | Source                                                                                                                                     | Refresh              |\n| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------- |\n| City / ASN              | [GeoLite2](https://dev.maxmind.com/geoip/geolite2-free-geolocation-data) via [P3TERX/GeoLite.mmdb](https://github.com/P3TERX/GeoLite.mmdb) | on startup if absent |\n| Tor exit nodes          | [Tor Project](https://check.torproject.org/torbulkexitlist)                                                                                | daily                |\n| VPN / Datacenter ranges | [X4BNet/lists_vpn](https://github.com/X4BNet/lists_vpn)                                                                                    | daily                |\n\n## Usage\n\n```shell\n# named volume so DBs persist across restarts\ndocker run -p 8891:8080 -v geolocation_data:/home/nonroot/.geolocation-mcp 7mza/geolocation-mcp:latest\n```\n\nor with compose\n\n```yaml\nservices:\n  geolocation-mcp:\n    image: 7mza/geolocation-mcp:latest\n    ports:\n      - '8891:8080'\n    restart: unless-stopped\n    volumes:\n      - geolocation_data:/home/nonroot/.geolocation-mcp\nvolumes:\n  geolocation_data:\n    name: geolocation_data\n```\n\nConnect your LLM:\n\n```shell\n# example for claude\nclaude mcp add --transport http geolocation http://localhost:8891/mcp\n```\n\nTest with MCP inspector:\n\n```shell\nnpm i && npm run mcp\n# transport: streamable\n# url: http://localhost:8891/mcp\n```\n\n## Build from source\n\nRequires [SDKMAN](https://sdkman.io) and [nvm](https://github.com/nvm-sh/nvm).\n\n```shell\nnvm use && npm i && sdk env install\n```\n\nJVM:\n\n```shell\n./gradlew clean ktlintFormat ktlintCheck build\n./gradlew bootRun\n```\n\nNative:\n\n```shell\n./gradlew clean ktlintFormat ktlintCheck build -PgenerateMetadata\n./gradlew buildImage\ndocker run -p 8891:8080 -v geolocation_data:/home/nonroot/.geolocation-mcp 7mza/geolocation-mcp:latest\n```\n\n## License\n\nGeoLite2 DBs are subject to the [GeoLite2 EULA](https://www.maxmind.com/en/geolite/eula).\n",
  "bytes": 2999,
  "sha": "358815012905328026d64558663fd63107409d2385b04a2f448e326daad8a9aa",
  "repo_slug": "7mza/geolocation-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_7mza_geolocation_mcp_50768943/readme"
}