*MCP › Connect*

# Connect Windsurf

> Add Filmo to Windsurf's Cascade with an API key read from your environment.

## Before you start

| What | What the vendor documents |
| --- | --- |
| Plan | Plans: not documented by the vendor. |
| Who adds the connector | You, in `mcp_config.json`. Team and Enterprise admins can switch MCP off and allowlist servers by name. |
| Who connects | Each user, with their own configuration file. |
| Administration | Once one server is allowlisted, every server that is not is blocked; the id has to match the key in `mcp_config.json`. |

verified on 2026-10-09: [MCP in Cascade](https://docs.devin.ai/desktop/cascade/mcp)

> **Use exactly this URL:** Type `https://app.filmo.io/api/v1/mcp` exactly. Do not use the Filmo domain of your company or any other host: the OAuth metadata names this origin, and a client that compares it with what you typed rejects a different one.

## Connect with OAuth

1. **Add the server** Add an entry with only `serverUrl` to `mcp_config.json`.
2. **Authenticate** Windsurf documents OAuth support for each transport; the steps of its dialog are not documented, so follow what the client shows and consent in Filmo.

- How scopes are chosen and whether tools are listed again after sign-in: not documented by the vendor.

## The consent screen

- Only the `*:read` scopes the client asked for are checked (every read scope when it asks for none).
- Write scopes, `workflows:run` and `ai:ask` always start unchecked, even if the client asks for them; the ones it asked for carry the label “Requested by the integration”.
- Check by hand only what the assistant needs, and leave `ai:ask` unchecked unless you want it to spend AI credits.

To change the scopes later, remove the connector and add it again.

Before you approve, read [Authentication](https://docs.filmo.io/mcp/authentication#before-you-approve).

## Connect with an API key

1. **Open the file** In the Cascade panel open the Actions menu and choose the MCP configuration file.
2. **Reference the key** `${env:NAME}` is filled from the environment in `serverUrl`, `url` and `headers`; an unset variable becomes an empty string.

*mcp_config.json*

```json
{
  "mcpServers": {
    "filmo": {
      "serverUrl": "https://app.filmo.io/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${env:FILMO_API_KEY}"
      }
    }
  }
}
```

> **Keep the key out of the repository:** Never paste an API key into a file that goes to version control. The examples read it from the environment or ask for it; if one leaks, revoke it and create another.

## Limits of this client

| What | What the vendor documents |
| --- | --- |
| Tools | Cascade has a limit of 100 total tools it can access at any time, across servers. |
| Output | A tool output limit: not documented by the vendor. |

## Recommended preset

Availability and schedule (read) (20): `availability:read`, `schedule:read`, `planner:read`, `staff:read`, `vehicles:read`, `items:read`, `spaces:read`, `kits:read`, `account:read`. Keep the total under 100 with your other servers.

Every preset and its size are in [Limits and context](https://docs.filmo.io/mcp/guides/limits-and-context).

## What to put on “ask before running”

Switch a server on or off in the MCPs section; disable single tools with `disabledTools` in the server entry.

The tools that must ask for approval are in [Safe writes](https://docs.filmo.io/mcp/guides/safe-writes#requires-confirmation).

- The page describes the configuration of the legacy Cascade agent; its documentation now lives with Devin Desktop.

## Check the connection

Ask the assistant: “Which Filmo account am I connected to?” It should call `filmo_account_get`, a read tool that returns no personal data.

---

Canonical URL: https://docs.filmo.io/mcp/connect/windsurf  
Last updated: 2026-10-25