notifly
Agent setup / Windsurf

Set up Notifly in Windsurf.

The fastest path: copy the sentence and paste it into Windsurf — it runs every step below itself. Or follow the steps by hand.

01 — Add the MCP server

No key goes into the MCP config — the server signs Windsurf in with OAuth 2.1.

  • mcp_config.json — open it from the Cascade panel: … (Actions) menu → Open MCP config file
  • Current docs (now published as Devin Desktop) place it at ~/.config/devin/mcp_config.json on macOS/Linux and %APPDATA%\devin\mcp_config.json on Windows
  • Installs still branded Windsurf use the legacy path ~/.codeium/windsurf/mcp_config.json (%USERPROFILE%\.codeium\windsurf\mcp_config.json on Windows): if that directory exists, write the config there instead
json — MCP config
{
  "mcpServers": {
    "notifly": {
      "serverUrl": "https://api.notifly.io/mcp"
    }
  }
}
02 — Sign in

Cascade supports OAuth for HTTP servers and opens the Notifly sign-in in the browser on first connect.

On the consent screen you choose what Windsurf may do; it can never exceed your own role.

Checked against Windsurf’s MCP documentation.

03 — Secret key and SDK

Your code authenticates with the environment’s secret key (https://app.notifly.io → choose the environment (Development or Production) in the sidebar → API Keys → Secret Keys). Keep it in a git-ignored .env as NOTIFLY_SECRET_KEY.

MCP tools

  • trigger_workflow

    Fire a workflow for a subscriber (the one write tool; off until an admin enables it)

  • list_workflows

    Search and page through workflows

  • get_workflow

    Fetch a single workflow's details

  • list_subscribers

    Search and page through subscribers

  • get_subscriber

    Fetch a single subscriber

  • list_topics

    Search and page through topics

  • list_notifications

    Read notification history

Server SDKs

Any other language calls the REST API directly — see the API reference.

04 — Verify

Run it from the project root: the first two lines load NOTIFLY_SECRET_KEY from .env and stop if it is empty, then the request prints HTTP 200 and a body containing totalCount. A 401 with the key loaded means the key is wrong or belongs to a different environment. Inside the agent, calling the list_workflows tool proves the MCP sign-in the same way.

bash — verify
if [ -f .env ]; then set -a; . ./.env; set +a; fi
: "${NOTIFLY_SECRET_KEY:?NOTIFLY_SECRET_KEY is not set: store it in .env first (step 1)}"
curl -sS -w "\nHTTP %{http_code}\n" -H "Authorization: ApiKey $NOTIFLY_SECRET_KEY" "https://api.notifly.io/v2/workflows?limit=1"

The agent reads notifly.io/agent-setup/prompt.md — plain markdown you can read too. Optional next step: to wire a Notifly agent into Slack, Microsoft Teams or another channel, follow notifly.io/agents.md.