APISign in

EngageCycle MCP server

AI assistants that support the Model Context Protocol (MCP) can look up a business's clients and proposals, make drafts, and send them after showing the person a preview. The server uses the same API keys, scopes, and rules as the REST API. For business owners, the help center explains it in Use EngageCycle from Claude or ChatGPT.

Server

Address: https://app.engagecycle.com/mcp

  • Streamable HTTP, without sessions: send each JSON-RPC message as its own POST. Other methods answer 405.
  • One message per request (batches are refused), at most 1 MB.
  • A request that carries an Origin header must come from EngageCycle's own address.
  • Each tool call has 30 seconds. Money is in cents.

Authentication

Send your API key as a bearer token with every request: Authorization: Bearer <your API key>. There is no separate sign-in: an owner makes the key in EngageCycle, in Integrations, API keys, and the key is shown once.

  • No key, or a revoked one: HTTP 401 with WWW-Authenticate: Bearer.
  • The key's scopes decide which tools work. A tool the key can't use answers with the error code missing_scope. To read: clients:read, proposals:read, catalog:read, campaigns:read, events:read. To also add clients and make and send proposals: clients:write, proposals:write, proposals:send.
  • The business's plan must include the API and MCP; otherwise every request answers not_on_plan.
  • Requests count against the same 120 a minute per key as the REST API.
  • It never returns signing links, even to a key with proposals:links, so a key for an assistant never needs that scope.

Tools

Every tool the server offers, in the order it lists them.

ToolWhat it doesScope it needsChanges data
search_clientsSearch clientsclients:readNo
get_clientGet a clientclients:readNo
create_clientAdd a clientclients:writeYes
update_clientChange a clientclients:writeYes
list_templatesList templatescatalog:readNo
list_presetsList presetscatalog:readNo
create_proposalMake a draft proposalproposals:writeYes
preview_proposalPreview a draftproposals:writeYes
send_proposalSend a previewed proposalproposals:sendYes
resend_proposal_linkResend a proposal's linkproposals:sendYes
extend_proposal_deadlineExtend a proposal's deadlineproposals:sendYes
get_proposalGet a proposalproposals:readNo
get_proposal_timelineA proposal's timelineevents:readNo
list_eventsList eventsevents:readNo
get_campaign_statusCampaign statuscampaigns:readNo
get_credit_balanceCredit balanceAny keyNo

Not covered yet: agreements and consents sent on their own, and walkthroughs. Their webhook events are sent as usual.

send_proposal needs the preview_id from a recent preview_proposal, and uses a credit the same as sending from EngageCycle.

Setup

Put your key where it says <your API key>. Revoke the key to disconnect the assistant at once.

Claude (custom connector)

In Claude, open Settings, Connectors, and Add custom connector. Name it EngageCycle, paste the address, and add a request header named Authorization. If your Claude account has no place for request headers, use the mcp-remote setup below in Claude Desktop instead.

URL: https://app.engagecycle.com/mcp
Request header: Authorization
Value: Bearer <your API key>

Claude Code

claude mcp add --transport http engagecycle https://app.engagecycle.com/mcp --header "Authorization: Bearer <your API key>"

Clients that take an address and headers

{
  "mcpServers": {
    "engagecycle": {
      "type": "http",
      "url": "https://app.engagecycle.com/mcp",
      "headers": {
        "Authorization": "Bearer <your API key>"
      }
    }
  }
}

Clients that only run local servers (mcp-remote)

The free mcp-remote bridge runs on your computer and needs Node.js. The key goes in env, which keeps the space in Bearer out of the arguments.

{
  "mcpServers": {
    "engagecycle": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]",
        "https://app.engagecycle.com/mcp",
        "--header",
        "Authorization:${ENGAGECYCLE_AUTH}"
      ],
      "env": {
        "ENGAGECYCLE_AUTH": "Bearer <your API key>"
      }
    }
  }
}