Docs menuConnect your agent

Connect your agent

Flowproof plugs into the AI you already build with. In claude.ai, Claude Desktop or ChatGPT, sign in and press Allow. In Claude Code, Cursor or Codex, paste one snippet with an API key.

Every tool on one page

Flowproof connects through MCP, the standard way AI tools plug in extra abilities. You don’t need to know how it works: your AI learns the rest from Flowproof itself. The address is https://mcp.flowproof.dev/mcp.

There are two ways in. In claude.ai, Claude Desktop or ChatGPT you sign in and press Allow: no terminal, no API key. In a coding tool you paste one snippet that holds an API key. Either way you need a free account.

For the key, the dashboard’s Connect your agent page makes one and shows these same steps with it already filled in. Here, replace fp_YOUR_KEY with your key.

No terminal? Connect from claude.ai, Claude Desktop or ChatGPT

Start here if you use Claude or ChatGPT in the browser or the desktop app. You sign in with your Flowproof account, so there is no API key to make or keep safe.

  1. Open the connector settings. In claude.ai or Claude Desktop, open Settings, then Connectors. In ChatGPT, turn on Developer mode first (Settings, then Security and login), then open Plugins.
  2. Choose Add custom connector. In ChatGPT, press the plus button.
  3. Name it Flowproof and paste this address: https://mcp.flowproof.dev/mcp
  4. Add it, then connect it. Sign in with your Flowproof account when asked.
  5. Press Allow.

Then start a chat and ask it to test. The app now uses Flowproof as you. You can see it, and revoke it, under Connected apps on the Setup page.

Menu names change often, and some plans hide custom connectors: ChatGPT offers Developer mode on Plus, Pro, Business, Enterprise and Education, on the web, and on a team plan an owner may have to allow it first. Claude Code, Cursor and Codex don’t sign in like this. They use an API key, below.

What you see in claude.ai: a Flowproof card

When a run ends, or you ask for a report, apps that support it show a Flowproof card right in the chat. Apps that don’t, such as Claude Code in a terminal, get the same answer as plain text.

  • The grade. A stamp and a score, then the top fixes.
  • Get to A+. The steps from your grade to the top one. Each has a Do this button that asks your AI to do it.
  • Proven. What the run showed works, with “earlier run” on anything carried forward from one.
  • Open in dashboard for the full report.
  • Share. A public link to the score card: the grade, the fixes and what was tested. Never the test addresses, email contents or project name. Stop sharing from the card, or from the run in your dashboard, and the link stops working at once. You can also just ask your AI to share the report.

After cleanup, a second card, the receipt, says what was deleted and from where: “Deleted from DrawRight: 1 user, 1 profile.”

Chat apps often can’t drive a browser. When a step means using your app, your AI tells you what to click and you click. Flowproof doesn’t count your typing time against your app’s email speed.

Claude Code

Terminal

  1. Open a terminal in your project folder.
  2. Paste this command and press Enter.
Terminal
claude mcp add --transport http flowproof https://mcp.flowproof.dev/mcp --header "Authorization: Bearer fp_YOUR_KEY"

Check it worked. Start Claude Code and type /mcp: flowproof should say connected.

To use Flowproof in every project, not just this one, add --scope user after claude mcp add.

Cursor

Editor

  1. In your project, create a file called .cursor/mcp.json. If it already exists, add the flowproof entry inside its mcpServers.
  2. Paste this in and save.
.cursor/mcp.json
{
  "mcpServers": {
    "flowproof": {
      "url": "https://mcp.flowproof.dev/mcp",
      "headers": {
        "Authorization": "Bearer fp_YOUR_KEY"
      }
    }
  }
}

Check it worked. Open Cursor’s settings and find the MCP section: flowproof should be listed and switched on.

The file holds your key, so add .cursor/mcp.json to .gitignore. Or save it as ~/.cursor/mcp.json instead, to use Flowproof in every project.

Windsurf

Now called Devin Desktop

  1. In the Cascade panel, click the … menu at the top right, then “Open MCP config file”.
  2. Add the flowproof entry inside mcpServers (or paste the whole thing if the file is empty) and save.
mcp_config.json
{
  "mcpServers": {
    "flowproof": {
      "serverUrl": "https://mcp.flowproof.dev/mcp",
      "headers": {
        "Authorization": "Bearer fp_YOUR_KEY"
      }
    }
  }
}

Check it worked. Refresh the MCP list in Cascade: flowproof should be listed with its tools.

