xdataapi

Datos públicos de solo lectura de X (Twitter): perfiles, publicaciones, hilos, respuestas, seguidores y búsqueda con los operadores de x.com. Pago por resultado; los resultados vacíos y los errores son gratuitos.

Servidor MCP alojado

npx add-mcp 'https://api.xdataapi.io/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Servidor MCP

Dale a un agente toda la API en una sola línea.

xdataapi.io sirve un MCP alojado en https://api.xdataapi.io/mcp. El transporte es HTTP Streamable. Nada que instalar, nada que ejecutar y, en la mayoría de los clientes, nada que pegar: el servidor implementa el flujo de autorización de MCP, por lo que un cliente te autentica a través de un navegador y obtiene su propia credencial. Una clave en el encabezado también funciona, y es lo que necesita un cliente sin navegador.

Cada llamada a una herramienta es una solicitud REST internamente, al mismo precio, a través de la misma caché y límite de velocidad. El agente ve credits_charged y balance_remaining en cada resultado.

Conectar [#connect]

Claude Code

claude mcp add --transport http xdataapi https://api.xdataapi.io/mcp

Claude.ai y Claude Desktop

Agrega https://api.xdataapi.io/mcp como conector personalizado en Configuración. Estos clientes no tienen un campo para un encabezado de solicitud, por lo que esta es la única ruta que llega a ellos.

Cursor, Windsurf y otros clientes con un archivo de configuración MCP

{
  "mcpServers": {
    "xdataapi": {
      "url": "https://api.xdataapi.io/mcp"
    }
  }
}

Clientes que solo hablan stdio

El puente mcp-remote habla stdio con el cliente y HTTP Streamable con nosotros, y se autentica en nombre del cliente.

{
  "mcpServers": {
    "xdataapi": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.xdataapi.io/mcp"]
    }
  }
}

Conectar con una clave en su lugar [#connect-with-a-key-instead]

Un cliente que no puede abrir un navegador (un servidor, un contenedor, un trabajo de CI) envía la clave en el mismo encabezado que acepta la API REST, o como Authorization: Bearer xd_live_....

claude mcp add --transport http xdataapi https://api.xdataapi.io/mcp --header "x-api-key: xd_live_..."
{
  "mcpServers": {
    "xdataapi": {
      "url": "https://api.xdataapi.io/mcp",
      "headers": { "x-api-key": "xd_live_..." }
    }
  }
}

Para mcp-remote, pasa la clave a través del entorno. El encabezado se escribe sin espacio después de los dos puntos: mcp-remote divide el argumento en los dos primeros puntos, y un espacio allí llega como parte de la clave.

{
  "mcpServers": {
    "xdataapi": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.xdataapi.io/mcp", "--header", "x-api-key:${XDATAAPI_KEY}"],
      "env": { "XDATAAPI_KEY": "xd_live_..." }
    }
  }
}

Iniciar sesión, para personas que escriben clientes [#signing-in-for-people-writing-clients]

Una llamada no autenticada a /mcp responde 401 con un puntero a la cadena de descubrimiento, que es todo lo que un cliente necesita para obtener su propia credencial:

PasoDónde
El desafíoWWW-Authenticate: Bearer resource_metadata="..." en el 401
Recurso protegido (RFC 9728)https://api.xdataapi.io/.well-known/oauth-protected-resource
Servidor de autorización (RFC 8414)https://xdataapi.io/.well-known/oauth-authorization-server
Registrar un cliente (RFC 7591)https://xdataapi.io/api/oauth/register
Aprobarhttps://xdataapi.io/oauth/authorize
Intercambiar el códigohttps://xdataapi.io/api/oauth/token
Desconectar (RFC 7009)https://xdataapi.io/api/oauth/revoke

Los clientes son públicos y PKCE es obligatorio, con S256 únicamente. No hay ámbitos: cada herramienta es de solo lectura y hay un solo nivel de acceso, por lo que una lista de ámbitos serían varias palabras que significan lo mismo.

Lo que devuelve el intercambio es una clave de API ordinaria con el nombre de la aplicación. Aparece en el panel junto a las claves que creaste manualmente, gasta el mismo saldo a los mismos precios y se detiene en el momento en que la revocas. No caduca y no hay token de actualización: es la misma clase de credencial que tú mismo creas, con la misma historia de revocación.

Herramientas [#tools]

HerramientaArgumentosCréditos
get_userhandle1
get_usershandles[], hasta 1001 por perfil encontrado
get_user_tweetsuser, count, cursor1 por tweet
get_followersuser, count, cursor0.1 por perfil
get_follower_idsuser, count, cursor0.02 por id
get_followinguser, count, cursor0.1 por perfil
search_tweetsq, product, count, cursor1 por tweet o perfil
get_tweetid1
get_tweetsids[], hasta 1001 por tweet encontrado
get_threadid, cursor1 por tweet
get_repliesid, cursor1 por respuesta
get_quotesid, count, cursor1 por tweet
get_retweetersid, count, cursor0.5 por perfil
get_balancegratis

Cada herramienta acepta fresh: true para omitir la caché a 2x. Todas las herramientas son de solo lectura e idempotentes, y están anotadas como tales, por lo que los clientes que autoaprueban herramientas de solo lectura no preguntan en cada llamada.

Notas [#notes]

  • El servidor no tiene estado. Cada solicitud lleva la clave; no hay sesión que caduque.
  • Un error REST (not_found, no_credits, rate_limited) regresa como un error de herramienta con el mismo cuerpo JSON, para que el agente pueda leer el code y actuar en consecuencia.
  • Los resultados son los mismos objetos planos Tweet y User que la API REST, como texto JSON.
  • Las claves son por cuenta. Crea una clave por agente en el panel para que puedas revocarla individualmente.