# TuringCorp > A decision model for the calls that don't have a right answer Exposed as a remote MCP server over Streamable HTTP. Give it two defensible options; it returns which one it prefers, how far apart it judged them (a calibrated confidence), and why. > > **The confidence is the point:** it is calibrated, not decorative — on **both** published benchmarks accuracy rises with the value (JudgeBench 99.6% in the 90%+ band down to 67.7% below 70%; the harder ContextualJudgeBench 83.3% down to 55.4%), so an agent can act on a high value and escalate a low one. Tables, sample sizes and method: https://api.turingcorp.net ## Endpoint - Canonical: https://mcp.turingcorp.net/mcp - Aliases: https://mcp.turingcorp.net/ and https://mcp.turingcorp.net/mcp/ - Health: https://mcp.turingcorp.net/healthz - Transport: Streamable HTTP, stateless (no session, no Durable Object). GET /mcp -> 405 is normal. - Protocol: 2026-07-28 (modern - server/discover, no handshake) and legacy initialize handshakes, same route. - Required headers: Accept must contain BOTH application/json and text/event-stream; MCP-Protocol-Version; Mcp-Method (and Mcp-Name when calling a tool). - Discovery methods (server/discover, tools/list) require NO credentials. - Client setup recipes (Claude Code / Cursor / Cline / VS Code / TRAE / Codex / Coze / stdio bridge): https://mcp.turingcorp.net/index.md NOTE Cline: its "type" must be "streamableHttp" (camelCase). Any other value makes Cline fall back to SSE, which this server does not speak, and the connection fails with 405. ## Tool: decide - Title: Decider: pick the better of two options - Input: task (string), optionA (string), optionB (string) — all required. - Output: betterOption ("option_A" | "option_B"), confidence (percentage string, e.g. "76.7%"), reason (string), job_id (string). - Annotations: readOnlyHint true, openWorldHint false, idempotentHint false. - Timeout: reserve 180-300 seconds. The timeout is a client/host setting, not a tool parameter; there is nothing to pass in the call. If the call is cut off, do not re-call - retrieve it with get_result. - Return: a successful call returns the decision inline - betterOption, confidence, reason and job_id in the same tool result; there is nothing to poll. The job_id is only for a call that never came back. - Hosts: through an MCP client the host attaches your credential - you do not (and usually cannot) set Authorization yourself. Do not try to reach the REST API directly for retrieval; use get_result, which the host authenticates for you. - Not for: more than two options; anything an objective rule settles (spec, test, price, document); factual lookup; paths that must answer in seconds; high-stakes irreversible calls without review. - Fill it: state task neutrally; one concrete plan per option (never bundle "X or Y" into one side); keep the two sides comparable; plain text or Markdown, any length. Use this when you must choose between two concrete options and both are defensible - two plans, two drafts, two diagnoses, two vendors - and you have no objective way to pick. Not for: more than two options; anything an objective rule settles (a spec, a test, a price, a document); factual lookup; paths that must answer in seconds; high-stakes irreversible calls without review. Fill it in: state task neutrally, without leaning toward either side; give one concrete plan per option - never bundle alternatives into a single one ("go indoors or postpone"); keep the two sides comparable in length. Returns the decision inline: betterOption ("option_A" or "option_B"), confidence (e.g. "76.7%"), reason and job_id, all in the same tool result. There is nothing to poll and nothing to fetch afterwards. Reserve 180-300 seconds: this is a long call, and the timeout is a client/host setting, not a parameter you pass. If the call is cut off, do NOT call again - a retry is a new paid call. Retrieve it instead with the get_result tool (same job_id): read-only, free, and no credential of your own needed; with no job_id it lists the ids for your credential. A host that declares the io.modelcontextprotocol/tasks extension can use tasks/get instead. The confidence is the point: it is calibrated, not decorative. On both published benchmarks accuracy rises with it - JudgeBench 99.6% in the 90%+ band down to 67.7% below 70%; the harder ContextualJudgeBench 83.3% down to 55.4% - so route on it: act on a high value, review or escalate a low one, instead of trusting a bare pick. Tables, sample sizes and method: https://api.turingcorp.net Judged by an independent panel, not by a model grading its own output. Read it as a reference, not an instruction, a result, or a prediction; set your own threshold, and apply your own review policy for high-stakes or irreversible decisions. Auth: Agent Pass as `Authorization: Bearer ` (issued at https://agent-pass.turingcorp.net, valid 7 days; each decision is a paid call). On invalid_credential, sign in there and re-roll. Errors: a credential problem is rejected before the call - HTTP 401 with WWW-Authenticate; a business failure (e.g. insufficient balance) comes back as a tool result with isError true plus a second JSON block {error, http_status, action_url, message}, where http_status is the upstream status (the tool call itself is HTTP 200). ## Tool: get_result - Input: job_id (string) - OPTIONAL. With it, return that job. Without it, list the job ids this credential created in the last 7 days. - Output: the job's state; once it succeeded, the same decision body the original call returned. In-flight jobs report state, stage and a poll interval; failed jobs report why. - Annotations: readOnlyHint true, idempotentHint true. Read-only and FREE - it starts no new work and costs nothing, so it is safe to call repeatedly. - Credential: none of your own. The host attaches the same Agent Pass it uses for decide; a credential is never a tool argument, by design. - Use it when: a call was cut off by a client timeout and you never received the id (call it with no argument to find the id, then again with it); or you were handed a job_id and want the result. Do NOT re-call decide - a retry is a new paid call. - Errors: an unknown, another account's, or an expired id all return the same not-found shape, deliberately - ownership is not disclosed. - Related: a client that declares the io.modelcontextprotocol/tasks extension can poll tasks/get instead. Most clients do not declare it yet. ## Tasks (asynchronous calls) Opt-in extension: `io.modelcontextprotocol/tasks`. Declare it in the per-request `_meta` client capabilities (`io.modelcontextprotocol/clientCapabilities.extensions`) and `tools/call` returns a task handle instead of holding the connection: `{"resultType":"task","taskId":"","status":"working","ttlMs":604800000,"pollIntervalMs":2000}`. Poll `tasks/get` with `{"taskId":""}`; status moves `working` -> `completed` (with the same payload a synchronous call returns) or `failed`. `ttlMs` is 7 days from creation; `pollIntervalMs` is 2000. `tasks/cancel` acknowledges the intent only. Clients that do not declare the capability are unchanged. ## Retrieving a result WARNING - how to retrieve: use the get_result tool. It is read-only and free, starts no new work, and needs no credential of your own - the host attaches the Agent Pass exactly as it does for decide, so an agent never handles the pass. With a job_id it returns that job's result; with no argument it lists the job ids this credential created in the last 7 days (use that when a call was cut off and you never received an id). A host that declares the io.modelcontextprotocol/tasks extension can also poll tasks/get; most clients do not declare it yet, which is why get_result exists. The practical answer is still not to need it: reserve 180-300 seconds so the call finishes inline. The id returned by a call is the job id. Record it when you start a call. - With the job id: get_result with {"job_id":""} - inside a host that is the path that works, because the host supplies the credential. Outside a host (you own the pass): tasks/get with {"taskId":""}, or GET https://api.turingcorp.net/v1/jobs?job_id= on the API host. - Without it: get_result with no argument lists the job ids created in the last 7 days; each entry carries job_id, product and created_at (the Unix second the call was started). Pick one and fetch it as above. - Nothing yet: an empty list is not an error - {"object":"list","window_seconds":604800,"data":[]}; there is no job_id=0 placeholder (asking for 0 returns 404 No such job). One call returns the decision inline; the job id is only for a call that never came back. Retrieval returns the job status and, once it succeeded, the stored result. A job that is not yours, or older than 7 days, is reported as unavailable. ## Authentication Send an Agent Pass as: Authorization: Bearer Issued at https://agent-pass.turingcorp.net — self-service signup with email verification, then top up. Valid 7 days, re-rollable. - No credential -> HTTP 401 + WWW-Authenticate: Bearer realm="turingcorp-mcp" - Expired/invalid pass -> HTTP 401, invalid_credential in the body (message contains a re-login URL) - Insufficient balance -> HTTP 200 tool result, isError true + JSON block {"error":"insufficient_balance","http_status":"402","action_url":".../topup"} - Over quota / rate limited -> entry limiter: HTTP 429 + Retry-After; upstream business denial: tool result as above - Two error conventions, on purpose: credential problems are a real HTTP status (401) decided BEFORE the call; business failures are ordinary tool results carried as HTTP 200 - branch on isError + the JSON block (http_status inside it is the upstream status). Entry rate limit: 120 requests / 60 seconds / client IP. Flood damping, not a quota. ## Pricing $0.50 per decision — launch offer $0.25 for the first month. ## Not offered - No SLA and no availability commitment. - Not an autopilot: thresholds and review policy are the caller's. - No idempotency key: a retried call is a new call. **Record the job id instead** - the id returned by the call is the job id. Retrieve the status and result later with get_result (the host supplies the credential): with a job_id it returns that job; with no argument it lists the ids created in the last 7 days. - No other tiers are reachable through this endpoint. ## More - Human page + Markdown: https://mcp.turingcorp.net/ · https://mcp.turingcorp.net/index.md - Server card: https://mcp.turingcorp.net/.well-known/mcp/server-card.json - Accuracy by confidence range: https://api.turingcorp.net