The file lives at ~/.config/devin/mcp_config.json (on Windows, %APPDATA%\devin\mcp_config.json). Installs from before the rename use ~/.codeium/windsurf/mcp_config.json. Opening it from Cascade finds the right one.

VS Code

With GitHub Copilot

  1. In your project, create a file called .vscode/mcp.json. VS Code’s file starts with servers, not mcpServers.
  2. Paste this in and save.
.vscode/mcp.json
{
  "servers": {
    "flowproof": {
      "type": "http",
      "url": "https://mcp.flowproof.dev/mcp",
      "headers": {
        "Authorization": "Bearer fp_YOUR_KEY"
      }
    }
  }
}

Check it worked. Run “MCP: List Servers” from the Command Palette: start flowproof if it isn’t running, then use Copilot Chat in Agent mode.

The file holds your key, so add .vscode/mcp.json to .gitignore if you commit the .vscode folder.

Codex

OpenAI’s Codex CLI, in the terminal

  1. Open ~/.codex/config.toml in your home folder (create it if it isn’t there).
  2. Paste this at the end and save.
~/.codex/config.toml
[mcp_servers.flowproof]
url = "https://mcp.flowproof.dev/mcp"
http_headers = { "Authorization" = "Bearer fp_YOUR_KEY" }

Check it worked. Run codex mcp list: flowproof should be in the list. Then start Codex as usual.

To keep the key out of the file, replace the http_headers line with bearer_token_env_var = "FLOWPROOF_API_KEY" and set that environment variable to your key.

A project can have its own .codex/config.toml too (trusted projects only). Keep that one out of git.

Claude Desktop

Chat app

  1. Install Node.js from nodejs.org if you don’t have it. Claude Desktop reaches Flowproof through a small bridge called mcp-remote, which needs it.
  2. In Claude Desktop, open Settings, then Developer, then Edit Config. That opens claude_desktop_config.json.
  3. Paste this in (or add the flowproof entry inside mcpServers) and save.
  4. Quit Claude Desktop completely and open it again.
claude_desktop_config.json
{
  "mcpServers": {
    "flowproof": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.flowproof.dev/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer fp_YOUR_KEY"
      }
    }
  }
}

Check it worked. Click the “+” at the bottom left of the message box and open Connectors: flowproof should be listed.

The easier way needs no key and no Node.js: open Settings, then Connectors, add a custom connector with https://mcp.flowproof.dev/mcp, sign in and press Allow. This config file is the API-key way, for a setup you keep in a file.

Write ${AUTH_HEADER} exactly as shown: the bridge fills it in from the env line, which keeps the space in “Bearer …” from being mangled on Windows.

Replit

Replit Agent, in the browser

  1. In Replit, open the MCP Servers settings pane and click “+ Add MCP server”.
  2. Name it Flowproof and paste the server URL.
  3. Open Advanced settings and add one header: name Authorization, value as below.
  4. Click “Test & save”.
Server URL
https://mcp.flowproof.dev/mcp
Authorization header value
Bearer fp_YOUR_KEY

Check it worked. Ask the Agent “What can the Flowproof tools do?”: it should list them.

Other tools

Any MCP client

  1. Flowproof is a remote MCP server (Streamable HTTP). Add it wherever your tool lists MCP servers, with the URL and header below.
  2. Most tools read this JSON. Some call the address serverUrl or httpUrl instead of url, or leave type out: check your tool’s docs.
mcp.json
{
  "mcpServers": {
    "flowproof": {
      "type": "http",
      "url": "https://mcp.flowproof.dev/mcp",
      "headers": {
        "Authorization": "Bearer fp_YOUR_KEY"
      }
    }
  }
}
Server URL
https://mcp.flowproof.dev/mcp
Authorization header value
Bearer fp_YOUR_KEY

Check it worked. Your tool’s list of MCP servers should show flowproof, with tools such as start_session and new_address.

Building in Lovable or Bolt?

Flowproof needs an agent that can run your app and sign up to it. Open your project’s code in one of the tools above and connect Flowproof there.

Then ask it to test

Once your tool shows Flowproof as connected, pick where your app is and paste a prompt into its chat.

  • My app is built. Your agent opens a test run, signs up with throwaway addresses, checks every email, and deletes the test users at the end.
  • I’m building my app. Your agent plans the emails your app needs (who gets each, why it matters, what it must have), saves them to the email map as planned, then builds and tests each one with you as you go.

