protogrid

Search / ls.ip/ipls-ip-lookup-service

IP.LS — IP Lookup Service

R0· no sign-in

Keyless IP geolocation, ASN/ISP, timezone and DNS records for any IP or domain, plus your own IP.

v1.4.0 · active · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality100strong
Trust80of 100
Uptime, 30 days100%
Latency p50791 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "ipls-ip-lookup-service": {
      "type": "http",
      "url": "https://ip.ls/mcp"
    }
  }
}
claude mcp add --transport http ipls-ip-lookup-service https://ip.ls/mcp
[mcp_servers.ipls-ip-lookup-service]
url = "https://ip.ls/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ipls-ip-lookup-service": {
      "type": "remote",
      "url": "https://ip.ls/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "ipls-ip-lookup-service": {
      "type": "http",
      "url": "https://ip.ls/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=ipls-ip-lookup-service&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vaXAubHMvbWNwIn0%3D"
}
{
  "servers": {
    "ipls-ip-lookup-service": {
      "type": "http",
      "url": "https://ip.ls/mcp"
    }
  }
}
{
  "mcpServers": {
    "ipls-ip-lookup-service": {
      "httpUrl": "https://ip.ls/mcp"
    }
  }
}
extensions:
  "ipls-ip-lookup-service":
    enabled: true
    name: "ipls-ip-lookup-service"
    type: streamable_http
    uri: "https://ip.ls/mcp"
    timeout: 300

Quality 100 / 100strong

protocol100 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • pass
    protocol.list_ttltool list is cacheable (ttlMs 3600000)
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene100 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations6 of 6 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • pass
    tools.token_costabout 966 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changes2 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

6 tools, about 966 tokens to load them all · tool set 498e01299bc7 · tools last changed 2026-09-28 · checked 2026-10-21 01:38 UTC

Tool changes

  • ip_summarychangeddescription, input schema
    before

    Aggregate a batch of up to 5000 IPv4/IPv6 addresses (or up to 100 hostnames, each resolved server-side) into deterministic distributions by country, continent, ASN/operator and network prefix, each bucket carrying a bounded sample so the result can be spot-checked without re-running the batch. Counting, grouping and sampling happen server-side and are exactly reproducible: buckets sort by count desc then key asc, samples are the lowest addresses in the bucket, and the same input set always yields the same output regardless of order. Nothing is dropped silently — inputs that fail are counted in `errors`, addresses with no database record in `no_data`, and buckets beyond the listing in that dimension's `tail`. Invariants: counted + no_data.n = addresses, and each by_* dimension sums to counted with its remainder as `tail`. Counts are per occurrence, so a repeated address counts each time. Use this instead of ip_lookup once the input is in the hundreds or thousands — ip_lookup returns every row, which no context window can hold. Results are facts only: no datacenter/residential classification, no score, no verdict. Data source: DB-IP Lite (CC BY 4.0).

    after · 52% of words in common

    Summarize a large batch of IPs into distributions by country, continent, ASN/operator and network prefix, each bucket with a sample of addresses. Use instead of ip_lookup once the input is in the hundreds or thousands — ip_lookup returns every row, which no context window holds. Up to 5000 addresses or 100 hostnames. Counts are per occurrence; nothing is dropped silently (failed → `errors`, no database record → `no_data`, unlisted buckets → `tail`), the same input set always returns the same numbers, and the result is facts only — no datacenter/residential classification, no verdict. DB-IP Lite (CC BY 4.0).

  • ip_summaryadded

    Aggregate a batch of up to 5000 IPv4/IPv6 addresses (or up to 100 hostnames, each resolved server-side) into deterministic distributions by country, continent, ASN/operator and network prefix, each bucket carrying a bounded sample so the result can be spot-checked without re-running the batch. Counting, grouping and sampling happen server-side and are exactly reproducible: buckets sort by count desc then key asc, samples are the lowest addresses in the bucket, and the same input set always yields the same output regardless of order. Nothing is dropped silently — inputs that fail are counted in `errors`, addresses with no database record in `no_data`, and buckets beyond the listing in that dimension's `tail`. Invariants: counted + no_data.n = addresses, and each by_* dimension sums to counted with its remainder as `tail`. Counts are per occurrence, so a repeated address counts each time. Use this instead of ip_lookup once the input is in the hundreds or thousands — ip_lookup returns every row, which no context window can hold. Results are facts only: no datacenter/residential classification, no score, no verdict. Data source: DB-IP Lite (CC BY 4.0).

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 80 / 100

no-repository
provenance45
liveness100
freshness100
hygiene80

+dns-namespace +reachable +uptime-100% +updated-25d-ago -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://ip.ls/mcp streamable-httpnoneyes100%791 ms2026-07-28, 2025-06-18, 2025-03-26, 2024-11-052026-10-20

Tools (6)

headersread-onlyReturn all HTTP request headers as seen by the IP.LS server (including X-Real-IP / X-Forwarded-For injected by the frontend proxy). Useful for debugging proxies and client identity.
ip_lookupread-onlyLook up geolocation, ISP and network info for any IPv4/IPv6 address or hostname, or an array of them for batch lookup. Returns ip, city, region, country, coordinates, ASN/ISP, timezone and continent (full name, e.g. North America); when a domain is queried, an extra `domain` field echoes it. Data source: DB-IP Lite (CC BY 4.0). Anycast IPs are approximate.
ip_resolvedread-onlyResolve a domain to all its A and AAAA records (deduplicated, up to 6) and return geolocation for each address. Returns an array of { ip, protocol, domain, city, region, country, coordinates, ASN/ISP, ... }. For a bare IP, returns a single-element array.
ip_selfread-onlyGet geolocation and network info about the caller's own public IP, plus the protocol stack (IPv4/IPv6) of the current connection. On dual-stack machines the stack is chosen by the client and may differ from `curl ip.ls`, which picks a random stack; use curl -4/-6 locally to get the other stack, or — for clients that cannot pick a stack (browser, PowerShell, most HTTP libraries) — the single-stack hostnames https://4.ip.ls / https://6.ip.ls (DNS selects the stack; an unreachable 6.ip.ls means no usable IPv6). Data comes from a server-side GeoIP lookup on the caller's real IP.
ip_summaryread-onlySummarize a large batch of IPs into distributions by country, continent, ASN/operator and network prefix, each bucket with a sample of addresses. Use instead of ip_lookup once the input is in the hundreds or thousands — ip_lookup returns every row, which no context window holds. Up to 5000 addresses or 100 hostnames. Counts are per occurrence; nothing is dropped silently (failed → `errors`, no database record → `no_data`, unlisted buckets → `tail`), the same input set always returns the same numbers, and the result is facts only — no datacenter/residential classification, no verdict. DB-IP Lite (CC BY 4.0).
uaread-onlyReturn the User-Agent string of the current HTTP client.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "ls.ip/ipls-ip-lookup-service",
  "title": "IP.LS — IP Lookup Service",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://ip.ls/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "1.4.0",
  "description": "Keyless IP geolocation, ASN/ISP, timezone and DNS records for any IP or domain, plus your own IP."
}