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. 1

    Point your client at the server. The commands and configuration files for each client are below.

  2. 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. 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_accountReports the connected account and whether it may file cases.GET /me
run_simulationStarts a simulation from both sides of a dispute.POST /simulations
get_simulationWaits for a simulation and returns the award text and PDF link.GET /simulations/{id}, /result
file_caseFiles a case under a contract with an arbitration clause. Returns action_url for signing, payment and identity verification.POST /cases
file_consent_caseFiles a consent case. Returns sign_url; the respondent is invited after you sign and pay.POST /consent-cases
get_caseReports a case's status and the next step for you, with its link.GET /cases/{id}, /consent-cases/{id}
send_feedbackSends 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.