Runs appear on the Runs page of your dashboard.

Fills in the prompts below. It stays on this page. Leave it empty and your agent will find the app itself.
  • Test signup and password reset

    The best place to start.

    Use Flowproof to test my app’s signup and password reset emails. Map every email my app sends first. Clean up the test users when you’re done, then show me the report.

  • Map all my emails

    See every email your app can send, and which are tested.

    Use Flowproof to map every email my app can send. Read the code to find them all, including emails that go to other people and ones sent on a schedule, and save the map. Then show me the list and which ones haven’t been tested yet.

  • Test an email one user sends another

    Invites, shares, comments, anything that emails someone else.

    Use Flowproof to test a flow in my app where one user’s action emails another user, like an invite or a share. Use a separate test address for each person, check the email reaches the right one and its link works for them, and clean up both test users when you’re done.

  • Check my emails before I launch

    The full pass before real users arrive.

    I’m about to launch my app. Use Flowproof to check every email it sends before real users see them: map them all, test as many as you can, and try the things that go wrong (a wrong code, a reset link used twice, signing up twice). Clean up the test users, then give me the report and a short list of what to fix first.

Keep every email to the bar

Paste these rules into the file your AI tool reads at the start of every session. From then on, whenever your agent adds or changes an email, it adds it to the email map, sends it through your real provider, includes a plain-text part, names your product in the subject and first line, adds the “didn’t ask for this?” line on security email, and tests it with Flowproof before calling the task done. Your agent can also fetch them itself: ask it to add Flowproof’s email rules.

Claude Code · Add this to CLAUDE.md at the project root (create the file if there is none). If it already has a Flowproof email section, replace it.

CLAUDE.md
<!-- flowproof:email-rules -->
## Emails: built and tested with Flowproof

This app’s emails are planned, built and tested with Flowproof (the `flowproof` MCP server). Whenever you add or change code that sends email:

- When you add or change an email, add it to the Flowproof email map with `save_email_map`, status `built`. If it is in the map as `planned`, save the same key as `built`.
- Send it through the app’s real email provider. Never leave a `console.log` stub, a fake transport or a TODO in a code path production runs.
- Include a plain-text part as well as the HTML.
- Name the product in the subject and in the first line.
- On security email (verification, sign-in links and codes, password resets), add a line for people who didn’t ask for it: “Didn’t ask for this? You can ignore this email.” On notices that a password, email address or sign-in changed, say what to do if it wasn’t them.
- Give each email what its kind must have: `plan_emails` lists it (a reset says how long the link lasts and works once; a failed payment shows the amount and links to update the card; an invite says who invited them to what).
- Before you call the task done, test the email with Flowproof: `whats_next` first (it says where the project stands and what to do), then `start_session`, `new_address` for each recipient, `mark_step`, trigger the email, `wait_for_email` with its `map_key`, use its link or code and `record_outcome`, then `end_session`. Tell the user the grade and what to fix.
- Re-test only the emails whose map entry changed in this task. The others keep their results.
- Never test with a real inbox: use only addresses from `new_address`, and open the session before creating any user.
- Build a `suggested` email only after the developer accepts it (`accept_suggestions` makes it `planned`). Every email that is not transactional has an unsubscribe link and a link to email preferences; marketing goes only to people who opted in.
<!-- /flowproof:email-rules -->

The Get started checklist

Your dashboard’s home page has a five-step checklist: create a key, connect your agent, run your first test, connect cleanup, and map your emails. Each step ticks itself from what has actually happened (a key your agent has used, a finished run, an armed cleanup connection, a saved email map), never from a button you click.

It hides itself once every step is done. To see it again, open your dashboard with the checklist showing.

If it doesn’t work

  • Your tool doesn’t list flowproof. Check the file is in the place the steps say and is still valid JSON (a missing comma between two servers is the usual culprit), then restart the tool.
  • It’s listed but says it can’t connect, or the key isn’t recognised. Check you replaced fp_YOUR_KEY with the whole key, including fp_, kept the word Bearer and the space after it, and that the key isn’t revoked on the Setup page.
  • Claude Desktop: “npx” not found. Install Node.js from nodejs.org, then quit and reopen Claude Desktop.
  • You lost the key. Keys are shown once and can’t be shown again. Revoke it and make a new one; it takes a click.
  • Connected, but the agent can’t test your app. It needs a running copy it can use: on your computer, a staging site or production. See the quickstart for more.