Windsurf · MCP

Cascade does the work.
A person signs it off.

Get the right person's approval before Cascade makes a change that matters, and keep a record of who allowed it. The step it pauses on is confirmed today by whoever is in the editor; one entry in its MCP config and it asks the person who should decide instead, and carries on when they answer.

No card required · Approvals on every plan · No token to paste

The situation

What happens when Windsurf needs a person today

Cascade asks the person in the editor

It stops before a command runs and asks whoever is looking at Windsurf. The person who should decide about a production change or a message to a customer usually is not.

The decision is gone when the session is

Every confirmation is a click in a panel. When the change is questioned later, there is no record of who allowed it or what they were shown.

The log says what ran, not who allowed it

When one step turns out to matter, the question is who said it could and what they were looking at. A session log was never built to answer that.

Setup

Connect Windsurf

Cascade asks a named person before it acts, and publishes what it builds to an address, not a file.

  1. 1

    Add it to ~/.codeium/windsurf/mcp_config.json

    {
      "mcpServers": {
        "deliverd": {
          "serverUrl": "https://deliverd.dev/api/mcp"
        }
      }
    }

    Keep any servers already listed there. The key is “serverUrl” — a plain “url” is ignored.

  2. 2

    Refresh the servers

    In Cascade's MCP panel, refresh, then approve the connection in your browser.

No token is written anywhere. Deliverd implements the MCP authorization spec, so the client registers itself and you approve it in a browser — and removing someone from your organisation cuts their connection off at once, rather than whenever a token happens to expire.

What you get

Once it is connected

Everything below is one call from Windsurf, over the connection you just made — the ask first, and publishing last.

One call to ask a person

request_approval, request_review or request_information over the connection above. The agent says what it wants to do, why, and what it affects, and the question goes to a named person — not to whoever is at the keyboard.

Decided wherever they are

They approve, correct a figure the agent marked as correctable, reject with a reason or ask the agent a question — on a page built for a phone, from an email link, or from a Slack or Teams card. A colleague can cover while they are away.

The agent carries on

The decision comes back as something the agent can branch on: poll get_approval, wait on a callback URL, or let the SDK block. Approved, it does the action. Rejected, it stops and knows why.

A check before it acts

Before a payment, a deployment or a message to a customer, check_gate declares the action. With no rules a named person decides every one; with rules, the routine cases are settled and the rest go to a person.

A record of who allowed what

Who was asked, what they were shown, what they decided and when — kept as the work happens, and exported as an evidence pack in JSON, CSV or PDF with a digest so an altered copy can be told apart.

And when there is a report, a URL instead of a file

publish_report puts the HTML the agent writes on an address behind your organisation's sign-in, versioned, with comments anchored to the passage they are about. One capability among the rest, over the same connection.

The approval email Sarah Chen receives — Claims Agent needs your approval: refund €1,240.00 to Northwind Ltd, medium risk, with a Review and decide button — and the approval page it opens on her phone, with the key factors, the refund's details and Reject and Approve buttons.
The ask is one tool call from Windsurf: request_approval over the connection above, answered on a page that works on a phone, with the decision back in Windsurf as soon as it is made. See how approvals work →

Questions

Windsurf and Deliverd.

Where does the config go?

~/.codeium/windsurf/mcp_config.json. Merge the entry into what is already there — replacing the file removes the other servers you had configured.

Why serverUrl rather than url?

Because that is the key Windsurf reads for a remote server. A plain “url” is silently ignored and the server never appears, which looks like an outage and is a typo.

Do I need a token?

No. Windsurf supports OAuth for remote servers: it registers itself and opens a browser for you to approve the connection. The config holds only an address.

What can Cascade do once it is connected?

Ask a named person for approval, a review or information it is missing, check a gate before a consequential action, and keep a task's objective and state across sessions — all over the same connection. It can also publish a report, update it in place, read reader comments and resolve them.

Let Windsurf act. Know who said it could.

One call to ask a person, answered where they are, and a record of who allowed what — from the tool you already have open.