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
Originheader 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.
| Tool | What it does | Scope it needs | Changes data |
|---|---|---|---|
search_clients | Search clients | clients:read | No |
get_client | Get a client | clients:read | No |
create_client | Add a client | clients:write | Yes |
update_client | Change a client | clients:write | Yes |
list_templates | List templates | catalog:read | No |
list_presets | List presets | catalog:read | No |
create_proposal | Make a draft proposal | proposals:write | Yes |
preview_proposal | Preview a draft | proposals:write | Yes |
send_proposal | Send a previewed proposal | proposals:send | Yes |
resend_proposal_link | Resend a proposal's link | proposals:send | Yes |
extend_proposal_deadline | Extend a proposal's deadline | proposals:send | Yes |
get_proposal | Get a proposal | proposals:read | No |
get_proposal_timeline | A proposal's timeline | events:read | No |
list_events | List events | events:read | No |
get_campaign_status | Campaign status | campaigns:read | No |
get_credit_balance | Credit balance | Any key | No |
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>"
}
}
}
}