TuringCorp Decider

Un modelo de decisión para las llamadas que no tienen una respuesta correcta. La mejor opción, con una razón.

Servidor MCP alojado

npx add-mcp 'https://mcp.turingcorp.net/mcp'

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

Documentación

TuringCorp — Servidor MCP

Un modelo de decisión para las llamadas que no tienen una respuesta correcta. Tu agente tiene dos opciones defendibles y debe elegir una. Envía ambas: un panel de modelos las juzga juntas y devuelve la mejor, qué tan separadas las juzgó (una confianza calibrada) y por qué.

  • Endpoint (canónico): https://mcp.turingcorp.net/mcp
  • Alias: https://mcp.turingcorp.net/ y https://mcp.turingcorp.net/mcp/
  • Salud: https://mcp.turingcorp.net/healthz
  • Transporte: HTTP Streamable, sin estado (sin sesión, sin Durable Object). GET /mcp → 405 es normal.
  • Protocolo: MCP 2026-07-28 (moderno) y 2025-06-18 (legado) — una sola ruta sirve a ambos.
  • Métodos de descubrimiento (server/discover, tools/list) no requieren credenciales — los escáneres de directorios pueden leer la lista completa de herramientas sin autenticación, por diseño.

Tomar una decisión: decide

Entradatask (cadena), optionA (cadena), optionB (cadena) — todas obligatorias
Salidajob_id (cadena), betterOption ("option_A" | "option_B"), confidence (cadena de porcentaje, p. ej. "76.7%"), reason (cadena)
AnotacionesreadOnlyHint: true · openWorldHint: false · idempotentHint: false
Tiempo de esperaReserva 180–300 segundos — una decisión es una llamada larga. El tiempo de espera es un ajuste de cliente/anfitrión, no un parámetro de la herramienta: no hay nada que pasar en la llamada. Un valor predeterminado de 60 s la corta antes de que llegue la respuesta; si eso ocurre, no vuelvas a llamar — recupera mediante job_id.
Llamadas largasUn cliente que declara la extensión io.modelcontextprotocol/tasks recibe un identificador de tarea en lugar de mantener una conexión abierta durante minutos, y consulta tasks/get — ver Recuperar un resultado. Los clientes que no la declaran no ven ningún cambio.

Una llamada exitosa devuelve la decisión en línea. job_id, betterOption, confidence y reason llegan todos en el mismo resultado de la herramienta — no hay nada que consultar ni recuperar después. El job_id es solo para el caso en que la llamada nunca regresó (tiempo de espera agotado, conexión caída, cliente dejó de esperar).

confidence es el propio juicio de este servicio sobre qué tan separadas estaban las dos opciones — una referencia para tu toma de decisiones, no una instrucción, no un resultado, y no una predicción de cómo resultará la elección. Como lectura aproximada: ≥90% claramente separadas · 80–90% separadas, menos claramente · 70–80% una decisión más reñida · <70% close to evenly matched. These ranges are descriptive only. Choose your own threshold for your own use case; for high-stakes or irreversible decisions apply your own review policy. Observed accuracy for each range, and how it was measured, is published at https://api.turingcorp.net — esa página es la autoridad sobre las bandas y su precisión medida.

