X-Lookup

Navegador somente leitura, sem autenticação, para conteúdo público do X/Twitter, projetado especificamente para agentes de IA. Status e threads, perfis, busca, seguidores/seguindo

Documentação

x-lookup

Navegador somente leitura, sem autenticação, para conteúdo público do X/Twitter, criado especificamente para agentes de IA. Status e threads, perfis, busca, seguidores/seguindo — servidos como Markdown compacto por padrão, JSON estruturado sob solicitação, HTML Open Graph para bots de pré-visualização de aplicativos de chat, além de um endpoint oEmbed.

Hospedado em https://x-lookup.mynameistito.com como um único Cloudflare Worker. Sem banco de dados, sem login, sem chaves de API — os únicos upstreams são a API gratuita FxTwitter e o endpoint de sindicação do Twitter.

Não afiliado à X Corp.

Início rápido

Substitua x.com por x-lookup.mynameistito.com em qualquer URL pública de status:

https://x.com/handle/status/1234567890
https://x-lookup.mynameistito.com/handle/status/1234567890
curl -sS -H "Accept: text/markdown" "https://x-lookup.mynameistito.com/handle/status/1234567890"

curl -sS -G "https://x-lookup.mynameistito.com/api/convert" --data-urlencode "url=https://x.com/handle/status/1234567890"

Navegadores que solicitam HTML recebem uma página legível contendo o Markdown. Discord, Telegram, Slack e outros bots de pré-visualização recebem HTML de incorporação Open Graph.

Rotas

RotaFinalidadeParâmetros de consulta
GET /api/convert?url=<x-status-url> (ou handle= + id=)Converter um status/threadveja Parâmetros de conversão de post
GET /:handle/status/:idO mesmo, via reescrita de URLigual a /api/convert
GET /api/browse?resource=profile|search|followers|following&…Endpoint de navegaçãoveja Parâmetros de navegação
GET /search?q=…Buscar postsq (obrigatório), feed, cursor, page, limit, full, format, nocache
GET /:handlePerfil + posts originais mais recentescursor, page, limit, full, format, nocache
GET /:handle/followersUsuários seguidorescursor, page, limit, full, format, nocache
GET /:handle/followingUsuários seguidoscursor, page, limit, full, format, nocache
GET /oembed?url=…JSON oEmbedurl; substituições opcionais text, author, status, provider
GET /og.pngImagem de compartilhamento Open Graph / Twitter 1200×630
GET / (também /docs)Documentação completa de uso (Markdown)

Todas as respostas da API enviam CORS *, suportam OPTIONS (204) e HEAD; outros métodos recebem 405. Erros são sempre { "error": string, "code": string } com um status verdadeiro: 400 entrada inválida, 404 conteúdo genuinamente ausente, 502 recusa ou falha do upstream.

Servidor MCP

As mesmas capacidades públicas e somente leitura estão disponíveis através do endpoint MCP sem estado:

https://x-lookup.mynameistito.com/mcp

Exemplo de configuração remota do MCP:

{
  "mcpServers": {
    "x-lookup": {
      "url": "https://x-lookup.mynameistito.com/mcp"
    }
  }
}

O servidor expõe estas ferramentas:

FerramentaEntrada obrigatóriaEntrada opcional
browse_xresourcehandle, q, feed, cursor, page, limit, full, format, nocache
convert_statusurl, ou handle + idformat, thread, context, replies, userinfo, full, nocache
search_postsqfeed, cursor, page, limit, full, format, nocache
get_profilehandlecursor, page, limit, full, format, nocache
list_followershandlecursor, page, limit, full, format, nocache
list_followinghandlecursor, page, limit, full, format, nocache
get_oembedurl, text, author, status, provider
get_health

As ferramentas de navegação retornam JSON estruturado com uma renderização Markdown incluída. A conversão retorna JSON estruturado com o Markdown renderizado, posts, avisos, provedor e status de cache. O endpoint MCP é sem estado; não requer ID de sessão MCP ou autenticação.

Parâmetros de conversão de post

Tanto GET /:handle/status/:id quanto GET /api/convert?url=… suportam:

ParâmetroPadrãoValores suportados
formatmarkdownmarkdown, obsidian, json
fullfalsetrue, 1, ou yes ativa Markdown expandido; Obsidian é sempre expandido
threadfulloff, full, conversation, ou um limite de 2 a 100
contextfullfull inclui pais, thread do autor e respostas selecionadas; thread exclui respostas não relacionadas
repliestoptop, recent, off
userinfooffoff, author, all
nocachefalsetrue, 1, ou yes ignora o cache

