Connect an AI Assistant (MCP)
DecisionLayer hosts a
Model Context Protocol
server at
https://www.decisionlayer.ai/mcp.
ChatGPT, Codex, Claude Code, Claude Desktop, claude.ai, Cursor, VS Code
and any other MCP client can use it to run a simulation, file a case
or file a consent case for you, and check what a case needs next.
You sign in with your DecisionLayer account and click Allow;
there is no API key to copy. Every tool call runs the matching
/api/v1
endpoint as you, so a simulation started from your assistant is the
same simulation the REST guide creates.
Signing, payment and identity verification stay on the web. When a
filing reaches one of those steps the assistant receives the link
(action_url
for a case, sign_url
for a consent case) and hands it to you. It has no tool that could
do those steps for you.
-
1
Point your client at the server. The commands and configuration files for each client are below.
-
2
The first time the assistant needs DecisionLayer, a sign-in page opens in your browser. Sign in or create an account, review what the app may do, and click Allow. Nothing more to configure.
-
3
Ask for a simulation in plain language. The worked example below shows exactly what the assistant sends and receives.
Connect your client
Claude Code
Add the server from a terminal, then run
/mcp
inside Claude Code to sign in. Add
--scope user
to make it available in every project.
claude mcp add --transport http decisionlayer https://www.decisionlayer.ai/mcp
Or commit this .mcp.json
at the root of a repository so your whole team gets it:
{
"mcpServers": {
"decisionlayer": {
"type": "http",
"url": "https://www.decisionlayer.ai/mcp"
}
}
}
ChatGPT and Codex
Install the DecisionLayer plugin from its marketplace, then find
DecisionLayer in the plugin list and install it.
The plugin also works as a Claude Code plugin with the same command
prefixed by claude.
codex plugin marketplace add DecisionScienceResearch/dl-api-plugin
Claude Desktop and claude.ai
Open Customize › Connectors, click
+ Add › Add custom connector, name it
DecisionLayer, and enter
https://www.decisionlayer.ai/mcp.
Leave the OAuth client settings at their defaults and click
Connect.
Cursor
Save as .cursor/mcp.json
in a project, or ~/.cursor/mcp.json
for every project.
{
"mcpServers": {
"decisionlayer": {
"url": "https://www.decisionlayer.ai/mcp"
}
}
}
VS Code
Save as .vscode/mcp.json
in a workspace, or run MCP: Add Server from the Command Palette.
{
"servers": {
"decisionlayer": {
"type": "http",
"url": "https://www.decisionlayer.ai/mcp"
}
}
}
Any other MCP client
Use streamable HTTP transport to
https://www.decisionlayer.ai/mcp
with OAuth. The server registers clients dynamically and
advertises every endpoint at
https://www.decisionlayer.ai/.well-known/oauth-authorization-server.
No client ID, secret or API key is required.
Example: run a simulation from your assistant
A simulation takes both sides of a dispute in one call and an AI arbitrator writes an award, usually within a few minutes. Nobody is contacted, nothing is signed and nothing is owed. Here is a complete exchange: what you type, every tool the assistant calls with its exact arguments, and what the server returns.
You say
Run a DecisionLayer simulation of a security deposit dispute with made-up names. The tenant says the landlord kept a $2,400 deposit for normal wear; the landlord says the carpet was ruined. Ask whether the landlord must return the deposit and how much. Wait for the award and read it to me.
1. The assistant checks the connection
It calls get_account
with no arguments. If you have not signed in yet, this is the moment
the browser opens.
Connected as Jordan Lee <jordan@example.com> on https://www.decisionlayer.ai.
{
"account": {
"id": "0f1a9b2c-6d3e-4f70-9a1b-2c3d4e5f6a7b",
"email": "jordan@example.com",
"first_name": "Jordan",
"last_name": "Lee",
"can_file_cases": true,
"created_at": "2026-09-14T18:02:11Z"
},
"base_url": "https://www.decisionlayer.ai"
}
2. It tells you two things, then starts the simulation
The server instructs every assistant to say, before running, that
the award is published at a public link for 30 days and that the
run counts against your monthly allowance. Then it calls
run_simulation:
{
"question_for_arbitration": "Must the landlord return the tenant's $2,400 security deposit, and if so how much?",
"plaintiff_name": "Taylor Brooks",
"respondent_name": "Morgan Ellis",
"plaintiff_argument": "I rented the unit for three years and left it clean. The landlord kept the entire $2,400 deposit, citing carpet replacement, but the carpet was already eight years old when I moved in and showed only normal traffic wear. No itemized statement was sent within 21 days.",
"respondent_argument": "The carpet had pet stains and a burn mark that were not present at move-in; the move-in checklist shows the carpet as clean. Replacing it cost $2,650, more than the deposit. An itemized statement was emailed on day 19.",
"governing_contract": "Residential Lease, Section 9 (Security Deposit). Tenant pays a security deposit of $2,400.00. Within 21 days after Tenant vacates, Landlord shall return the deposit less any amounts reasonably necessary to repair damage beyond ordinary wear and tear, together with an itemized statement of deductions.",
"financial_demand_usd": "2400.00"
}
The contract can also be a file: pass
contract_file
with a download_url
(.pdf, .docx, .rtf or .txt) instead of
governing_contract.
The server answers at once:
Simulation case_01k6zq8r5e7x9n3m2p4b1c0d8f started (processing). Call get_simulation with this ID to wait for the award.
{
"id": "case_01k6zq8r5e7x9n3m2p4b1c0d8f",
"status": "processing",
"page_url": "https://www.decisionlayer.ai/simulation/h/case_01k6zq8r5e7x9n3m2p4b1c0d8f",
"result_url": null,
"message": null,
"created_at": "2026-10-07T16:40:03Z"
}
3. It waits for the award
It calls get_simulation
with the ID it just received. The tool waits up to
wait_seconds
(default 30, at most 50) and returns either the award or a note to
call again. No listing tool is needed; the ID came back in step 2.
{
"simulation_id": "case_01k6zq8r5e7x9n3m2p4b1c0d8f",
"wait_seconds": 50
}
First answer, while the arbitrator is still writing:
Simulation case_01k6zq8r5e7x9n3m2p4b1c0d8f is still processing. Call get_simulation again in a moment.
{
"id": "case_01k6zq8r5e7x9n3m2p4b1c0d8f",
"status": "processing",
"page_url": "https://www.decisionlayer.ai/simulation/h/case_01k6zq8r5e7x9n3m2p4b1c0d8f",
"result_url": null,
"message": null,
"created_at": "2026-10-07T16:40:03Z"
}
The assistant calls it again. A few minutes in, the award is ready:
Simulation case_01k6zq8r5e7x9n3m2p4b1c0d8f is ready. Award PDF: https://www.decisionlayer.ai/d/aB3dE9fGhJ2k/
{
"status": "ready",
"id": "case_01k6zq8r5e7x9n3m2p4b1c0d8f",
"case_id": "case_01k6zq8r5e7x9n3m2p4b1c0d8f",
"text": "AWARD\n\n1. The question presented is whether Respondent may retain Claimant's $2,400.00 security deposit under Section 9 of the lease.\n\n2. Section 9 permits deductions only for damage beyond ordinary wear and tear and requires an itemized statement within 21 days. Respondent's day-19 email satisfies the timing requirement. The move-in checklist supports Respondent's account of the carpet's condition, but an eight-year-old carpet had little remaining useful life, so full replacement cost is not a reasonable measure of the damage.\n\n3. The arbitrator finds Respondent may retain $600.00 for the burn mark and stains and must return $1,800.00 to Claimant within 14 days of this award.\n\n[\u2026]",
"published_at": "2026-10-07T16:43:51Z",
"pdf_url": "https://www.decisionlayer.ai/d/aB3dE9fGhJ2k/",
"page_url": "https://www.decisionlayer.ai/simulation/h/case_01k6zq8r5e7x9n3m2p4b1c0d8f"
}
4. It reads the award back to you
The award is in. The arbitrator found that the lease allows deductions only for damage beyond ordinary wear and tear and that the landlord's itemized statement was on time. Because the carpet was already eight years old, full replacement cost was not a fair measure of the damage. Result: the landlord may keep $600 for the burn mark and stains and must return $1,800 within 14 days.
The full award PDF is at https://www.decisionlayer.ai/d/aB3dE9fGhJ2k/ (public for 30 days).
Before you run one. The award PDF is public for 30 days, so use made-up names if the dispute is real. Each account has a monthly allowance (10 by default; a 429 names the count when it is used up). Test API keys cannot simulate; a signed-in assistant is never a test key.
Nothing to protect. The assistant never sees a password or an API key. Disconnect it any time under Settings › API keys › Connected apps; simulations and cases it created stay on your dashboard.
The seven tools
| Tool | What it does | API call |
|---|---|---|
| get_account | Reports the connected account and whether it may file cases. | GET /me |
| run_simulation | Starts a simulation from both sides of a dispute. | POST /simulations |
| get_simulation | Waits for a simulation and returns the award text and PDF link. | GET /simulations/{id}, /result |
| file_case | Files a case under a contract with an arbitration clause. Returns action_url for signing, payment and identity verification. | POST /cases |
| file_consent_case | Files a consent case. Returns sign_url; the respondent is invited after you sign and pay. | POST /consent-cases |
| get_case | Reports a case's status and the next step for you, with its link. | GET /cases/{id}, /consent-cases/{id} |
| send_feedback | Sends a note to the DecisionLayer team, for example when a tool call failed. | POST /feedback |
Later rounds, respondent actions, listings and decided awards are not exposed through MCP. Use the REST API with an API key for those; see the create-a-case guide and the full reference.