⚠️ idempotentHint: false es una declaración honesta: una llamada reintentada es una llamada nueva. Registra el job_id que devuelve el resultado — una decisión que ya has pagado puede recogerse durante 7 días con la misma credencial (GET https://api.turingcorp.net/v1/jobs?job_id=<id>; sin el id, GET https://api.turingcorp.net/v1/jobs lista los ids de trabajo para esa credencial). Recupera en lugar de reintentar.

Cuándo no usarlo

  • Más de dos opciones. Compara exactamente A y B — no hay una tercera ranura, y no clasificará una lista.
  • Cualquier cosa que puedas calcular o verificar. Una especificación, una prueba, un precio, un documento: si algo objetivo lo decide, usa eso. Esto es para elecciones donde ninguna regla objetiva lo hace.
  • Preguntas factuales. Elige entre dos candidatos; no busca nada.
  • Rutas críticas de velocidad. Una decisión es una llamada larga y de pago. No la pongas detrás de una solicitud que deba responder en segundos.
  • Llamadas irreversibles de alto riesgo sin revisión. Enruta según la confianza y mantén tu propia política de revisión.

Cómo llenar los tres argumentos

  • task — plantea la decisión neutralmente, sin inclinarte hacia ningún lado: "¿Qué correo envío?", no "¿Debería enviar el honesto?"
  • optionA / optionB — una opción concreta cada una, más el argumento a favor. Texto plano o Markdown, cualquier longitud; mantén los dos lados aproximadamente comparables para que la comparación sea justa.
  • Una opción = un plan. No combines alternativas en un solo lado ("ir adentro o posponer"): compara las dos ranuras, no divide una de ellas por ti.
{
  "task": "Which version of the delivery-slip email do I send to a client we want to keep?",
  "optionA": "Short and direct: the integration took longer than planned, delivery moves to the 24th, everything else is unchanged.",
  "optionB": "Warmer and longer: thank them for the kickoff, explain that dependencies took more time, offer to walk through the details."
}

Más patrones — elegir la versión que envías, establecer umbrales en la confianza, y escribir las dos opciones para que la comparación sea justa: docs/COOKBOOK.md.

Recuperar un resultado

Cada llamada devuelve un job_id. Una llamada a la que se le permite terminar devuelve la decisión en línea — el job_id es solo para el caso en que nunca regresó.

⚠️ Cómo recuperar — usa get_result. La recuperación necesita el Agent Pass, y dentro de un anfitrión MCP el agente normalmente no lo tiene — así que la recuperación es una llamada de herramienta, no una llamada REST: get_result está autenticada por el anfitrión, que adjunta el pase por ti. Un agente nunca maneja el pase, y la credencial deliberadamente no es un argumento de herramienta (terminaría en prompts y transcripciones).

  • get_result con un job_id — el estado de ese trabajo, y una vez que tuvo éxito, el mismo cuerpo de decisión que la llamada original devolvió.
  • get_result sin argumento — los ids de trabajo que esta credencial creó en los últimos 7 días. Este es el caso que más importa: cuando una llamada se corta, nunca recibiste un id.
  • Solo lectura y gratis — no inicia trabajo nuevo y no cuesta nada, así que es seguro reintentar (readOnlyHint: true, idempotentHint: true).
  • Un anfitrión que declara la extensión io.modelcontextprotocol/tasks puede consultar tasks/get en su lugar. La mayoría de los clientes no la declaran todavía, por eso existe get_result.

Operador/anfitrión, con el pase (los mismos datos sobre REST):

  • Con el id — GET https://api.turingcorp.net/v1/jobs?job_id=<id> usando el mismo Agent Pass.
  • Sin él — GET https://api.turingcorp.net/v1/jobs lista los ids de trabajo que esa credencial creó en los últimos 7 días; luego recupera uno como arriba. La lista lleva solo el id de trabajo, el producto y una marca de tiempo.
  • Aún nada — una lista vacía no es un error, y no hay un marcador de posición job_id=0: {"object":"list","window_seconds":604800,"data":[]}. Preguntar por 0 devuelve 404 No such job.

La recuperación devuelve el estado del trabajo y, una vez que tuvo éxito, el mismo cuerpo que la llamada misma habría devuelto. Un trabajo que no es tuyo, o más antiguo que 7 días, se reporta como no disponible. GET https://api.turingcorp.net/v1/account devuelve {"account_id":"…"}.

La respuesta práctica es no necesitar recuperación: reserva 180–300 segundos para que la llamada pueda terminar.

Verlo decidir primero

No hay nivel gratuito, así que publicamos la evidencia en su lugar: 27 decisiones reales, registradas palabra por palabra — la pregunta, ambas opciones, cuál fue preferida, la confianza reportada y la razón. Nueve dominios, tres casos cada uno: Escritura · Tecnología · Negocios · Investigación · Carrera · Dinero · Personas · Viajes · Cotidiano.

→ https://github.com/TuringCorp-net/poe-demo-public — conjunto de datos: examples.json

Lee la columna de confianza primero. En preguntas ordinarias y muy parecidas reporta 70–90%, no 99% — y ese es el punto de un número calibrado en lugar de uno decorativo: un valor alto significa que la comparación fue decisiva y la elección puede ejecutarse, un valor bajo significa que las dos opciones realmente están cerca y la elección sigue siendo tuya. En este conjunto el rango es 27.3%–88.3%, mediana 74.0%, ninguna por encima de 90%, porque estas son decisiones cotidianas reñidas, no fáciles. Lo que las bandas entregan cuando son decisivas está publicado en https://api.turingcorp.net.

Autenticación

Envía un Agent Pass: Authorization: Bearer <pass>.

Emitido en https://agent-pass.turingcorp.net — registro de autoservicio (verificación por correo electrónico) → recarga → obtén un pase. Un pase es válido por 7 días y puede regenerarse. Si una llamada se rechaza como credencial inválida, inicia sesión allí de nuevo y regenera.

Los errores caen en dos clases, y llegan en lugares diferentes:

Los problemas de credencial se rechazan antes de la llamada (HTTP 401 + WWW-Authenticate). Las fallas de negocio regresan como un resultado de herramienta con isError: true más un bloque JSON {error, http_status, action_url, message} — http_status es el estado ascendente; la llamada de herramienta en sí es HTTP 200.

ClaseQué regresaEjemplos
CredencialHTTP 401 + WWW-Authenticate — no se produce ningún resultado de herramientasin credencial · pase expirado o inválido (invalid_credential, con una URL de re-inicio de sesión en el mensaje)
NegocioHTTP 200, resultado de herramienta isError: true, más un bloque JSONsaldo insuficiente (http_status 402, action_url apuntando a recarga) · sobre cuota (http_status 429)

Rama según el estado HTTP primero: un 401 no tendrá éxito al reintentar sin una credencial nueva, mientras que una falla de negocio fue una llamada que se ejecutó y se rechazó — lee el bloque para la razón y el siguiente paso. El contrato detallado está bajo Los errores son legibles por máquina abajo.

Límite de tasa de entrada: 120 solicitudes / 60 s / IP de cliente. Esto es amortiguación de inundación, no una cuota — la cuota real por clave se aplica por separado. El contador es aproximado: se mantiene por ubicación de borde y es eventualmente consistente, así que un exceso breve es posible.

Dos formas de entrar — y no son lo mismo

  • A través de un cliente o anfitrión MCP (Claude Code, Cursor, VS Code, Codex, TRAE, Coze…). El anfitrión tiene la credencial y la adjunta por ti: no estableces un encabezado Authorization tú mismo, y en la mayoría de los anfitriones no puedes. El tiempo de espera es un ajuste del anfitrión, no algo que pases en la llamada.
  • Directamente contra la API REST (https://api.turingcorp.net). Aquí sí envías Authorization: Bearer <Agent Pass> tú mismo, y puedes recuperar un trabajo por id.

⚠️ Lo que atrapa a la gente: poder llamar a la herramienta a través de un anfitrión no significa que puedas alcanzar la API REST. El anfitrión puede nunca entregarte el Agent Pass subyacente, así que una llamada de recuperación de trabajo que hagas por tu cuenta puede regresar 401. Si tu anfitrión declara la extensión Tasks, recupera a través de la superficie de herramienta en su lugar (ver Recuperar un resultado); si no lo hace, la recuperación puede simplemente no ser alcanzable desde donde estás.

Inicio rápido

Necesitas un Agent Pass para llamar a la herramienta. El descubrimiento (tools/list) funciona sin uno — llamar a decide no.

🔑 Dónde vive el pase importa. Si tu cliente puede mantenerlo fuera del archivo, hazlo — el ${input:…} de VS Code, el bearer_token_env_var de Codex. Un pase escrito en texto plano dentro de mcp.json o cualquier configuración de cliente es legible por cada agente y proceso que pueda leer ese archivo, y los asistentes sí leen su propia configuración — uno puede imprimir tu pase directamente en su salida. Trata una configuración de cliente como pública dentro de tu máquina.

1. Obtén un Agent Pass

Autoservicio en https://agent-pass.turingcorp.net: regístrate con una dirección de correo electrónico, verifícala, añade crédito. El pase se muestra una vez; es válido por 7 días y puede regenerarse en cualquier momento. Los agentes pueden hacer lo mismo a través de la API — ver el /llms.txt de ese sitio.

2. Apunta tu cliente al endpoint

Cualquier cliente que lea una configuración JSON — Cursor, Windsurf, Claude Desktop:

{
  "mcpServers": {
    "TuringCorp": {
      "type": "http",
      "url": "https://mcp.turingcorp.net/mcp",
      "headers": { "Authorization": "Bearer <your Agent Pass>" }
    }
  }
}

Mantén la línea "type": "http": un cliente que lee una entrada url sin type la trata como un servidor stdio local y la omite.

Cline necesita un type diferente — "streamableHttp" (camelCase, sin guion). Cualquier otra cosa, u omitirlo, hace que Cline retroceda a SSE, que este servidor no habla, y la conexión falla con 405. El archivo de configuración es cline_mcp_settings.json (icono de Servidores MCP → pestaña Configurar → Configurar Servidores MCP):

{
  "mcpServers": {
    "TuringCorp": {
      "type": "streamableHttp",
      "url": "https://mcp.turingcorp.net/mcp",
      "headers": { "Authorization": "Bearer <your Agent Pass>" },
      "disabled": false,
      "autoApprove": [],
      "timeout": 300
    }
  }
}

timeout está en segundos — déjalo en 300 o más. Cline ha tenido un error (#2296, cerrado 2025-06-23) donde las solicitudes morían después de aproximadamente un minuto independientemente de ese ajuste; si una llamada se corta a ~60 s, sospecha de eso en lugar del servidor, y recupera mediante job_id en lugar de reintentar (un reintento es una segunda llamada de pago). Un cliente que solo habla stdio necesita un puente, y la credencial debe ir a través de --header — mcp-remote no lee una variable de entorno AUTHORIZATION, por lo que una configuración que solo establece una se conecta, lista herramientas y luego falla en la primera llamada con 401. El espacio que falta después de Authorization: es deliberado: algunos clientes alteran los espacios dentro de args.

{
  "mcpServers": {
    "TuringCorp": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.turingcorp.net/mcp",
               "--header", "Authorization:${AGENT_PASS}"],
      "env": { "AGENT_PASS": "Bearer <your Agent Pass>" }
    }
  }
}

⚠️ Un npx -y mcp-remote@latest https://mcp.turingcorp.net/mcp sin credencial se conectará y listará herramientas, y luego fallará en la primera llamada con 401. Eso es esperado: el descubrimiento es abierto, la ejecución no.

Claude Code:

claude mcp add --transport http TuringCorp https://mcp.turingcorp.net/mcp \
  --header "Authorization: Bearer <your Agent Pass>"

3. Verifícalo tú mismo

Descubrimiento: no se necesitan credenciales:

curl -s -X POST https://mcp.turingcorp.net/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -H 'mcp-protocol-version: 2026-07-28' \
  -H 'mcp-method: tools/list' \
  --data '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}'

Llamar a la herramienta adicionalmente necesita mcp-name: decide y la credencial:

curl -s -X POST https://mcp.turingcorp.net/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -H 'mcp-protocol-version: 2026-07-28' \
  -H 'mcp-method: tools/call' \
  -H 'mcp-name: decide' \
  -H "authorization: Bearer $AGENT_PASS" \
  --data '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"decide","arguments":{"task":"Pick a launch date","optionA":"Ship now","optionB":"Wait two weeks"},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}'

Versiones

Existen dos números de versión y no están destinados a coincidir:

significado
Versión de registro version (server.json)la versión de listado: el registro de metadatos (endpoint, declaración de autenticación, icono, enlaces). Avanza cuando cambia el listado.
serverInfo.version (desde el endpoint en vivo)la versión de tiempo de ejecución del servidor desplegado. Avanza cuando cambia el comportamiento.

Un cambio solo de listado (por ejemplo, un enlace corregido) avanza la versión de registro sin tocar el tiempo de ejecución, por lo que los dos pueden diferir legítimamente.

Detalles del protocolo que vale la pena conocer

  • Accept debe contener ambos application/json y text/event-stream, o recibirás 406.
  • Versiones de protocolo: una ruta sirve a ambas generaciones.
    • 2026-07-28 moderno — sin handshake initialize; usa server/discover y _meta.
    • Legado — handshake initialize estándar. Negociación medida: un cliente que solicita 2025-11-25, 2025-06-18 o 2025-03-26 recibe como respuesta exactamente la versión que solicitó; un 2026-07-28 initialize moderno (que no forma parte de esa generación) recibe como respuesta 2025-11-25.
    • El descubrimiento de capacidades del servidor a través de tools/list y server/discover no necesita credenciales.
  • Los errores son legibles por máquina. Hay dos tipos distintos, y llegan de manera diferente — así que ramifica en lo correcto:
Qué fallóCómo lo vesEn qué ramificar
Credencial faltante o inválidaHTTP 401 con un desafío WWW-Authenticate (que lleva error="invalid_token" y resource_metadata); el cuerpo es un error JSON-RPC estándar con error.code = -32001. No se produce ningún resultado de herramienta.el código de estado HTTP
Fallo de negocio — saldo insuficiente, cuota, error ascendenteun resultado de herramienta normal (isError: true) cuyo segundo bloque content es un único objeto JSON que puedes JSON.parse, p. ej. {"error":"insufficient_balance","http_status":"402","action_url":"…","message":"…"}el campo error dentro de ese bloque

En resumen: los problemas de credenciales se rechazan antes de que la herramienta se ejecute, por lo que nunca aparecen como un resultado de herramienta; todo lo demás que falla después de eso sí aparece, con un bloque legible por máquina adjunto.

  • Descubrimiento de autorización: las respuestas 401 llevan un resource_metadata que apunta a /.well-known/oauth-protected-resource. Ten en cuenta que este servidor usa una credencial bearer estática, no OAuth — ese documento lo dice explícitamente en lugar de enviarte a un flujo OAuth que no existe.

No para clientes de navegador

Este endpoint deliberadamente no sirve clientes MCP basados en navegador (de origen cruzado): las solicitudes que llevan un encabezado Origin de navegador distinto de localhost se rechazan con 403, y no se devuelven encabezados CORS. Las herramientas de navegador como MCP Inspector funcionan mediante un proxy a través de un proceso local, que no envía Origin — esa ruta funciona normalmente. Si necesitas que una página de navegador llegue a este servidor, ejecuta un proxy que controles en lugar de llamarlo desde un origen cruzado.

Lo que esto no es

  • Sin otros niveles. Otras capacidades de TuringCorp no son accesibles a través de este endpoint.
  • Sin SLA. No se ofrece ningún compromiso de disponibilidad, y no se debe inferir ninguno.
  • No es un piloto automático. Decider es un componente que tú llamas. Cómo decides basarte en él — umbrales, revisión humana, reintentos — es tu política y sigue siendo tuya.
  • decide no tiene clave de idempotencia: registra el ID del trabajo en su lugar. Una decisión reintentada es una nueva llamada de pago; recopila la original con get_result.

Úsalo desde un agente de codificación: la habilidad del agente

Hay una habilidad de agente para agentes de codificación (Claude Code, Codex y cualquier cosa que lea la misma convención de habilidades). Enseña a un agente cuándo un juicio de dos opciones es la herramienta adecuada, cómo escribir las dos opciones para que la comparación sea justa y cómo leer la confianza sin sobreinterpretarla.

Instálala apuntando tu agente a este repositorio, o copia skills/decider/ en tu directorio de habilidades y agrega el servidor MCP a tu cliente (consulta Inicio rápido).

Acerca de este repositorio

Este repositorio lleva los metadatos de descubrimiento para el servidor anterior — lo que los servicios de directorio y los clientes leen para encontrarlo y describirlo.

Este servidor también está listado en Smithery: https://smithery.ai/servers/turingcorp/mcp

El servidor en sí es un endpoint remoto alojado; nada aquí necesita instalarse o ejecutarse.

Licencia

Consulta LICENCIA.