Model Context Protocol · membership ops
MCP tools for HVAC membership visit-compliance
Let your office agents pull the overdue list, read season completion %, batch-schedule PM visits into shoulder weeks, generate ACCA-guided checklists, and draft renewal invoices — without pretending AgreeKeep is your FSM or your warranty carrier.
Agent-readable index: /llms.txt · Markdown twin
Production status (honest)
- Streamable HTTP POST at
https://agreekeep.com/api/mcp— JSON-RPC 2.0 (initialize,tools/list,tools/call) and the legacy body. Responses areapplication/json. If a client accepts onlytext/event-stream, the server sends one SSE event and closes. GET with only that Accept returns 405 immediately — there is no held SSE session. - Auth: Bearer
ak_…org keys, or OAuth 2.1 authorization code + PKCE (/api/oauth/register,/api/oauth/authorize,/api/oauth/token) after you are logged into the shop. 401 includes RFC 9728WWW-Authenticate. - Pricing: MCP is included in Pro ($29/mo). Fair use 2,000/day soft, 3,000/day hard (HTTP 429). Free and the demo key are read-only, 40 calls/day. No separate metered price.
- Registry manifest at /server.json and Smithery card at
/.well-known/mcp/server-card.json. The official MCP Registry listing and the npm package are not published yet. Claude Desktop should use the stdio bridge until@agreekeep/mcp-bridgeis on npm. - No live OEM warranty, carrier claim, or refrigerant-cert tools — only your AgreeKeep roster and visit data.
What the server does
Overdue inbox
List agreements with PM visits past their spring/fall window — days overdue, bump counts, filters.
Season board
Season completion % and roster pagination so agents know where you stand before dispatch.
Batch schedule
Confirm-gated PM scheduling — dry-run plan first, then apply with a confirm token.
PM checklists
Generate tier-aware checklist instances guided by ACCA 4 QM domains for shop SOPs.
Renewals
Renewal queue plus confirm-gated renewal invoice drafts (draft/send flags; no processor lock-in).
Auth model
Two paths. API keys (Authorization: Bearer ak_…) are created in app settings and stay the primary path. OAuth 2.1 uses PKCE S256: register a client, send the user to /api/oauth/authorize (they log into the shop), then exchange the code at /api/oauth/token. Access tokens use the akat_ prefix. Scopes such as agreements:read and schedule:write still apply. A missing scope returns forbidden_scope.
Demo key ak_demo_agreekeep_mvp_key is on the seeded Demo HVAC org (Pro preview, not a Free shop). It can run the read workflow (overdue list, roster, one agreement, season completion, renewals due) up to 40 calls per UTC day. Schedule, invoice, create, mark complete, and sync return upgrade_required with /billing?plan=pro.
Tool catalog (12 tools)
Summaries match the live tools/list response — no fictional live integrations.
list_overdue_agreements— Use when you need memberships whose seasonal PM visit is past its spring or fall window. Do not use to schedule, invoice, or mark complete. Optional: season (spring|fall|current), as_of (YYYY-MM-DD), limit (1-100), cursor, include_bumped, min_days_overdue. Returns items and next_cursor. Free/demo keys may call this.schedule_pm_visits— Use to batch-place PM visits on the calendar for known agreement ids. Do not use to list who is overdue — call list_overdue_agreements first. Requires Pro. Required: agreement_ids, window (spring|fall), preferred_date_range {start, end}. Default is dry-run and returns confirm_token. Pass that token with dry_run false to apply. Send Idempotency-Key when retrying the apply. Does not dispatch a technician in Jobber or ServiceTitan.generate_pm_checklist— Use when a tech needs an ACCA 4 QM–guided checklist instance for one visit. Do not use as a certification or refrigerant-compliance record. Requires Pro. Required: agreement_id or visit_id. Creates a new instance; send Idempotency-Key so a retry does not duplicate it.invoice_membership_renewals— Use to draft renewal invoices for agreements due soon. Do not use to charge a card or to list the queue — call list_renewals_due first. Requires Pro. Optional: agreement_ids, due_within_days (default 30), send (draft vs sent flag). Default dry-run returns confirm_token. Nothing is charged. Send Idempotency-Key when applying.list_agreements— Use for a paginated membership roster. Do not use when you already have an agreement_id — call get_agreement. Optional: status, tier_id, query (customer name), limit (1-100), cursor. Returns items and next_cursor. Free/demo keys may call this.get_agreement— Use for one membership: customer, equipment, visits, tier. Do not use to scan the shop — call list_agreements. Required: agreement_id. Free/demo keys may call this.create_agreement— Use to add a membership and due-visit placeholders. Do not use to update an existing agreement. Requires Pro. Required: customer {name}, tier_id, term_start (YYYY-MM-DD). dry_run true returns confirm_token and does not write. Send Idempotency-Key on the write so a retry does not create a second agreement.mark_visit_complete— Use when a PM visit is done. Do not use to cancel or bump — call mark_visit_status. Requires Pro. Required: visit_id. Optional: completed_at, tech_id, findings, prebook_opposite_season (default true). Repeating the same visit stays complete and does not duplicate the opposite-season stub. Send Idempotency-Key on retries.get_season_completion— Use for season completion percent and due/scheduled/complete/overdue counts. Do not use for the customer-level overdue list. Required: season (spring|fall). Optional: year. Free/demo keys may call this.sync_from_jobber— Use only to preview Jobber candidates that still need a human confirm in the AgreeKeep UI. Do not use to write back to Jobber or to activate agreements. Requires Pro. MVP stub: no destructive Jobber writes. Default dry-run returns confirm_token. Send Idempotency-Key when confirming.MVP stub — preview only.list_renewals_due— Use for agreements whose term ends soon or whose payment method failed. Do not use to create invoices — call invoice_membership_renewals after you have ids. Optional: within_days (default 30), include_failed_payments, limit, cursor. Free/demo keys may call this.mark_visit_status— Use to set a visit to missed, forfeited, rescheduled, bumped, snoozed, due, or scheduled. Do not use to mark the work done — call mark_visit_complete. Requires Pro. Required: visit_id, status. Optional: reason, new_date, snooze_until. Bump count increments only the first time a visit becomes bumped. Send Idempotency-Key on retries.
Cursor — mcp.json
Paste into your Cursor MCP config. Replace the key with an org API key. The demo key is read-only. If your Cursor build does not support HTTP MCP yet, use the stdio bridge.
{
"mcpServers": {
"agreekeep": {
"url": "https://agreekeep.com/api/mcp",
"headers": {
"Authorization": "Bearer ak_YOUR_ORG_KEY"
}
}
}
}Claude Desktop
Claude Desktop expects stdio. The bridge package is not on npm yet — run it from this repo's packages/agreekeep-mcp-bridge until @agreekeep/mcp-bridge is published.
{
"mcpServers": {
"agreekeep": {
"command": "npx",
"args": ["-y", "@agreekeep/mcp-bridge@0.3.0"],
"env": {
"AGREEKEEP_API_KEY": "ak_YOUR_ORG_KEY"
}
}
}
}ChatGPT
In a ChatGPT developer-mode or custom connector that accepts a remote MCP URL, use https://agreekeep.com/api/mcp with header Authorization: Bearer ak_…. The same fair-use limits and Pro gate apply. There is no separate ChatGPT package to install.
Rate limits, retries, field work
- Pro fair use: soft warning at 2,000 calls per UTC day, hard stop at 3,000 (HTTP 429 and JSON-RPC
-32029). Free/demo hard stop is 40. - Mutating tools accept
Idempotency-Key(header oridempotency_keyargument). A retry with the same key replays the stored result. Confirm-gated tools still dry-run first. - Always dry-run confirm-gated tools (
schedule_pm_visits,invoice_membership_renewals,create_agreement,sync_from_jobber) before applying tokens in production automations. - Membership is a service contract/plan with defined included tasks—not a manufacturer warranty or insurance.
- Guidance for shop SOPs—not ACCA certification, not legal advice, not a substitute for licensed tech judgment.
- AgreeKeep does not provide legal advice, E&O coverage, or a warranty on HVAC workmanship. Licensed tech judgment stays with your shop.