# FernTool IP Lookup

> IP lookup with VPN/Tor/datacenter flags, batch lookup, WHOIS (RDAP), DNS, reverse DNS, subnet math.

- name: com.ferntool/ip
- version: 1.1.0
- connection class: R0 (autonomous)
- trust: 100/100
- quality: 73/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.ferntool%2Fip
- tools: https://api.protogrid.dev/v1/servers/com.ferntool%2Fip/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "ip": {
      "type": "http",
      "url": "https://www.ferntool.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 100
- drivers: +repository +namespace-matches-repo +dns-namespace +website +reachable +uptime-100% +updated-4d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 73/100 (new)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: lookup_ip (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); validate_ip (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); whois_lookup (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 1,904 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`: tool history recorded for 4 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 18, about 1,904 tokens to load them all
- tool set hash: 2435934528f47b00bc85a4d712bf7c90
- tools last changed: 2026-10-20T09:43:43.408Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.ferntool/ip.svg)](https://protogrid.dev/servers/com.ferntool/ip)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-20 `pick_random` added
  - Fairly pick random winners from a list, shuffle a list, or split people into random even teams, using a cryptographically secure generator (you cannot choose fairly at random yourself). Use for giveaways, raffles, "who goes first", random order or team splits. An item listed twice has twice the chance unless dedupe=true.
- 2026-10-19 `random_number` added
  - Fair, cryptographically secure random integers (you cannot produce real randomness yourself). min and max are inclusive. unique=true for no repeats (raffles, lotto, picking winners). For a coin flip use min 0, max 1; for dice use min 1, max 6.
- 2026-10-19 `convert_timezone` added
  - Convert a time between time zones with daylight saving applied (you cannot do this reliably yourself). from/to accept IANA zones (Africa/Johannesburg), common abbreviations (SAST, EST, PST, GMT, CET, IST=India, CST=US Central) or big cities. Omit time for now. Returns each local date, time, UTC offset, abbreviation, hour difference and whether it is the next/previous day.
- 2026-10-18 `date_calc` added
  - Exact calendar maths. With end: days between two dates (plus weeks, months+days, weekdays Mon-Fri, weekend days). With add_days/add_weeks/add_months/add_years (negative to subtract): the resulting date and weekday; business_days=true skips weekends. Use this instead of counting days yourself.
- 2026-10-18 `convert_timestamp` added
  - Convert a Unix timestamp (seconds, milliseconds, microseconds or nanoseconds, auto-detected) to a readable date, or a date/time string (e.g. 2026-12-25 09:00, read in the given time zone unless it has its own offset) to a Unix timestamp. Also returns weekday, ISO week and how long ago or until.
- 2026-10-18 `get_current_time` added
  - Get the exact current date and time (you cannot know it otherwise). Returns Unix seconds and milliseconds, ISO 8601 in UTC and in the requested IANA time zone, weekday, ISO week and day of year.
- 2026-10-17 `count_words` added
  - Exactly count words, characters (with and without spaces), sentences and paragraphs in a text, with reading/speaking time and the most repeated words. Use this instead of estimating counts yourself.
- 2026-10-17 `make_qr_code` added
  - Create a static QR code (never expires) for a URL, Wi-Fi string (WIFI:T:WPA;S:name;P:pass;;), mailto:, tel: or any text up to 2000 characters. Returns an SVG string plus a ferntool.com image URL that renders the same code.
- 2026-10-16 `ai_service_status` added
  - Live status of AI services (ChatGPT/OpenAI, Claude, Gemini API, GitHub Copilot, Perplexity, Cohere) read from their official status pages, cached ~60s. level is up, degraded, down or unknown.
- 2026-10-16 `estimate_ai_cost` added
  - Estimate token count and USD API cost of a text across major AI models (OpenAI GPT, Anthropic Claude, Google Gemini), and whether it fits each context window. Token counts are approximate. Pass text, or tokens directly.

Full history: https://api.protogrid.dev/v1/servers/com.ferntool%2Fip/changes

## Remotes

- https://www.ferntool.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (18)

- `ai_service_status`: Live status of AI services (ChatGPT/OpenAI, Claude, Gemini API, GitHub Copilot, Perplexity, Cohere) read from their official status pages, cached ~60s. level is up, degraded, down or unknown.
- `batch_lookup_ip`: Look up 1-100 IPv4/IPv6 addresses at once. Each result has version, scope, country, timezone, ASN, network owner and flags (is_tor, is_datacenter, provider).
- `convert_timestamp`: Convert a Unix timestamp (seconds, milliseconds, microseconds or nanoseconds, auto-detected) to a readable date, or a date/time string (e.g. 2026-12-25 09:00, read in the given time zone unless it has its own offset) to a Unix timestamp. Also returns weekday, ISO week and how long ago or until.
- `convert_timezone`: Convert a time between time zones with daylight saving applied (you cannot do this reliably yourself). from/to accept IANA zones (Africa/Johannesburg), common abbreviations (SAST, EST, PST, GMT, CET, IST=India, CST=US Central) or big cities. Omit time for now. Returns each local date, time, UTC offset, abbreviation, hour difference and whether it is the next/previous day.
- `count_words`: Exactly count words, characters (with and without spaces), sentences and paragraphs in a text, with reading/speaking time and the most repeated words. Use this instead of estimating counts yourself.
- `date_calc`: Exact calendar maths. With end: days between two dates (plus weeks, months+days, weekdays Mon-Fri, weekend days). With add_days/add_weeks/add_months/add_years (negative to subtract): the resulting date and weekday; business_days=true skips weekends. Use this instead of counting days yourself.
- `dns_lookup`: Resolve DNS records for a domain via Cloudflare 1.1.1.1 DNS-over-HTTPS. Types: A, AAAA, MX, TXT, NS, CNAME, SOA (default: all).
- `estimate_ai_cost`: Estimate token count and USD API cost of a text across major AI models (OpenAI GPT, Anthropic Claude, Google Gemini), and whether it fits each context window. Token counts are approximate. Pass text, or tokens directly.
- `get_current_time`: Get the exact current date and time (you cannot know it otherwise). Returns Unix seconds and milliseconds, ISO 8601 in UTC and in the requested IANA time zone, weekday, ISO week and day of year.
- `get_my_ip`: Return the public IP address (and ISP, ASN, location, timezone) of the caller as seen by FernTool. Note: for remote agents this is the IP of the machine calling the MCP server.
- `lookup_ip`: Validate an IPv4/IPv6 address and return its version, scope (public/private/loopback/...), country, ASN and network owner (DB-IP Lite + IPtoASN data).
- `make_qr_code`: Create a static QR code (never expires) for a URL, Wi-Fi string (WIFI:T:WPA;S:name;P:pass;;), mailto:, tel: or any text up to 2000 characters. Returns an SVG string plus a ferntool.com image URL that renders the same code.
- `pick_random`: Fairly pick random winners from a list, shuffle a list, or split people into random even teams, using a cryptographically secure generator (you cannot choose fairly at random yourself). Use for giveaways, raffles, "who goes first", random order or team splits. An item listed twice has twice the chance unless dedupe=true.
- `random_number`: Fair, cryptographically secure random integers (you cannot produce real randomness yourself). min and max are inclusive. unique=true for no repeats (raffles, lotto, picking winners). For a coin flip use min 0, max 1; for dice use min 1, max 6.
- `reverse_dns`: Reverse DNS (PTR) lookup for an IPv4/IPv6 address, with forward-confirmation check.
- `subnet_calc`: IPv4/IPv6 CIDR subnet calculator: network, netmask, wildcard, broadcast, first/last usable host, total and usable addresses, block type.
- `validate_ip`: Check whether a string is a valid IPv4 or IPv6 address and classify it.
- `whois_lookup`: WHOIS via RDAP for a domain (registrar, created/expiry dates, status, nameservers, DNSSEC), an IP address (network name, range, owner org, country, abuse contact) or an ASN like AS13335.