Negociação de conteúdo: format=json ou Accept: application/json → JSON; User-Agents de bots de pré-visualização sem formato explícito → HTML OG; Accept: text/html → página HTML; caso contrário, Markdown.

Parâmetros de navegação

/api/browse, /search, /:handle e listas de seguidores aceitam:

ParâmetroPadrãoValores suportados
qConsulta de busca; obrigatório em /search e resource=search. Suporta operadores do X como from:, since:
feedlatestlatest, top, media — somente busca
cursorToken de continuação opaco de Continue → / nextCursor
page1110; percorre páginas quando nenhum cursor é fornecido
limit20150 resultados por resposta
fullfalsetrue, 1, ou yes adiciona datas/métricas aos posts e contagens de seguidores/bios aos usuários
formatmarkdownmarkdown, json
nocachefalsetrue, 1, ou yes ignora o cache

Prefira o cursor opaco do link Continue → do Markdown ou nextCursor do JSON em vez de percorrer páginas.

Cabeçalhos de resposta significativos

X-Source (provedor de busca), X-Cache (HIT|MISS|BYPASS), X-Browse-Resource, X-Result-Count, X-Converter, X-Post-Count, X-Warnings, X-Embed.

Nota sobre disponibilidade da busca

FxTwitter recusa alguns IPs de egress de datacenter. Quando isso acontece, a busca retorna 502 com código search_unavailable — nunca um falso "post não encontrado". Consultas de status recorrem do FxTwitter ao endpoint de sindicação do Twitter.

Desenvolvimento

O repositório usa Bun 1.4.0. No Windows, instale o Bun pelas instruções oficiais do PowerShell e então execute:

bun install --frozen-lockfile
bun run dev        # local workerd, isolated dev_<user> stage
bun run test       # vitest
bun run typecheck  # tsc --noEmit
bun run plan       # preview the production diff
bun run deploy     # deploy the prod stage (attaches x-lookup.mynameistito.com)
bun run destroy    # tear down the prod stage (interactive confirm)

Alchemy usa o perfil default a menos que ALCHEMY_PROFILE ou um argumento explícito --profile selecione outro perfil. Para usar um perfil local nomeado nos scripts de pacote no PowerShell, defina-o no shell atual antes de executar um comando:

$env:ALCHEMY_PROFILE = "your-profile"
bun run plan
bun run dev

No Bash, use export ALCHEMY_PROFILE=your-profile. Os perfis são armazenados localmente em ~/.alchemy/profiles.json; configure um com bunx alchemy login --profile your-profile. GitHub Actions não usam perfis locais: jobs de deploy autenticam com os segredos do repositório CLOUDFLARE_API_TOKEN e CLOUDFLARE_ACCOUNT_ID. A infraestrutura vive inteiramente em alchemy.run.ts e src/worker.ts — não há wrangler.jsonc. Em prod, o Worker mantém seu nome físico x-lookup e domínio personalizado x-lookup.mynameistito.com; todos os outros estágios (dev local, pré-visualizações de PR) derivam uma identidade isolada. A única variável é CACHE_TTL_SECONDS (padrão 3600). Não há segredos. O cache é em duas camadas: memória L1 no isolado mais Cloudflare Cache API L2.

CI executa lint/typecheck/testes sem credenciais, além de uma validação de stack sem estado (.github/workflows/ci.yml). .github/workflows/deploy.yml chama o workflow reutilizável fixado alchemy-deploy, que faz deploy somente após o CI passar para o commit exato: prod para main e uma pré-visualização isolada pr-<number> para pull requests do mesmo repositório. Stacks de pré-visualização são derrubados quando o PR fecha, e pull requests de forks nunca recebem credenciais do Cloudflare ou deploys de pré-visualização. A resolução de pré-visualização executa código confiável do branch padrão e aguarda o resultado exato do CI do head do PR antes de expor credenciais.

O workflow compartilhado é dono do relatório de deploy de pré-visualização e produção, resolução de URL e limpeza de pré-visualização. A limpeza usa segredos do Cloudflare mapeados explicitamente no escopo do repositório, faz checkout apenas do branch padrão confiável, destrói pr-<number> primeiro e remove registros de deploy do GitHub somente após o teardown bem-sucedido; falha na limpeza retém esses registros e o run de diagnóstico. O deploy workflow_run faz checkout do SHA exato que passou no CI.

A skill de agente incluída em skills/x-lookup/ encapsula esta API para uso via CLI; substitua seu alvo com X_API_BASE ao testar outro deploy.