Mastra
Crea agentes Mastra en TypeScript para búsqueda de tweets, perfiles, tendencias y escrituras en X revisadas a través de TwexAPI MCP.
Crea un agente de Twitter API con Mastra a través del servidor MCP de TwexAPI. Busca tweets, inspecciona perfiles, lee tendencias y revisa acciones de escritura. Conserva IDs de tweet, cursores y nombres de ruta como JSON tipado en lugar de resúmenes solo de chat.
¿Por qué usar Mastra con TwexAPI?
Mastra es un framework de agentes en TypeScript. TwexAPI proporciona descubrimiento de endpoints y llamadas autenticadas a través de explore y twexapi_request.
| Tarea del agente | Ruta de TwexAPI | Conservar para el siguiente paso |
|---|---|---|
| Buscar tweets | POST /twitter/advanced_search/page |
Consulta, IDs de tweet, autores, created_at, cursor |
| Inspeccionar un perfil | GET /twitter/{screen_name}/about |
ID de usuario, nombre de usuario, biografía, cantidad de seguidores |
| Leer tendencias | GET /twitter/global-trending/tweets |
País, tema, filas de tweets |
| Publicar o responder | POST /twitter/tweets/create |
ID de tweet, ruta, aprobación humana, confirmación de cookie |
Usa Mastra para apps TypeScript que ya usan modelos de Vercel AI SDK. Usa el TypeScript SDK o el CLI para trabajos programados que no requieren modelo.
Requisitos previos
- Node.js 20 o posterior
- Una API key de TwexAPI
- Una API key de proveedor de modelo compatible con Mastra
- Una cookie de Twitter o
auth_tokenpara acciones de escritura — consulta
Las lecturas públicas de X no requieren credenciales de X Developer. Autentícate con TwexAPI.
Instalación
npm install @mastra/core @mastra/mcp @ai-sdk/openai dotenv
TWEXAPI_API_KEY=YOUR_API_KEY
OPENAI_API_KEY=sk-...
Conectar TwexAPI MCP
import "dotenv/config";
import { MCPClient } from "@mastra/mcp";
export const twexapiMcp = new MCPClient({
servers: {
twexapi: {
url: new URL("https://api.twexapi.io/mcp"),
requestInit: {
headers: {
"x-api-key": process.env.TWEXAPI_API_KEY!,
},
},
},
},
});
El servidor expone explore para descubrimiento y twexapi_request para llamadas autenticadas. Las solicitudes MCP no autenticadas devuelven 401.
Ejemplo completo
import { openai } from "@ai-sdk/openai";
import { Agent } from "@mastra/core/agent";
import { writeFile } from "node:fs/promises";
import { twexapiMcp } from "./mcp";
type TweetRow = {
tweet_id: string;
text: string;
author_username?: string;
created_at?: string;
};
type TweetSearchHandoff = {
query: string;
route_used: string;
tweets: TweetRow[];
has_more: boolean;
next_cursor: string | null;
stop_reason: "complete" | "requested_limit" | "cursor_stalled" | "page_cap";
};
const tools = await twexapiMcp.listTools();
export const twexapiAgent = new Agent({
name: "twexapi-agent",
instructions: `
Use TwexAPI MCP for Twitter API requests.
Call explore before twexapi_request.
Preserve exact IDs and cursors. Never invent missing tweet fields.
Ask for confirmation before read_only: false actions.
Return only valid JSON matching the handoff contract.
`,
model: openai("gpt-4o-mini"),
tools,
});
const result = await twexapiAgent.generate(
`Search 25 recent tweets about Mastra MCP.
Return JSON with query, route_used, tweets[{tweet_id,text,author_username,created_at}],
has_more, next_cursor, and stop_reason.`
);
const handoff = JSON.parse(result.text) as TweetSearchHandoff;
await writeFile(
"twexapi-mastra-handoff.json",
JSON.stringify(handoff, null, 2),
"utf8"
);
Valida el JSON antes de que otro flujo de trabajo lo consuma. El historial de conversación no es una base de datos de trabajos.
Conservar el contrato de respuesta MCP
Pasa solo los campos documentados de query y body de explore a twexapi_request.
Detén la paginación cuando se cumpla una de estas condiciones:
- El agente recopila el total solicitado.
has_moreohas_next_pagepasa a ser false.next_cursorfalta o se repite.- Se alcanza el límite de páginas configurado.
Elimina duplicados de tweets y usuarios por tweet_id o user_id.
Mantener una entrega de agente reanudable
Páginas de tweets
Almacena tweet_id, text, author_username, created_at, has_more, next_cursor y la consulta original.
Filas de perfil
Almacena user_id, username, name, description, cantidades de seguidores y la entrada de búsqueda.
Filas de tendencias
Almacena país, tema, IDs de tweet y métricas de engagement.
Acciones de escritura
Almacena ruta, texto de vista previa y aprobación humana. Mantén las cookies fuera del archivo de entrega. Consulta.
Consulta Agent MCP Handoff para la lista de verificación completa.
Construir manejo de errores
| Estado | Significado | Decisión del agente |
|---|---|---|
400 |
Ruta o parámetros inválidos | Corrige la solicitud antes de reintentar |
401 |
API key faltante o inválida | Detente y reemplaza la credencial |
403 |
Acceso denegado o créditos | Pausa escrituras; verifica Get Balance |
429 |
Límite de tasa alcanzado | Espera y luego reanuda el mismo cursor |
5xx |
Fallo temporal del servidor | Aplica backoff acotado a lecturas seguras |
Nunca reintentes una escritura después de un timeout sin una verificación de lectura. Consulta Error Handling y Rate Limits.
Requerir aprobación antes de acciones en X
Call explore with include_writes true only when the user asked to post, like, follow, or DM.
Stop before any read_only: false call.
Show method, path, tweet text or target username, and media URLs.
Do not send cookie values in the model output.
Previsualiza con el CLI --dry-run, luego ejecuta a través de REST o el TypeScript SDK después de la aprobación.
Conectar múltiples servidores MCP
export const mcp = new MCPClient({
servers: {
twexapi: {
url: new URL("https://api.twexapi.io/mcp"),
requestInit: {
headers: { "x-api-key": process.env.TWEXAPI_API_KEY! },
},
},
twexapiDocs: {
url: new URL("https://docs.twexapi.io/mcp"),
},
},
});
Mantén estable el nombre del servidor TwexAPI. Dale al agente solo las herramientas necesarias para el trabajo actual.
Versiones de paquetes
| Paquete | Rango compatible |
|---|---|
| Node.js | >=20 |
@mastra/core |
>=0.10 |
@mastra/mcp |
>=0.10 |