Límite de Solicitudes
El servidor MCP gasta los mismos límites que la API REST, contados por persona en la organización — no por token —, más un límite propio para el protocolo. Generar un token nuevo, o reautorizar el cliente, no reinicia el presupuesto.
| Presupuesto | Qué cuenta | Límite (producción) |
|---|---|---|
| Protocolo MCP | toda solicitud a / (initialize, tools/list, ping, tools/call) | 1000/hora por persona en la organización |
| Lecturas de la API | cada tools/call de una tool read | el mismo de la API |
| Escrituras de la API | cada tools/call de una tool write o destructive | el mismo de la API |
| Acciones que mueven dinero | send_to_bank, cancel_dispatch, charge, charge_cancel | el mismo de la API |
Una llamada de tool nunca es más barata que el endpoint que refleja: se cuenta en el presupuesto del protocolo y, de nuevo, en el presupuesto de la API que gastaría la misma llamada REST — con el mismo tamaño de presupuesto de la API, por persona. Un agente que recorre listados en bucle no esquiva el límite que el mismo recorrido pagaría por REST. Hay también un techo por IP, muy por encima de cualquier uso legítimo.
Cuando se alcanza el límite
En el protocolo, el servidor responde 429 y el mensaje JSON-RPC no llega a procesarse:
HTTP/1.1 429 Too Many Requests
Retry-After: 37
Content-Type: application/json
{ "error": { "code": "RATE_LIMITED", "message": "MCP request rate limit exceeded for this person in this organization." } }
En el presupuesto de la API, la tool devuelve un resultado con error, para que el modelo lo lea y espere:
{ "isError": true, "content": [{ "type": "text",
"text": "{ \"error\": { \"code\": \"RATE_LIMITED\", \"details\": { \"retry_after_seconds\": 37 } } }" }] }
En ambos casos, espera los segundos indicados antes de intentarlo de nuevo.
Gastando menos
Un agente consume el mismo presupuesto que tu backend — y, en las lecturas, ese presupuesto es pequeño. Tres hábitos resuelven casi todo:
- Filtra antes de paginar.
finance_payables_list { filters: { status: "pending", due_date: { lte: "2026-11-30" } } }cuesta una llamada; traer todo para filtrar en el modelo cuesta decenas. - Usa los totales listos. "Cuánto vence este mes" es una llamada a
finance_payables_aggregates, no un recorrido definance_payables_list. - Pide solo las columnas que interesan.
fieldsno reduce el número de llamadas, pero reduce mucho el contexto gastado — ver Listado, filtros y campos.