X (Twitter)
Un servidor MCP para interactuar con la API de X (Twitter), que requiere credenciales de desarrollador.
Documentación
X (Twitter) MCP server
Un servidor de Model Context Protocol (MCP) para interactuar con Twitter (X) mediante herramientas de IA. Este servidor te permite obtener tweets, publicar tweets, buscar en Twitter, gestionar seguidores y más, todo a través de comandos en lenguaje natural en herramientas de IA.
Características
- Obtener perfiles de usuario, seguidores y listas de seguidos.
- Publicar, eliminar y marcar como favoritos tweets.
- Buscar en Twitter tweets y tendencias.
- Gestionar marcadores y cronologías.
- Manejo integrado de límites de tasa para la API de Twitter.
- Utiliza la API v2 de Twitter con autenticación adecuada (claves y tokens de API), evitando el hack de usuario/contraseña para minimizar el riesgo de suspensiones de cuenta.
- Proporciona una implementación completa de los endpoints de la API v2 de Twitter para gestión de usuarios, gestión de tweets, cronologías y funcionalidad de búsqueda.
Requisitos previos
- Python 3.10 o superior: Asegúrate de tener Python instalado en tu sistema.
- Cuenta de desarrollador de Twitter: Necesitas credenciales de API (API Key, API Secret, Access Token, Access Token Secret y Bearer Token) del Twitter Developer Portal.
- Opcional: Claude Desktop: Descarga e instala la aplicación Claude Desktop desde el sitio web de Anthropic.
- Opcional: Node.js (para integración MCP): Requerido para ejecutar servidores MCP en Claude Desktop.
- Un gestor de paquetes como
uvopippara dependencias de Python.
Instalación
Opción 1: Instalación mediante Smithery (Recomendado)
Para instalar el servidor X (Twitter) MCP para Claude Desktop automáticamente mediante Smithery:
npx -y @smithery/cli install @rafaljanicki/x-twitter-mcp-server --client claude
Opción 2: Instalar desde PyPI
La forma más fácil de instalar x-twitter-mcp es mediante PyPI:
pip install x-twitter-mcp
Opción 3: Instalar desde el código fuente
Si prefieres instalar desde el repositorio fuente:
-
Clonar el repositorio:
git clone https://github.com/rafaljanicki/x-twitter-mcp-server.git cd x-twitter-mcp-server -
Configurar un entorno virtual (opcional pero recomendado):
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate -
Instalar dependencias: Usando
uv(recomendado, ya que el proyecto usauv.lock):uv syncAlternativamente, usando
pip:pip install . -
Configurar variables de entorno:
- Crea un archivo
.enven la raíz del proyecto (puedes copiar.env.examplesi se proporciona). - Añade tus credenciales de la API de Twitter:
TWITTER_API_KEY=your_api_key TWITTER_API_SECRET=your_api_secret TWITTER_ACCESS_TOKEN=your_access_token TWITTER_ACCESS_TOKEN_SECRET=your_access_token_secret TWITTER_BEARER_TOKEN=your_bearer_token - Para usar herramientas de marcadores (
get_bookmarks,delete_all_bookmarks), añade también un token de acceso de usuario OAuth 2.0:
Consulta Obtención de un token de usuario OAuth 2.0 a continuación.TWITTER_OAUTH2_USER_ACCESS_TOKEN=your_oauth2_user_token
- Crea un archivo
Obtención de un token de usuario OAuth 2.0
Los endpoints de marcadores (GET /2/users/:id/bookmarks, DELETE /2/users/:id/bookmarks/:tweet_id) requieren Contexto de usuario OAuth 2.0 — rechazan tanto los tokens de portador solo de aplicación como OAuth 1.0a. Debes realizar el flujo de autorización PKCE una vez para obtener un token con ámbito de usuario.
Pasos
-
En el Twitter Developer Portal, abre tu aplicación → Configuración → Configuración de autenticación de usuario y habilita OAuth 2.0. Establece una URL de devolución de llamada (por ejemplo,
https://localhost/). -
Ejecuta el flujo PKCE usando Tweepy:
import tweepy
handler = tweepy.OAuth2UserHandler(
client_id="YOUR_CLIENT_ID", # OAuth 2.0 Client ID (from Developer Portal)
redirect_uri="https://localhost/",
scope=["bookmark.read", "bookmark.write", "users.read", "offline.access"],
client_secret="YOUR_CLIENT_SECRET", # Optional for public clients
)
print(handler.get_authorization_url())
# Open the URL, authorize, copy the redirected URL, then:
redirected_url = input("Paste redirected URL: ")
token = handler.fetch_token(redirected_url)
print(token["access_token"])
- Establece el token resultante como
TWITTER_OAUTH2_USER_ACCESS_TOKENen tu entorno o archivo.env.
Ejecutar el servidor
El transporte preferido es Streamable HTTP. Usa una de las siguientes opciones:
Recomendado: Streamable HTTP (Docker/Smithery)
Ejecuta el servidor como un servicio HTTP con endpoints Streamable HTTP y SSE.
-
Construye la imagen de Docker:
docker build -t x-twitter-mcp . -
Ejecuta el contenedor (Smithery usa PORT; el valor predeterminado aquí es 8081):
docker run -p 8081:8081 -e PORT=8081 x-twitter-mcp -
Endpoints:
- Streamable HTTP (JSON-RPC sobre HTTP):
POST http://localhost:8081/mcp - SSE (Server-Sent Events):
GET http://localhost:8081/sse
- Streamable HTTP (JSON-RPC sobre HTTP):
-
Pasa la configuración por solicitud (recomendado en Smithery) mediante el parámetro de consulta
configcodificado en base64. Ejemplo de configuración JSON:{"twitterApiKey":"...","twitterApiSecret":"...","twitterAccessToken":"...","twitterAccessTokenSecret":"...","twitterBearerToken":"..."}Codifica y llama a
initialize:CONFIG_B64=$(printf '%s' '{"twitterApiKey":"YOUR_KEY","twitterApiSecret":"YOUR_SECRET","twitterAccessToken":"YOUR_TOKEN","twitterAccessTokenSecret":"YOUR_TOKEN_SECRET","twitterBearerToken":"YOUR_BEARER"}' | base64) curl -sS -X POST "http://localhost:8081/mcp?config=${CONFIG_B64}" \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":"1","method":"initialize","params":{"capabilities":{}}}'
Notas:
- Un
POST /devolverá 404; usa/mcppara Streamable HTTP y/ssepara SSE. - Cuando se implementa mediante Smithery,
smithery.yamlestá configurado pararuntime: containerystartCommand.type: http.
Streamable HTTP (Local, sin Docker)
Ejecuta el servidor ASGI directamente.
Si se instala desde PyPI:
python -m x_twitter_mcp.http_server
Si se instala desde el código fuente con uv:
uv run python -m x_twitter_mcp.http_server
Los endpoints y el paso de configuración son los mismos que arriba.
STDIO heredado (script CLI)
El proyecto también expone un script CLI STDIO x-twitter-mcp-server para clientes de escritorio que esperan STDIO.
Si se instala desde PyPI:
x-twitter-mcp-server
Si se instala desde el código fuente con uv:
uv run x-twitter-mcp-server
Uso con Claude Desktop
Para usar este servidor MCP con Claude Desktop, debes configurar Claude para conectarse al servidor. Sigue estos pasos:
Paso 1: Instalar Node.js
Claude Desktop usa Node.js para ejecutar servidores MCP. Si no tienes Node.js instalado:
- Descarga e instala Node.js desde nodejs.org.
- Verifica la instalación:
node --version
Paso 2: Localizar la configuración de Claude Desktop
Claude Desktop usa un archivo claude_desktop_config.json para configurar servidores MCP.
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Si el archivo no existe, créalo.
Paso 3: Configurar el servidor MCP
Edita claude_desktop_config.json para incluir el servidor x-twitter-mcp. Reemplaza /path/to/x-twitter-mcp-server con la ruta real a tu directorio del proyecto (si se instaló desde el código fuente) o la ruta a tu ejecutable de Python (si se instaló desde PyPI).
Si se instala desde PyPI:
{
"mcpServers": {
"x-twitter-mcp": {
"command": "x-twitter-mcp-server",
"args": [],
"env": {
"PYTHONUNBUFFERED": "1",
"TWITTER_API_KEY": "your_api_key",
"TWITTER_API_SECRET": "your_api_secret",
"TWITTER_ACCESS_TOKEN": "your_access_token",
"TWITTER_ACCESS_TOKEN_SECRET": "your_access_token_secret",
"TWITTER_BEARER_TOKEN": "your_bearer_token",
"TWITTER_OAUTH2_USER_ACCESS_TOKEN": "your_oauth2_user_token"
}
}
}
}
Si se instala desde el código fuente con uv:
{
"mcpServers": {
"x-twitter-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/x-twitter-mcp-server",
"run",
"x-twitter-mcp-server"
],
"env": {
"PYTHONUNBUFFERED": "1"
}
}
}
}
"command": "x-twitter-mcp-server": Usa el script CLI directamente si se instala desde PyPI."env": Si se instala desde PyPI, es posible que debas proporcionar variables de entorno directamente en la configuración (ya que no hay archivo.env). Si se instala desde el código fuente, se usará el archivo.env."env": {"PYTHONUNBUFFERED": "1"}: Asegura que la salida no esté almacenada en búfer para un mejor registro en Claude.
Paso 4: Reiniciar Claude Desktop
- Cierra Claude Desktop por completo.
- Vuelve a abrir Claude Desktop para cargar la nueva configuración.
Paso 5: Verificar la conexión
- Abre Claude Desktop.
- Busca un icono de martillo o conector en el área de entrada (esquina inferior derecha). Esto indica que las herramientas MCP están disponibles.
- Haz clic en el icono para ver las herramientas disponibles de
x-twitter-mcp, comopost_tweet,search_twitter,get_user_profile, etc.
Paso 6: Probar con Claude
Ahora puedes interactuar con Twitter usando lenguaje natural en Claude Desktop. Aquí tienes algunos ejemplos de indicaciones:
-
Obtener un perfil de usuario:
Get the Twitter profile for user ID 123456.Claude llamará a la herramienta
get_user_profiley devolverá los detalles del usuario. -
Publicar un tweet:
Post a tweet saying "Hello from Claude Desktop! #MCP"Claude usará la herramienta
post_tweetpara publicar el tweet y confirmar la acción. -
Buscar en Twitter:
Search Twitter for recent tweets about AI.Claude invocará la herramienta
search_twittery devolverá los tweets relevantes. -
Obtener tendencias:
What are the current trending topics on Twitter?Claude usará la herramienta
get_trendspara obtener los temas de tendencia.
Cuando se te solicite, concede a Claude permiso para usar las herramientas MCP para la sesión de chat.
Flujo de trabajo complementario de OpenClaw
Este servidor MCP es mejor cuando un cliente MCP debe llamar directamente a las herramientas de la API v2 de Twitter. Si el flujo de trabajo se ejecuta en OpenClaw y necesita metadatos de instalación de plugins, descubrimiento de endpoints, alertas de monitoreo, webhooks, sorteos, flujos de trabajo de carga o descarga de medios, mensajes directos, exportación de seguidores o acciones de publicación y respuesta con aprobación, usa TweetClaw como un plugin separado de OpenClaw y pasa los IDs o URLs de tweets revisados entre las herramientas.
Consulta Flujo de trabajo complementario de OpenClaw para un flujo de comandos que mantiene las credenciales separadas y evita acciones de escritura duplicadas.
Herramientas disponibles
A continuación se muestra una lista de todas las herramientas proporcionadas por el servidor x-twitter-mcp, junto con ejemplos de ejecución en Claude Desktop usando indicaciones en lenguaje natural.
Herramientas de gestión de usuarios
get_user_profile
- Descripción: Obtén información detallada del perfil de un usuario.
- Ejemplo en Claude Desktop:
Claude devolverá los detalles del perfil del usuario, incluidos ID, nombre, nombre de usuario, URL de la imagen de perfil y descripción.Get the Twitter profile for user ID 123456789.
get_user_by_screen_name
- Descripción: Obtiene un usuario por nombre de pantalla.
- Ejemplo en Claude Desktop:
Claude devolverá los detalles del perfil del usuario.Get the Twitter user with screen name "example_user".
get_user_by_id
- Descripción: Obtiene un usuario por ID.
- Ejemplo en Claude Desktop:
Claude devolverá los detalles del perfil del usuario.Fetch the Twitter user with ID 987654321.
get_user_followers
- Descripción: Recupera una lista de seguidores de un usuario determinado.
- Ejemplo en Claude Desktop:
Claude devolverá una lista de hasta 50 seguidores.Get the followers of user ID 123456789, limit to 50.
get_user_following
- Descripción: Recupera los usuarios que el usuario determinado sigue.
- Ejemplo en Claude Desktop:
Claude devolverá una lista de hasta 50 usuarios.Who is user ID 123456789 following? Limit to 50 users.
get_user_followers_you_know
- Descripción: Recupera una lista de seguidores comunes.
- Ejemplo en Claude Desktop:
Claude devolverá una lista de hasta 50 seguidores comunes (simulados filtrando seguidores).Get common followers for user ID 123456789, limit to 50.
get_user_subscriptions
- Descripción: Recupera una lista de usuarios a los que el usuario especificado está suscrito.
- Ejemplo en Claude Desktop:
Claude devolverá una lista de hasta 50 usuarios (usando seguidos como proxy para suscripciones).Get the subscriptions for user ID 123456789, limit to 50.
Herramientas de gestión de tweets
post_tweet
- Descripción: Publica un tweet con medios, respuesta y etiquetas opcionales.
- Ejemplo en Claude Desktop:
Claude publicará el tweet y devolverá los detalles del tweet.Post a tweet saying "Hello from Claude Desktop! #MCP"
delete_tweet
- Descripción: Elimina un tweet por su ID.
- Ejemplo en Claude Desktop:
Claude eliminará el tweet y confirmará la acción.Delete the tweet with ID 123456789012345678.
get_tweet_details
- Descripción: Obtén información detallada sobre un tweet específico.
- Ejemplo en Claude Desktop:
Claude devolverá los detalles del tweet, incluidos ID, texto, fecha de creación e ID del autor.Get details for tweet ID 123456789012345678.
create_poll_tweet
- Descripción: Crea un tweet con una encuesta.
- Ejemplo en Claude Desktop:
Claude creará el tweet de encuesta y devolverá los detalles del tweet.Create a poll tweet with the question "What's your favorite color?" and options "Red", "Blue", "Green" for 60 minutes.
vote_on_poll
- Descripción: Vota en una encuesta.
- Ejemplo en Claude Desktop:
Claude devolverá una respuesta simulada (ya que la API v2 de Twitter no admite votación en encuestas).Vote "Blue" on the poll in tweet ID 123456789012345678.
favorite_tweet
- Descripción: Marca un tweet como favorito.
- Ejemplo en Claude Desktop:
Claude marcará el tweet como favorito y confirmará la acción.Like the tweet with ID 123456789012345678.
unfavorite_tweet
- Descripción: Quita el favorito de un tweet.
- Ejemplo en Claude Desktop:
Claude quitará el favorito del tweet y confirmará la acción.Unlike the tweet with ID 123456789012345678.
bookmark_tweet
- Descripción: Añade el tweet a los marcadores.
- Ejemplo en Claude Desktop:
Claude añadirá el tweet a los marcadores y confirmará la acción.Bookmark the tweet with ID 123456789012345678.
delete_bookmark
- Descripción: Elimina el tweet de los marcadores.
- Ejemplo en Claude Desktop:
Claude eliminará el marcador y confirmará la acción.Remove the bookmark for tweet ID 123456789012345678.
delete_all_bookmarks
- Descripción: DESTRUCTIVO E IRREVERSIBLE. Elimina permanentemente TODOS los marcadores obteniendo cada página y eliminándolos uno por uno. Requiere
TWITTER_OAUTH2_USER_ACCESS_TOKEN. - Ejemplo en Claude Desktop:
Claude confirmará primero con el usuario, luego eliminará todos los marcadores e informará el recuento.Delete all my Twitter bookmarks.
get_bookmarks
- Descripción: Recupera los tweets marcados del usuario autenticado. Devuelve hasta 100 tweets por llamada; usa el parámetro
cursorpara la paginación. RequiereTWITTER_OAUTH2_USER_ACCESS_TOKEN. - Ejemplo en Claude Desktop:
Claude devolverá hasta 25 tweets marcados, incluidos ID, texto, fecha de creación e ID del autor.Show my Twitter bookmarks, limit to 25.
Herramientas de cronología y búsqueda
get_timeline
- Descripción: Obtén tweets de tu cronología de inicio (Para ti).
- Ejemplo en Claude Desktop:
Claude devolverá hasta 20 tweets de tu cronología Para ti.Show my Twitter For You timeline, limit to 20 tweets.
get_latest_timeline
- Descripción: Obtén tweets de tu línea de tiempo de inicio (Siguiendo).
- Ejemplo de Claude Desktop:
Claude devolverá hasta 20 tweets de tu línea de tiempo de Siguiendo.Show my Twitter Following timeline, limit to 20 tweets.
search_twitter
- Descripción: Busca en Twitter con una consulta.
- Ejemplo de Claude Desktop:
Claude devolverá hasta 10 tweets recientes sobre IA.Search Twitter for recent tweets about AI, limit to 10.
get_trends
- Descripción: Recupera los temas de tendencia en Twitter.
- Ejemplo de Claude Desktop:
Claude devolverá hasta 10 temas de tendencia.What are the current trending topics on Twitter? Limit to 10.
get_highlights_tweets
- Descripción: Recupera tweets destacados de la línea de tiempo de un usuario.
- Ejemplo de Claude Desktop:
Claude devolverá hasta 20 tweets de la línea de tiempo del usuario (simulados como destacados).Get highlighted tweets from user ID 123456789, limit to 20.
get_user_mentions
- Descripción: Obtén tweets que mencionan a un usuario específico.
- Ejemplo de Claude Desktop:
Claude devolverá hasta 20 tweets que mencionan al usuario.Get tweets mentioning user ID 123456789, limit to 20.
Solución de problemas
-
El servidor no se inicia:
- Asegúrate de que tu archivo
.envtenga todas las credenciales necesarias de la API de Twitter (si está instalado desde el código fuente). - Si está instalado desde PyPI, asegúrate de que las variables de entorno estén configuradas en
claude_desktop_config.jsono en tu shell. - Revisa la salida del terminal en busca de errores al ejecutar
x-twitter-mcp-server. - Verifica que
uvo tu ejecutable de Python esté correctamente instalado y sea accesible.
- Asegúrate de que tu archivo
-
Claude no detecta el servidor:
- Confirma que la ruta en
claude_desktop_config.jsonsea correcta. - Asegúrate de que
commandyargsapunten al ejecutable y al script correctos. - Reinicia Claude Desktop después de actualizar el archivo de configuración.
- Revisa los registros del Modo Desarrollador de Claude (Ayuda → Habilitar Modo Desarrollador → Abrir Archivo de Registro de MCP) para ver errores.
- Confirma que la ruta en
-
Errores de límite de tasa:
- El servidor incluye manejo de límite de tasa, pero si alcanzas los límites de la API de Twitter, es posible que debas esperar a que se reinicie la ventana (por ejemplo, 15 minutos para acciones de tweets).
-
Las herramientas de marcadores devuelven 403:
get_bookmarksydelete_all_bookmarksrequierenTWITTER_OAUTH2_USER_ACCESS_TOKEN. Los tokens de portador solo de aplicación y OAuth 1.0a son rechazados por el endpoint de marcadores.- Consulta Obtención de un Token de Usuario OAuth 2.0 para instrucciones de configuración.
-
Advertencias de sintaxis:
- Si ves mensajes de
SyntaxWarningde Tweepy, se deben a problemas de docstrings en Tweepy con Python 3.13. El servidor incluye una supresión de advertencias para manejar esto.
- Si ves mensajes de
Contribuciones
¡Las contribuciones son bienvenidas! Por favor, abre un issue o envía una solicitud de pull en el repositorio de GitHub.
Licencia
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.
Autor
- Rafal Janicki - rafal@kult.io