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

RutaPropósitoParámetros de consulta
GET /api/convert?url=<x-status-url> (o handle= + id=)Convertir un estado/hilover Parámetros de conversión de publicaciones
GET /:handle/status/:idIgual, mediante reescritura de URLigual que /api/convert
GET /api/browse?resource=profile|search|followers|following&…Endpoint de exploraciónver Parámetros de exploración
GET /search?q=…Buscar publicacionesq (obligatorio), feed, cursor, page, limit, full, format, nocache
GET /:handlePerfil + últimas publicaciones originalescursor, page, limit, full, format, nocache
GET /:handle/followersUsuarios seguidorescursor, page, limit, full, format, nocache
GET /:handle/followingUsuarios seguidoscursor, page, limit, full, format, nocache
GET /oembed?url=…JSON oEmbedurl; anulaciones opcionales text, author, status, provider
GET /og.pngImagen 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:

HerramientaEntrada obligatoriaEntrada opcional
browse_xresourcehandle, q, feed, cursor, page, limit, full, format, nocache
convert_statusurl, o 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

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ámetroPredeterminadoValores admitidos
formatmarkdownmarkdown, obsidian, json
fullfalsetrue, 1, o yes habilita Markdown expandido; Obsidian siempre está expandido
threadfulloff, full, conversation, o un límite de 2 a 100
contextfullfull incluye padres, hilo del autor y respuestas seleccionadas; thread excluye respuestas no relacionadas
repliestoptop, recent, off
userinfooffoff, author, all
nocachefalsetrue, 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ámetroPredeterminadoValores admitidos
qConsulta de búsqueda; obligatoria en /search y resource=search. Admite operadores de X como from:, since:
feedlatestlatest, top, media — solo búsqueda
cursorToken de continuación opaco de Continue → / nextCursor
page1110; recorre páginas cuando no se proporciona cursor
limit20150 resultados por respuesta
fullfalsetrue, 1, o yes añade fechas/métricas a las publicaciones y recuentos de seguidores/bios a los usuarios
formatmarkdownmarkdown, json
nocachefalsetrue, 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.