---
title: MCP server
description: Install the Cascades MCP server (@crscreditapi/cascades-mcp-server) in Claude Code, Claude Desktop, Cursor, VS Code or Windsurf and run cascades from your…
canonical_url: "https://cascades.crscreditapi.com/docs/mcp"
doc_version: "1.0.0"
last_updated: "2026-10-09T14:37:54Z"
source: docs/mcp/tools.json
---

# Cascades MCP server

`@crscreditapi/cascades-mcp-server` is a Model Context Protocol server that exposes the Cascades API as 9 tools. Every tool is exactly one authenticated REST call using your own API key and scopes — no separate MCP auth.

## Install

- [Claude Code](https://cascades.crscreditapi.com/docs/mcp/install/claude-code.md)
- [Claude Desktop](https://cascades.crscreditapi.com/docs/mcp/install/claude-desktop.md)
- [Cursor](https://cascades.crscreditapi.com/docs/mcp/install/cursor.md)
- [VS Code](https://cascades.crscreditapi.com/docs/mcp/install/vscode.md)
- [Windsurf](https://cascades.crscreditapi.com/docs/mcp/install/windsurf.md)
- [ChatGPT](https://cascades.crscreditapi.com/docs/mcp/install/chatgpt.md)

## Requirements

- Node.js 18 or newer (clients run `npx -y @crscreditapi/cascades-mcp-server`).
- An API key with `workflows:read`, `workflows:write`, `executions:read`, `executions:write`. A key missing a scope gets `403 insufficient_scope` on the affected tools only.
- `CASCADES_PROD_BASE_URL` is the host **without** `/api/v1`: `https://cascades.crscreditapi.com`.

## Security

- **Live runs are billable and blocked for docs keys.** `cascades_trigger_workflow` defaults to `execution_mode: "test"`; `"live"` pulls real reports, needs a production-approved account, and is rejected for sandbox and docs-issued keys.
- **Delete asks for confirmation.** `cascades_delete_workflow` soft-deletes a cascade; its description tells the model to confirm first. Use a read-only key (no `:write` scopes) for agents that should never mutate anything.
- **Never expose HTTP mode without auth.** `MCP_TRANSPORT=http` serves every caller with one process-level key and has no per-request auth. Keep it on a private network; use stdio for people.

## Tools

| Tool | Access | REST call | Scopes |
|---|---|---|---|
| [`cascades_create_workflow`](https://cascades.crscreditapi.com/docs/mcp/tools/cascades_create_workflow.md) | write | `POST /workflows` | `workflows:write` |
| [`cascades_delete_workflow`](https://cascades.crscreditapi.com/docs/mcp/tools/cascades_delete_workflow.md) | destructive | `DELETE /workflows/{id}` | `workflows:write` |
| [`cascades_generate_workflow`](https://cascades.crscreditapi.com/docs/mcp/tools/cascades_generate_workflow.md) | write | `POST /workflows/generate` | `workflows:write` |
| [`cascades_get_execution`](https://cascades.crscreditapi.com/docs/mcp/tools/cascades_get_execution.md) | read | `GET /executions/{id}` | `executions:read` |
| [`cascades_get_workflow`](https://cascades.crscreditapi.com/docs/mcp/tools/cascades_get_workflow.md) | read | `GET /workflows/{id}` | `workflows:read` |
| [`cascades_list_test_cases`](https://cascades.crscreditapi.com/docs/mcp/tools/cascades_list_test_cases.md) | read | `GET /workflows/{id}/test_cases` | `workflows:read` |
| [`cascades_list_workflows`](https://cascades.crscreditapi.com/docs/mcp/tools/cascades_list_workflows.md) | read | `GET /workflows` | `workflows:read` |
| [`cascades_trigger_workflow`](https://cascades.crscreditapi.com/docs/mcp/tools/cascades_trigger_workflow.md) | write | `POST /workflows/{id}/trigger` | `executions:write` |
| [`cascades_update_workflow`](https://cascades.crscreditapi.com/docs/mcp/tools/cascades_update_workflow.md) | write | `PATCH /workflows/{id}` | `workflows:write` |

## A worked session

**You:** List my cascades and run the standard tenant screening for one of the sandbox test cases.

**Tool call** `cascades_list_workflows`

```json
{
  "active": true
}
```

**Result**

```json
{
  "data": [
    {
      "id": 157,
      "object": "workflow",
      "code": "WF-157",
      "name": "Tenant screening — standard",
      "use_case": "tenant_screening",
      "trigger_type": "manual",
      "active": true
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 25,
    "total_count": 1,
    "total_pages": 1,
    "object": "list"
  }
}
```

**Assistant:** You have one active cascade: **Tenant screening — standard** (id 157). Looking up its registered test subjects.

**Tool call** `cascades_list_test_cases`

```json
{
  "workflow_id": 157
}
```

**Result**

```json
{
  "object": "test_case_list",
  "workflow_id": 157,
  "test_cases": [
    {
      "id": 54,
      "case_name": "Cascades_Credit_720",
      "product_code": "TUC1001",
      "payload": {
        "applicant": {
          "first_name": "Sandrx",
          "last_name": "Bowkey"
        },
        "property": {
          "state": "MD"
        }
      }
    }
  ]
}
```

**Assistant:** One subject is registered for its TransUnion credit pull: *Cascades_Credit_720* (Sandrx Bowkey). Running it in test mode.

**Tool call** `cascades_trigger_workflow`

```json
{
  "workflow_id": 157,
  "execution_mode": "test",
  "payload": {
    "applicant": {
      "first_name": "Sandrx",
      "last_name": "Bowkey"
    },
    "property": {
      "state": "MD"
    }
  }
}
```

**Result**

```json
{
  "data": {
    "id": 4821,
    "object": "execution",
    "workflow_id": 157,
    "status": "pending",
    "execution_mode": "test",
    "created_at": "2026-09-09T17:04:11Z"
  }
}
```

**Assistant:** Execution 4821 is pending — the run is asynchronous. Polling until it reaches a terminal status.

**Tool call** `cascades_get_execution`

```json
{
  "execution_id": 4821
}
```

**Result**

```json
{
  "data": {
    "id": 4821,
    "object": "execution",
    "workflow_id": 157,
    "status": "completed",
    "decision": "approve",
    "step_outputs": {
      "credit": {
        "score": 712
      },
      "decision": {
        "outcome": "approve"
      }
    }
  }
}
```

**Assistant:** Done: execution 4821 **completed** with decision **approve**. The credit step returned a 712 score, above the cascade's 680 threshold, and no other rule fired.

## Test with MCP Inspector

```bash
CASCADES_API_KEY={{API_KEY}} CASCADES_PROD_BASE_URL=https://cascades.crscreditapi.com \
  npx @modelcontextprotocol/inspector npx -y @crscreditapi/cascades-mcp-server
```

## Configuration

| Variable | Required | Description |
|---|---|---|
| `CASCADES_API_KEY` | yes | Bearer token, sent as `Authorization: Bearer …` on every call. |
| `CASCADES_PROD_BASE_URL` | yes | Cascades host without `/api/v1`. |
| `CASCADES_DEV_BASE_URL` | no | Alternate host for `environment: "dev"`; falls back to prod. |
| `CASCADES_TIMEOUT_MS` | no | Per-request timeout, default `30000`. |
| `MCP_TRANSPORT` | no | `stdio` (default) or `http`. |
| `MCP_PORT` | no | HTTP-mode port, default `3004`. |

## Sitemap

See the full [sitemap](https://cascades.crscreditapi.com/sitemap.md) for all pages.
