Stripe MCP Server
Enables Claude to query Stripe data—customers, charges, subscriptions, invoices, balance, events, and more—through 17 read-oriented tools, with optional write protections and a read-only default for remote deployments.
README
Stripe MCP Server
Servidor MCP (Model Context Protocol) que expone la API de Stripe a Claude. Pensado para desplegarse en Railway en modo solo lectura.
👉 Los pasos de despliegue están en DEPLOY-RAILWAY.md.
Qué hace
Da a Claude 17 herramientas para consultar Stripe: clientes, cobros, pagos, suscripciones, facturas, catálogo, saldo, transacciones, payouts, eventos y disputas — más una herramienta genérica que alcanza cualquier endpoint, otra que resuelve cualquier objeto por su id, y un reporte agregado de ingresos.
| Herramienta | Endpoint |
|---|---|
stripe_whoami |
verifica la key, el modo y los permisos |
stripe_request |
cualquier endpoint, cualquier método |
stripe_get_object |
resuelve cualquier id (cus_, ch_, sub_...) |
stripe_search |
GET /v1/{recurso}/search |
stripe_list_customers |
GET /v1/customers |
stripe_list_charges |
GET /v1/charges |
stripe_list_payment_intents |
GET /v1/payment_intents |
stripe_list_subscriptions |
GET /v1/subscriptions |
stripe_list_invoices |
GET /v1/invoices |
stripe_list_products |
GET /v1/products |
stripe_list_prices |
GET /v1/prices |
stripe_get_balance |
GET /v1/balance |
stripe_list_balance_transactions |
GET /v1/balance_transactions |
stripe_list_payouts |
GET /v1/payouts |
stripe_list_events |
GET /v1/events |
stripe_list_disputes |
GET /v1/disputes |
stripe_revenue_summary |
pagina y suma bruto/comisiones/neto |
Variables de entorno
| Variable | Requerida | Default | Descripción |
|---|---|---|---|
STRIPE_API_KEY |
sí | — | Restricted key (rk_...) o secret key (sk_...) |
STRIPE_MCP_TRANSPORT |
en Railway | stdio |
http para servidor remoto |
MCP_AUTH_TOKEN |
si http |
— | Secreto que protege el endpoint. Mínimo 32 caracteres |
STRIPE_READ_ONLY |
no | ver abajo | 1 bloquea toda escritura |
STRIPE_ALLOW_LIVE_WRITES |
no | 0 |
Segunda reja: escrituras con key live |
STRIPE_API_BASE |
no | https://api.stripe.com |
Para apuntar a un mock |
STRIPE_API_VERSION |
no | — | Fija el header Stripe-Version |
STRIPE_ACCOUNT |
no | — | Cuenta de Connect (acct_...) para todas las llamadas |
STRIPE_MAX_CHARS |
no | 20000 |
Truncado de respuestas |
STRIPE_TIMEOUT |
no | 45 |
Timeout en segundos |
PORT |
no | 8000 |
Railway lo inyecta solo |
Las tres rejas de escritura
Stripe mueve dinero real: un POST equivocado reembolsa a un cliente, cancela
una suscripción o borra un registro para siempre. Por eso hay tres candados
independientes, y una escritura tiene que pasar por los tres.
1. STRIPE_READ_ONLY — el default depende del transporte
stdio(local): escrituras permitidas por default. Un solo usuario de confianza en su propia máquina.http(remoto): escrituras bloqueadas por default. Hay que ponerSTRIPE_READ_ONLY=0a propósito para habilitarlas.
Olvidar la variable en un despliegue público lo deja en solo lectura, no abierto.
2. STRIPE_ALLOW_LIVE_WRITES — la reja de modo live
Aunque apagues el read-only, una key live sigue rechazando escrituras hasta
que pongas STRIPE_ALLOW_LIVE_WRITES=1. Las keys de test (sk_test_, rk_test_)
no pasan por esta reja: experimentar contra datos de prueba no debe requerir
ceremonia.
3. confirm=true — la reja por endpoint
Los endpoints destructivos (/v1/refunds, /v1/payouts, /v1/transfers,
cancelaciones de suscripción, borrado de clientes, cierre de disputas) exigen
confirm=true en la llamada, además de todo lo anterior. Una herramienta
disparada por error no llega ahí sola.
Cada rechazo dice cuál de las tres rejas lo detuvo.
Autenticación del endpoint
El protocolo MCP no trae autenticación propia. En modo http, este servidor
exige Authorization: Bearer <MCP_AUTH_TOKEN> en cada request, o el secreto
embebido en la ruta (/s/<secreto>/mcp) para los connectors de Claude.
/healthz es la única ruta pública.
El servidor se niega a arrancar si MCP_AUTH_TOKEN falta o tiene menos de
32 caracteres. Es a propósito: evita publicar un gateway abierto a tu cuenta de
Stripe por descuido.
Correr en local
pip install -r requirements.txt
# stdio (para Claude Desktop)
STRIPE_API_KEY=rk_test_xxx python stripe_mcp.py
# http (como en Railway)
STRIPE_MCP_TRANSPORT=http \
STRIPE_API_KEY=rk_test_xxx \
MCP_AUTH_TOKEN=$(python3 -c "import secrets;print(secrets.token_urlsafe(48))") \
PORT=8000 python stripe_mcp.py
Al arrancar imprime en qué modo quedó:
[stripe-mcp] streamable-http on 0.0.0.0:8000 mode=test read_only=True allow_live_writes=False writes_enabled=False
Notas sobre la API de Stripe
Cosas que el servidor ya resuelve por ti, y que conviene saber al leer las respuestas:
- Stripe no acepta JSON en el body. Todo va
application/x-www-form-urlencodedcon notación de corchetes:metadata[order]=6735,expand[]=customer,items[0][price]=price_1. El servidor traduce dicts y listas anidadas solo. - El dinero es un entero en la unidad mínima.
2500conusdes $25.00. Y hay monedas de cero decimales (JPY, KRW, CLP…) donde el entero es el monto — dividir entre 100 ahí sería un error. Las salidas formateadas lo respetan. - Test y live son universos separados. Un id creado en test devuelve 404 con una key live y viceversa. Es la causa más común de un 404 con un id correcto.
- La paginación es por cursor, no por página. Se toma el último id y se pasa
como
starting_after. Cuando hay más, la respuesta incluyenext_page_hintcon el valor exacto. - No hay
PATCHniPUT. Stripe usaPOSTtanto para crear como para actualizar. SoloGET,POSTyDELETE. - Las listas no filtran por
statusen charges ni payment_intents. Hay que filtrar sobre los registros devueltos o usarstripe_search. stripe_list_subscriptionsomite las canceladas por default. Para preguntas de churn hay que pasarstatus='all'o la respuesta sale mal en silencio.- El índice de búsqueda tarda hasta un minuto en ver un objeto recién creado. Para objetos nuevos, buscarlos por id.
- Los eventos se guardan solo 30 días. Más atrás hay que ir a los objetos.
- No hay endpoint de agregación. Por eso
stripe_revenue_summarypagina y suma del lado del servidor MCP, y avisa concomplete=falsecuando el tope de páginas cortó el conteo — esos totales son parciales y no deben reportarse como finales. - Cada
POSTsale con unIdempotency-Key, así que un reintento no cobra dos veces. Stripe los recuerda 24 horas.
Seguridad
- Los secretos van en variables de entorno, nunca en el código. El
.gitignorebloquea archivos.env. - Usa una restricted key (
rk_...), no la secret key. Se crean en el dashboard cuantas veces quieras y se les dan permisos por recurso. Para este despliegue: todo en Read, nada en Write. Unask_live_da acceso total a la cuenta, incluido mover dinero. - Un solo token compartido significa cero trazabilidad por persona. Todo lo que haga cualquiera queda registrado como la misma key.
- No hay rate limiting propio. Quien tenga el
MCP_AUTH_TOKENpuede pegarle a Stripe hasta toparse con el límite de Stripe (~100 req/s de lectura en live). - Para cortar el acceso de golpe: borra la restricted key en https://dashboard.stripe.com/apikeys — el servidor queda inútil al instante.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。