# API e servidor MCP

Tudo o que a [página inicial](https://iseeu.cc/pt/) mostra, para scripts, servidores e agentes de IA. HTTPS, sem chave de API, sem cadastro, com CORS liberado e grátis para uso comercial dentro do limite de uso justo.

## Resposta curta

`curl iseeu.cc` mostra o seu endereço IP público seguido de uma quebra de linha; `/json` devolve tudo o que a página inicial mostra num único objeto JSON, e `/mcp` é um servidor Model Context Protocol com cinco ferramentas. É grátis e não precisa de chave dentro do limite de 60 requisições por minuto por endereço IP, ou 10 por minuto nos dois endpoints que fazem uma consulta externa.

### Como é obtido

A mesma URL responde de acordo com a requisição: um cabeçalho Accept que pede text/html recebe a página web; qualquer outro recebe texto puro. Os endpoints JSON aceitam `?format=text` para devolver linhas `key: value`, e um cabeçalho Accept que prefere text/plain tem o mesmo efeito (negociação de conteúdo, RFC 9110). As respostas nunca vão para cache e podem ser lidas por scripts de qualquer origem. O endpoint MCP usa Streamable HTTP e não guarda estado.

### Exemplo prático

```
$ curl iseeu.cc
192.0.2.1
$ curl -s "iseeu.cc/geo?format=text" | grep '^country:'
country: US
```

192.0.2.1 e o país são valores fictícios da faixa reservada para documentação (RFC 5737); a sua requisição devolve os seus próprios valores.

### Limites

- Os dados descrevem a máquina que envia a requisição; por meio de um assistente de IA hospedado na nuvem, essa máquina é o servidor do provedor, e não você.
- O limite de requisições é contado por local da Cloudflare, por isso é aproximado.
- Os dados de localização são uma estimativa tirada de um banco de dados de IPs.

### Fontes

- [RFC 9110, section 12: Content Negotiation](https://www.rfc-editor.org/rfc/rfc9110#section-12): respostas conforme o cabeçalho Accept.
- [Model Context Protocol specification (2025-06-18)](https://modelcontextprotocol.io/specification/2025-06-18): o transporte e as mensagens do MCP.
- [OpenAPI Specification 3.1.0](https://spec.openapis.org/oas/v3.1.0): o formato do /openapi.json.
- [RFC 5737: IPv4 Address Blocks Reserved for Documentation](https://www.rfc-editor.org/rfc/rfc5737): o endereço de exemplo.

## Começo rápido

A saída de exemplo abaixo usa `192.0.2.1`, um endereço reservado para documentação que nunca pertence a um aparelho real. Quando você rodar esses comandos, verá o seu próprio IP.

```
$ curl iseeu.cc
192.0.2.1

$ curl -s iseeu.cc/json | jq '{ip, country: .location.country, asn: .network.asn, tls: .tls.version}'
{
  "ip": "192.0.2.1",
  "country": "US",
  "asn": 7922,
  "tls": "TLSv1.3"
}
```

A URL inicial decide o que devolver pelo seu cabeçalho `Accept`: os navegadores pedem `text/html` e recebem a página; curl, wget, HTTPie, PowerShell e bibliotecas HTTP não pedem, e recebem uma única linha com o seu endereço IP e uma quebra de linha.

## Endpoints

| Caminho | O que devolve |
| --- | --- |
| / | Seu IP em texto puro (clientes que não são navegadores) ou a página web (navegadores) |
| /ip | Seu IP em texto puro, sempre |
| /json | Tudo: IP, localização, rede, TLS, HTTP, User-Agent analisado, cabeçalhos da requisição e hora do servidor |
| /geo | IP, localização, ASN, organização e data center da Cloudflare |
| /tls | Versão do TLS, cifra, tamanho do ClientHello, hashes das cifras e das extensões e versão do HTTP |
| /ua | Seu User-Agent, dividido em navegador, motor, sistema operacional, dispositivo e tipo de cliente |
| /headers | Os cabeçalhos da requisição que você enviou e os que a Cloudflare adicionou |
| /api/rdap?q= | Dados de registro RDAP de um domínio, endereço IP ou CIDR, ou número AS, vindos do registro que a IANA indica para ele: um resumo e o JSON RDAP bruto |
| /api/headers-check?url= | Cabeçalhos de resposta de uma URL pública (segue os redirecionamentos e nunca lê o corpo) com uma nota de segurança |
| /mcp | Servidor MCP (Streamable HTTP, sem estado) — veja abaixo |

Para ver o endereço de um protocolo específico, force o protocolo no curl: `curl -4 iseeu.cc` mostra o seu endereço IPv4 e `curl -6 iseeu.cc` o seu endereço IPv6 (o comando falha na hora se a sua máquina não tiver rota IPv6); o mesmo vale para o JSON, com `curl -4 iseeu.cc/json` e `curl -6 iseeu.cc/json`.

Acrescente `?format=text` (ou envie `Accept: text/plain`) a qualquer endpoint JSON para receber linhas simples `key: value`, práticas de usar com `grep`. `format` aceita só `json` ou `text`; qualquer outro valor recebe um `400` com `"error": "invalid_format"`, em vez de cair calado no formato padrão. `curl "iseeu.cc/ua?format=text"` mostra só a string do User-Agent. A descrição legível por máquina está em [/openapi.json](https://iseeu.cc/openapi.json) (OpenAPI 3.1).

## O objeto /json

Um exemplo de resposta (de novo com o endereço de exemplo reservado `192.0.2.1`):

```
{
  "ip": "192.0.2.1",
  "ipVersion": 4,
  "location": {
    "country": "US", "countryName": "United States",
    "region": "Texas", "regionCode": "TX", "city": "Austin",
    "postalCode": "78701", "metroCode": "635", "continent": "NA",
    "isEU": false, "latitude": 30.27, "longitude": -97.74,
    "timezone": "America/Chicago"
  },
  "network": { "asn": 7922, "asOrganization": "Comcast Cable", "colo": "DFW",
               "clientTcpRttMs": 22, "clientQuicRttMs": null, "deliveryRateBps": null },
  "tls": { "version": "TLSv1.3", "cipher": "AEAD-AES128-GCM-SHA256", "clientHelloLength": 508,
           "clientCiphersSha1": "…", "clientExtensionsSha1": "…" },
  "http": { "protocol": "HTTP/2", "method": "GET", "priority": null, "acceptEncoding": "gzip, br" },
  "userAgent": { "raw": "curl/8.9.1", "browser": {…}, "engine": {…}, "os": {…},
                 "device": {…}, "cpu": {…}, "kind": "cli", "bot": { "name": "curl", "kind": "cli", "operator": null } },
  "headers": { "accept": "*/*", "host": "iseeu.cc", "user-agent": "curl/8.9.1" },
  "edgeHeaders": { "cf-ray": "…", "cf-ipcountry": "US", … },
  "time": { "server": "2026-10-08T12:00:00.000Z", "serverMs": 1791460800000 },
  "meta": { "docs": "https://iseeu.cc/api/", "privacy": "https://iseeu.cc/privacy/", "simulated": false }
}
```

Valores ausentes vêm como `null` e nunca são omitidos, então a estrutura é estável. Isso inclui medições que não se aplicam ou que não foram feitas: `clientTcpRttMs` só existe em conexões TCP (HTTP/1.1 e HTTP/2), `clientQuicRttMs` só em HTTP/3, e a Cloudflare informa um valor não medido como 0, que repassamos como `null`, e não como uma ida e volta de zero milissegundo. Os dados de localização e de rede vêm da inteligência de IP da Cloudflare para o endereço de onde você se conectou; eles descrevem a rede do seu provedor, não um endereço de rua. `tls.clientCiphersSha1` e `clientExtensionsSha1` são hashes que a Cloudflare calcula do seu ClientHello, não JA3 nem JA4. O Chrome embaralha a ordem das extensões TLS, então o hash das extensões dele costuma mudar de uma conexão para outra; o hash das cifras é o mais estável dos dois. `userAgent.kind` é um destes valores: `browser`, `search-crawler`, `ai-crawler`, `ai-assistant`, `social-preview`, `http-library`, `cli`, `headless-browser`, `monitoring`, `bot` ou `unknown`.

## Usos comuns

**Confirmar que uma VPN ou um proxy está ativo antes de rodar uma tarefa.** Compare o país de saída com o esperado e interrompa se estiver errado:

```
country=$(curl -s "iseeu.cc/geo?format=text" | awk -F': ' '$1=="country"{print $2}')
[ "$country" = "DE" ] || { echo "VPN not in Germany (got $country)"; exit 1; }
```

**Descobrir o endereço público de um servidor** de dentro de um contêiner, de um runner de CI ou de uma função na nuvem, onde a interface de rede só mostra um endereço privado. `curl -s iseeu.cc` basta, e a quebra de linha no final permite usar o resultado com segurança numa substituição de comando do shell.

**Ver o que o seu cliente HTTP realmente envia.** As bibliotecas adicionam, renomeiam e reordenam cabeçalhos. Chame `/headers` a partir do seu código para ver o conjunto exato, ou `/tls` para confirmar qual versão de TLS e qual cifra o seu runtime negocia.

**Em outras linguagens:**

```
// JavaScript (browser or Node 18+)
const me = await (await fetch("https://iseeu.cc/json")).json();

# Python
import requests; me = requests.get("https://iseeu.cc/json", timeout=5).json()

// Go
resp, _ := http.Get("https://iseeu.cc/ip")

# PowerShell
(Invoke-RestMethod https://iseeu.cc/json).location.country
```

## Consultas que saem do iseeu.cc

`/api/rdap` e `/api/headers-check` fazem uma requisição externa cada um, por isso têm um limite próprio e menor: 10 chamadas por minuto por endereço IP; acima disso, a resposta é `429` com `Retry-After: 60`. As consultas RDAP só vão para servidores listados no registro de bootstrap da IANA. A verificação de cabeçalhos aceita URLs públicas `http`/`https` nas portas 80 e 443, recusa endereços privados e reservados e o próprio iseeu.cc (também como destino de redirecionamento; nesse caso a resposta é `400 invalid_target`), segue até cinco redirecionamentos e desiste depois de cinco segundos. Nenhum dos dois endpoints armazena a consulta.

```
curl -s "iseeu.cc/api/rdap?q=AS64496" | jq .summary
curl -s "iseeu.cc/api/headers-check?url=https://example.com/" | jq '.grade | {grade, score}'
```

## Limites e uso justo

- **60 requisições por minuto por endereço IP.** Acima disso, você recebe `429` com `Retry-After: 60`. O limite é contado por local da Cloudflare, por isso é aproximado.
- As respostas, inclusive as do MCP, nunca vão para cache (`Cache-Control: no-store`). Os endpoints REST enviam `Access-Control-Allow-Origin: *`, então JavaScript de navegador em qualquer site pode chamá-los.
- O uso comercial é permitido. Só não coloque o `/json` numa página que todos os seus visitantes carregam; nessa escala, fale com a gente antes.
- Se 60 requisições por minuto realmente não bastam para o que você está construindo, conte para a gente pela [página de contato](https://iseeu.cc/pt/contato/).

## Servidor MCP para agentes de IA

`https://iseeu.cc/mcp` é um servidor [Model Context Protocol](https://modelcontextprotocol.io/) remoto via Streamable HTTP. Ele não guarda estado, não exige autenticação e oferece cinco ferramentas, todas somente leitura; `dns_lookup` e `rdap_lookup` compartilham o limite de 10 por minuto das consultas externas.

| Ferramenta | Entrada | O que faz |
| --- | --- | --- |
| whoami | `include_headers?` | IP público, localização, ASN e organização, data center da Cloudflare, versão do TLS e do HTTP e tipo de cliente da máquina que chama o servidor |
| check_headers | `headers?` | Aponta traços que a detecção de bots costuma pesar: falta de User-Agent ou Accept-Language, Chrome sem Client Hints, versões ou plataformas que não batem, cabeçalhos de proxy com outro IP, DNT e GPC. São indícios possíveis, não provas, porque qualquer cliente pode omitir ou forjar cabeçalhos. Sem entrada, verifica os cabeçalhos da própria chamada. |
| parse_ua | `user_agent?` | Divide um User-Agent em navegador, motor, sistema operacional, dispositivo e CPU, e classifica rastreadores, agentes de IA, ferramentas de linha de comando e bibliotecas |
| dns_lookup | `name`, `type?` | Registros A, AAAA, MX, TXT, NS, CNAME, CAA ou SOA pelo resolvedor da Cloudflare via DNS sobre HTTPS, com TTL, o indicador DNSSEC e uma nota que distingue um nome inexistente (NXDOMAIN) de um tipo de registro inexistente |
| rdap_lookup | `query`, `include_raw?` | Resumo do registro de um domínio, endereço IP ou número AS a partir do servidor RDAP autoritativo |

Clientes MCP que rodam no navegador podem chamá-lo de qualquer origem. O CORS permite `POST`, `GET` e `DELETE` com os cabeçalhos de requisição `Content-Type`, `Mcp-Session-Id`, `Mcp-Protocol-Version` e `Last-Event-ID` e expõe `Mcp-Session-Id`. Toda resposta MCP é enviada com `Cache-Control: no-store`, e o servidor não guarda nada entre uma chamada e outra. O corpo da requisição pode ter até 64 KB e um lote JSON-RPC até 10 mensagens; os maiores são recusados com o erro `-32600` antes que qualquer ferramenta rode.

### Conectar

```
# Claude Code
claude mcp add --transport http iseeu https://iseeu.cc/mcp

# Cursor, Windsurf, VS Code and other JSON configs
{ "mcpServers": { "iseeu": { "url": "https://iseeu.cc/mcp" } } }
```

Uma observação honesta sobre o `whoami`: ele informa a máquina que envia a requisição HTTP para `/mcp`, seja ela qual for. Para agentes de desktop e de linha de comando, essa é a sua própria rede, o que ajuda a verificar se um proxy ou uma VPN está funcionando. Para assistentes que rodam na nuvem, é o servidor do provedor.

## Arquivos de descoberta

- [/llms.txt](https://iseeu.cc/llms.txt) — um guia curto em texto puro para modelos de linguagem
- [/.well-known/mcp/server-card.json](https://iseeu.cc/.well-known/mcp/server-card.json) — cartão do servidor MCP
- [/openapi.json](https://iseeu.cc/openapi.json) — descrição OpenAPI 3.1 dos endpoints HTTP

## Privacidade

A API nunca registra endereços IP, cabeçalhos nem consultas, e não tem banco de dados. As respostas são montadas na memória a partir da requisição e descartadas; contamos as chamadas por endpoint, sem endereços IP. Os detalhes estão na [página de privacidade](https://iseeu.cc/pt/privacidade/).

A API é disponibilizada tal como está, sem garantia de que esteja sempre no ar. Os dados de localização e de rede podem estar errados. Não use a API como único sinal para decisões de segurança ou de prevenção a fraudes.

Última atualização: 2026-10-11

Página original: https://iseeu.cc/pt/api/
