X-Lookup
Navegador de solo lectura, sin autenticación, para contenido público de X/Twitter, diseñado específicamente para agentes de IA. Estados e hilos, perfiles, búsqueda, seguidores/siguiendo
Documentación
x-lookup
Navegador de solo lectura, sin autenticación, para contenido público de X/Twitter, diseñado específicamente para agentes de IA. Estados e hilos, perfiles, búsqueda, seguidores/siguiendo — servidos como Markdown compacto por defecto, JSON estructurado bajo petición, HTML Open Graph para bots de vista previa en apps de chat, además de un endpoint oEmbed.
Alojado en https://x-lookup.mynameistito.com como un único Cloudflare Worker. Sin base de datos, sin inicio de sesión, sin claves API — los únicos upstreams son la API gratuita de FxTwitter y el endpoint de sindicación de Twitter.
No afiliado con X Corp.
Inicio rápido
Reemplaza x.com con x-lookup.mynameistito.com en cualquier URL pública de estado:
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"
Los navegadores que solicitan HTML obtienen una página legible que contiene el Markdown. Discord, Telegram, Slack y otros bots de vista previa reciben HTML de inserción Open Graph.
Rutas
| Ruta | Propósito | Parámetros de consulta |
|---|---|---|
GET /api/convert?url=<x-status-url> (o handle= + id=) | Convertir un estado/hilo | ver Parámetros de conversión de publicaciones |
GET /:handle/status/:id | Igual, mediante reescritura de URL | igual que /api/convert |
GET /api/browse?resource=profile|search|followers|following&… | Endpoint de exploración | ver Parámetros de exploración |
GET /search?q=… | Buscar publicaciones | q (obligatorio), feed, cursor, page, limit, full, format, nocache |
GET /:handle | Perfil + últimas publicaciones originales | cursor, page, limit, full, format, nocache |
GET /:handle/followers | Usuarios seguidores | cursor, page, limit, full, format, nocache |
GET /:handle/following | Usuarios seguidos | cursor, page, limit, full, format, nocache |
GET /oembed?url=… | JSON oEmbed | url; anulaciones opcionales text, author, status, provider |
GET /og.png | Imagen para compartir Open Graph / Twitter de 1200×630 | — |
GET / (también /docs) | Documentación completa de uso (Markdown) | — |
Todas las respuestas de la API envían CORS *, admiten OPTIONS (204) y HEAD; otros métodos reciben 405. Los errores son siempre { "error": string, "code": string } con un estado veraz: 400 entrada incorrecta, 404 contenido genuinamente inexistente, 502 rechazo o fallo del upstream.
Servidor MCP
Las mismas capacidades públicas de solo lectura están disponibles a través del endpoint MCP sin estado:
https://x-lookup.mynameistito.com/mcp
Ejemplo de configuración MCP remota:
{
"mcpServers": {
"x-lookup": {
"url": "https://x-lookup.mynameistito.com/mcp"
}
}
}
El servidor expone estas herramientas:
| Herramienta | Entrada obligatoria | Entrada opcional |
|---|---|---|
browse_x | resource | handle, q, feed, cursor, page, limit, full, format, nocache |
convert_status | url, o handle + id | format, thread, context, replies, userinfo, full, nocache |
search_posts | q | feed, cursor, page, limit, full, format, nocache |
get_profile | handle | cursor, page, limit, full, format, nocache |
list_followers | handle | cursor, page, limit, full, format, nocache |
list_following | handle | cursor, page, limit, full, format, nocache |
get_oembed | — | url, text, author, status, provider |
get_health | — | — |
Las herramientas de exploración devuelven JSON estructurado con una representación Markdown incluida. La conversión devuelve JSON estructurado con el Markdown renderizado, publicaciones, advertencias, proveedor y estado de caché. El endpoint MCP no tiene estado; no requiere ID de sesión MCP ni autenticación.
Parámetros de conversión de publicaciones
Tanto GET /:handle/status/:id como GET /api/convert?url=… admiten:
| Parámetro | Predeterminado | Valores admitidos |
|---|---|---|
format | markdown | markdown, obsidian, json |
full | false | true, 1, o yes habilita Markdown expandido; Obsidian siempre está expandido |
thread | full | off, full, conversation, o un límite de 2 a 100 |
context | full | full incluye padres, hilo del autor y respuestas seleccionadas; thread excluye respuestas no relacionadas |
replies | top | top, recent, off |
userinfo | off | off, author, all |
nocache | false | true, 1, o yes omite la caché |
Negociación de contenido: format=json o Accept: application/json → JSON; User-Agents de bots de vista previa sin formato explícito → HTML OG; Accept: text/html → página HTML; de lo contrario Markdown.
Parámetros de exploración
/api/browse, /search, /:handle y las listas de seguidores aceptan:
| Parámetro | Predeterminado | Valores admitidos |
|---|---|---|
q | — | Consulta de búsqueda; obligatoria en /search y resource=search. Admite operadores de X como from:, since: |
feed | latest | latest, top, media — solo búsqueda |
cursor | — | Token de continuación opaco de Continue → / nextCursor |
page | 1 | 1–10; recorre páginas cuando no se proporciona cursor |
limit | 20 | 1–50 resultados por respuesta |
full | false | true, 1, o yes añade fechas/métricas a las publicaciones y recuentos de seguidores/bios a los usuarios |
format | markdown | markdown, json |
nocache | false | true, 1, o yes omite la caché |
Prefiere el cursor opaco del enlace Continue → en Markdown o nextCursor en JSON sobre el recorrido de páginas.
Cabeceras de respuesta significativas
X-Source (proveedor de fetch), X-Cache (HIT|MISS|BYPASS), X-Browse-Resource, X-Result-Count, X-Converter, X-Post-Count, X-Warnings, X-Embed.
Nota sobre disponibilidad de búsqueda
FxTwitter rechaza algunas IPs de salida de centros de datos. Cuando eso ocurre, la búsqueda devuelve 502 con código search_unavailable — nunca un falso "publicación no encontrada". Las consultas de estado recurren de FxTwitter al endpoint de sindicación de Twitter.
Desarrollo
El repositorio usa Bun 1.4.0. En Windows, instala Bun desde las instrucciones oficiales de PowerShell, luego ejecuta:
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 el perfil default a menos que ALCHEMY_PROFILE o un argumento explícito --profile seleccione otro perfil. Para usar un perfil local con nombre para los scripts del paquete en PowerShell, configúralo para el shell actual antes de ejecutar un comando:
$env:ALCHEMY_PROFILE = "your-profile"
bun run plan
bun run dev
En Bash, usa export ALCHEMY_PROFILE=your-profile. Los perfiles se almacenan localmente en ~/.alchemy/profiles.json; configura uno con bunx alchemy login --profile your-profile. GitHub Actions no usan perfiles locales: los trabajos de despliegue se autentican con los secretos del repositorio CLOUDFLARE_API_TOKEN y CLOUDFLARE_ACCOUNT_ID. La infraestructura vive completamente en alchemy.run.ts y src/worker.ts — no hay wrangler.jsonc. En prod, el Worker mantiene su nombre físico x-lookup y dominio personalizado x-lookup.mynameistito.com; cada otra etapa (desarrollo local, vistas previas de PR) deriva una identidad aislada. La única variable es CACHE_TTL_SECONDS (predeterminado 3600). No hay secretos. El caché es de dos niveles: memoria L1 dentro del aislado más API de caché de Cloudflare L2.
CI ejecuta lint/typecheck/tests sin credenciales más una validación de pila sin estado (.github/workflows/ci.yml). .github/workflows/deploy.yml llama al flujo de trabajo reutilizable fijado alchemy-deploy, que despliega solo después de que CI tenga éxito para el commit exacto: prod para main y una vista previa aislada pr-<number> para pull requests del mismo repositorio. Las pilas de vista previa se eliminan cuando el PR se cierra, y los pull requests de forks nunca reciben credenciales de Cloudflare ni despliegues de vista previa. La resolución de vista previa ejecuta código de flujo de trabajo de la rama predeterminada de confianza y espera el resultado exacto de CI del head del PR antes de exponer credenciales.
El flujo de trabajo compartido gestiona los informes de despliegue de vista previa y producción, la resolución de URL y la limpieza de vistas previas. La limpieza usa secretos de Cloudflare explícitamente mapeados al ámbito del repositorio, verifica solo la rama predeterminada de confianza, destruye pr-<number> primero y elimina los registros de despliegue de GitHub solo después de un desmontaje exitoso; la limpieza fallida conserva esos registros y la ejecución de diagnóstico. El despliegue workflow_run verifica el SHA exacto que pasó CI.
La habilidad de agente incluida en skills/x-lookup/ envuelve esta API para uso CLI; anula su destino con X_API_BASE al probar otro despliegue.