MCP vocabulary for decisions¶
Coalex is standardising the words it uses for human decisions on the Model Context Protocol elicitation vocabulary. Both sets of words work, everywhere, today.
If you have an existing integration, you do not need to change anything. Nothing has been removed and nothing has changed meaning. This page exists so you can move when it suits you, not because you must.
The mapping¶
| MCP name | Original name | What it means |
|---|---|---|
accept |
approved |
the human approved the call as proposed |
accept-with-content |
corrected |
the human approved it after editing the output |
decline |
rejected |
the human refused it, usually with an instruction |
cancel |
expired |
nobody decided before the deadline — an operational outcome, not a judgement on the agent |
input_required |
escalated |
the call is paused, waiting for a human |
accept-with-content and corrected are the same decision: MCP distinguishes an accept that carried edits by the presence of content, rather than by a different action name.
Resolving¶
Either vocabulary, in both SDKs:
import coalex
# MCP names
coalex.resolve(escalation_id=eid, decision="accept")
coalex.resolve(escalation_id=eid, decision="decline", reason="unverified payee")
coalex.resolve(escalation_id=eid, decision="accept-with-content", corrections={"amount": "5000"})
# The original names keep working, unchanged
coalex.resolve(escalation_id=eid, decision="approved")
import { resolve } from "@coalex-ai/sdk";
await resolve({ escalationId, decision: "accept" });
await resolve({ escalationId, decision: "decline", reason: "unverified payee" });
await resolve({ escalationId, decision: "accept-with-content", corrections: { amount: "5000" } });
await resolve({ escalationId, decision: "approved" }); // still fine
The SDK does not translate. Whatever word you pass is the word that goes on the wire, so a payload you are debugging says what you actually sent.
Reading a result¶
Responses gained fields rather than changing any. status still returns exactly what it always returned; the MCP reading sits beside it:
result = coalex.resolve(escalation_id=eid, decision="accept")
result.status # "approved" — unchanged, whatever you sent
result.task_state # "completed"
result.result_action # "accept"
decision = coalex.evaluate(input=..., output=...)
decision.status # "escalated" — unchanged
decision.task_state # "input_required"
task_state and result_action are None when talking to a Coalex deployment that predates them. They are reported as absent rather than derived locally, because "this deployment is older" and "this decision has no action yet" are different facts and guessing would erase the difference.
Which should I use?¶
Use the MCP names in new code. They are the vocabulary the Gateway, the Decision Request API and the SDKs all share, so an agent that speaks them needs no translation layer as more of the platform becomes MCP-native.
Move existing code when you touch it. There is no deprecation deadline on this page, and there will not be one without notice here first.
What has not changed¶
- Stored values. Coalex records
approved/rejected/corrected/expiredregardless of which word you send. Reports, exports and health scores are unaffected. - Your resume payload. The body delivered to a checkpoint resume hook is unchanged.
- Anything else. If you send only the original vocabulary, every response is byte-identical to before.