Quick start
- Go to the signup section on the home page and enter your email. You'll get a trial API key for this server (7 days or 100 requests, whichever comes first — no credit card).
- Copy the MCP config block shown after signup — it already has your key filled in.
- Paste it into your AI app's MCP settings (Claude, ChatGPT, or any MCP-compatible client).
- Replace
YOUR_FOLLOWUPBOSS_API_KEY_HEREin the config with your own Follow Up Boss API key (Follow Up Boss → Admin → API). - Restart or reconnect your AI app, then just ask it something — e.g. "show me my leads from this week."
Connecting your AI app
Clients that support remote MCP servers natively — Claude Code, ChatGPT, Cursor, and most others — take this config directly. Two headers do the work: x-api-key identifies you as a customer of this hosted server, and x-fub-api-key is your own Follow Up Boss credential, used only for your requests.
{
"mcpServers": {
"followupboss": {
"url": "https://YOUR-SERVER-URL/mcp",
"headers": {
"x-api-key": "YOUR_TRIAL_API_KEY",
"x-fub-api-key": "YOUR_FOLLOWUPBOSS_API_KEY"
}
}
}
}
Older SSE-only clients should point at /sse instead of /mcp, with the same two headers.
Using Claude Desktop? Its config file only accepts locally-run servers, not a raw URL — see the Claude Desktop section below instead of the block above.
Claude Desktop specifically
Claude Desktop's claude_desktop_config.json only validates locally-run (stdio) servers — command / args / env. A raw url + headers entry gets silently skipped with an error like "not a valid MCP server configuration." Use mcp-remote instead — a small bridge that runs locally via npx and forwards to this server over HTTP with your headers attached:
{
"mcpServers": {
"followupboss": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"https://YOUR-SERVER-URL/mcp",
"--header",
"x-api-key:${FUB_MCP_API_KEY}",
"--header",
"x-fub-api-key:${FUB_MCP_FUB_KEY}"
],
"env": {
"FUB_MCP_API_KEY": "YOUR_TRIAL_API_KEY",
"FUB_MCP_FUB_KEY": "YOUR_FOLLOWUPBOSS_API_KEY"
}
}
}
}
Edit the file at ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows) — merge this into any existing mcpServers key rather than replacing the whole file, since it likely has other settings in it already. Requires Node.js on your machine (npx ships with it). Fully quit and reopen Claude Desktop afterward — closing the window isn't enough.
Access modes
The underlying server can run in Safe Mode or Full Access. Safe Mode is the default and is recommended unless you specifically need to delete records through the AI.
| Capability | Safe Mode | Full Access |
|---|---|---|
| Read contacts, deals, tasks, calls, etc. | Yes | Yes |
| Create new records | Yes | Yes |
| Update existing records | Yes | Yes |
| Delete records | No | Yes |
| Tools available | 137 | 160 |
A handful of tools (webhooks, SMS logging, inbox apps) additionally require Follow Up Boss "registered system" credentials, regardless of mode — that's a Follow Up Boss platform restriction, not something this server controls.
Plans and usage limits
Every account — trial or active — has a request cap, separate from the per-minute rate limit below:
| Plan | Cap | Resets |
|---|---|---|
| Trial | 100 requests total | Never — fixed for the 7-day trial window |
| Active | 2,000 requests/month by default | Every 30 days from activation |
Once an active account's monthly cap is reached, requests return 402 until the next reset — or until the limit is raised. If your usage regularly exceeds the default, contact us to increase your account's limit.
Rate limits
Two layers of limits apply:
- This server limits each account to a default of 60 requests/minute with a burst allowance of 10 in a 5-second window, to keep the service stable for everyone.
- Follow Up Boss's own API enforces its own limits underneath: 250 requests/10s globally, 25/10s for person updates, 10/10s for notes. The underlying tool server automatically retries on HTTP 429 with backoff, up to 3 attempts.
If you're doing a bulk operation, prefer the bulkUpdatePeople convenience tool — it paces itself automatically to stay under FUB's per-endpoint limits.
Troubleshooting
- "Invalid api key" (403)
- The
x-api-keyheader doesn't match a known account, or has a typo. Re-copy it from your signup confirmation — it's shown only once. - "Your trial has expired" (402)
- Your 7-day trial window has ended. Contact us to move to an active account.
- "Your trial has reached its 100-request limit" (402)
- You've used all the requests included in your trial, even if the 7 days haven't passed yet. Contact us to move to an active account.
- "You've reached your plan's monthly limit of N requests" (402)
- Active accounts get 2,000 requests/month by default, resetting 30 days after activation. Contact us to raise your limit if you're hitting it regularly.
- "Missing FUB API key" (401)
- The request didn't include
x-fub-api-key. Check your client's config — this is separate from your trialx-api-key. - "Rate limit exceeded" (429)
- You've hit the per-account request limit. Wait for the number of seconds in the
Retry-Afterheader and try again. - My AI app doesn't see any tools
- Restart or fully reconnect the MCP client after adding the config. Double-check the config JSON is valid (no missing commas or brackets).
- "The following entries in claude_desktop_config.json are not valid MCP server configurations and were skipped"
- You used the
url+headersconfig in Claude Desktop, which it doesn't accept directly. See the Claude Desktop section for themcp-remotebridge config instead. - A tool call returns a Follow Up Boss error
- That's coming straight from the Follow Up Boss API — check that your FUB API key is valid and has the right permissions in Follow Up Boss → Admin → API.
FAQ
- Is my Follow Up Boss data safe?
- Your FUB API key is sent per-request to spin up a session scoped only to you; it isn't persisted in a database. Standard precautions still apply — treat your key like a password, and don't share your trial API key with anyone you don't want accessing your FUB account through it.
- Can the AI delete or change my data?
- Yes, in Full Access mode it can create, update, and delete records. Safe Mode (the default) blocks deletes. Most AI clients will confirm with you before a destructive action, but review suggested changes before approving them.
- Does this cost anything?
- Trials are free for 7 days or 100 requests, whichever comes first — no credit card required. Reach out to keep using it after your trial ends.
- Where are call recording URLs?
- Follow Up Boss masks
recordingUrlat the API level for every integration, not just this one — the API always returns a placeholder instead of the real link, and writing to it is a no-op. If you need call audio, capture it on the dialer side; call transcripts can still be stored viaupdateCall's note field. - What's MCP?
- Model Context Protocol — an open standard for connecting AI apps to external tools and data. modelcontextprotocol.io has the full spec.
Full tool reference
All 160 tools, grouped the way they're grouped in the underlying server. Full Access unlocks the delete tools; Safe Mode (default) skips them.
People / Contacts 8 tools
| Tool | What it does |
|---|---|
listPeople | Search and filter contacts extensively |
createPerson | Create a new contact |
getPerson | Get a contact by ID |
updatePerson | Update contact details, stage, tags, etc. |
deletePerson | Delete (trash) a contact |
checkDuplicate | Check if a contact exists by email or phone |
listUnclaimed | List unclaimed leads in ponds |
claimPerson | Claim an unclaimed lead |
Person Attachments 4 tools
| Tool | What it does |
|---|---|
createPersonAttachment | Attach a file to a contact |
getPersonAttachment | Get an attachment by ID |
updatePersonAttachment | Update an attachment |
deletePersonAttachment | Delete an attachment |
Relationships 5 tools
| Tool | What it does |
|---|---|
listRelationships | List relationships for a contact |
createRelationship | Create a relationship between two contacts |
getRelationship | Get a relationship by ID |
updateRelationship | Update a relationship |
deleteRelationship | Delete a relationship |
Identity 2 tools
| Tool | What it does |
|---|---|
getIdentity | Get account information for the API key |
getCurrentUser | Get the current authenticated user |
Notes 5 tools
| Tool | What it does |
|---|---|
listNotes | List notes, optionally filtered by personId |
createNote | Create a note on a contact |
getNote | Get a note by ID |
updateNote | Update a note |
deleteNote | Delete a note |
Deals 5 tools
| Tool | What it does |
|---|---|
listDeals | List deals with filtering |
createDeal | Create a deal |
getDeal | Get a deal by ID |
updateDeal | Update a deal |
deleteDeal | Delete a deal |
Pipelines 5 tools
| Tool | What it does |
|---|---|
listPipelines | List all pipelines |
createPipeline | Create a pipeline |
getPipeline | Get a pipeline by ID |
updatePipeline | Update a pipeline |
deletePipeline | Delete a pipeline |
Stages 5 tools
| Tool | What it does |
|---|---|
listStages | List all pipeline stages |
createStage | Create a stage |
getStage | Get a stage by ID |
updateStage | Update a stage |
deleteStage | Delete a stage |
Deal Attachments 4 tools
| Tool | What it does |
|---|---|
createDealAttachment | Attach a file to a deal |
getDealAttachment | Get an attachment by ID |
updateDealAttachment | Update an attachment |
deleteDealAttachment | Delete an attachment |
Deal Custom Fields 5 tools
| Tool | What it does |
|---|---|
listDealCustomFields | List deal custom fields |
createDealCustomField | Create a deal custom field |
getDealCustomField | Get a field by ID |
updateDealCustomField | Update a field |
deleteDealCustomField | Delete a field |
Tasks 5 tools
| Tool | What it does |
|---|---|
listTasks | List tasks |
createTask | Create a task |
getTask | Get a task by ID |
updateTask | Update a task |
deleteTask | Delete a task |
Appointments 5 tools
| Tool | What it does |
|---|---|
listAppointments | List appointments |
createAppointment | Create an appointment |
getAppointment | Get an appointment by ID |
updateAppointment | Update an appointment |
deleteAppointment | Delete an appointment |
Appointment Types 5 tools
| Tool | What it does |
|---|---|
listAppointmentTypes | List appointment types |
createAppointmentType | Create a type |
getAppointmentType | Get a type by ID |
updateAppointmentType | Update a type |
deleteAppointmentType | Delete a type |
Appointment Outcomes 5 tools
| Tool | What it does |
|---|---|
listAppointmentOutcomes | List outcomes |
createAppointmentOutcome | Create an outcome |
getAppointmentOutcome | Get an outcome by ID |
updateAppointmentOutcome | Update an outcome |
deleteAppointmentOutcome | Delete an outcome |
Calls 4 tools
| Tool | What it does |
|---|---|
listCalls | List call records |
createCall | Log a call |
getCall | Get a call by ID |
updateCall | Update a call record |
Text Messages 3 tools
| Tool | What it does |
|---|---|
listTextMessages | List text messages |
createTextMessage | Send a text message |
getTextMessage | Get a text message by ID |
Reactions 3 tools
| Tool | What it does |
|---|---|
getReactions | Get reactions for an item |
createReaction | Add a reaction |
deleteReaction | Remove a reaction |
Threaded Replies 1 tool
| Tool | What it does |
|---|---|
getThreadedReplies | Get threaded replies for an item |
Team Inboxes 1 tool
| Tool | What it does |
|---|---|
listTeamInboxes | List all team inboxes |
Inbox Apps 10 tools
| Tool | What it does |
|---|---|
inboxAppAddMessage | Add a message to a conversation |
inboxAppUpdateMessage | Update a message |
inboxAppAddNote | Add a note to a conversation |
inboxAppUpdateConversation | Update conversation status |
inboxAppGetParticipants | Get conversation participants |
inboxAppCreateParticipant | Add a participant |
inboxAppDeleteParticipant | Remove a participant |
inboxAppInstall | Install an inbox app |
inboxAppDeactivate | Deactivate the inbox app |
listInboxAppInstallations | List installations |
Email Templates 6 tools
| Tool | What it does |
|---|---|
listTemplates | List email templates |
createTemplate | Create an email template |
getTemplate | Get a template by ID |
updateTemplate | Update a template |
mergeTemplate | Merge template with contact data (mail merge) |
deleteTemplate | Delete a template |
Text Message Templates 6 tools
| Tool | What it does |
|---|---|
listTextMessageTemplates | List text message templates |
createTextMessageTemplate | Create a text message template |
getTextMessageTemplate | Get a template by ID |
updateTextMessageTemplate | Update a template |
mergeTextMessageTemplate | Merge template with contact data |
deleteTextMessageTemplate | Delete a template |
Email Marketing 5 tools
| Tool | What it does |
|---|---|
listEmEvents | List email marketing events |
createEmEvent | Create email marketing events |
listEmCampaigns | List email marketing campaigns |
createEmCampaign | Create a campaign |
updateEmCampaign | Update a campaign |
Smart Lists 2 tools
| Tool | What it does |
|---|---|
listSmartLists | List all smart lists |
getSmartList | Get a smart list by ID |
Action Plans 4 tools
| Tool | What it does |
|---|---|
listActionPlans | List all action plans |
listActionPlansPeople | List people in action plans |
addPersonToActionPlan | Add a contact to an action plan |
updateActionPlanPerson | Update action plan status for a contact |
Automations 6 tools
| Tool | What it does |
|---|---|
listAutomations | List all automations |
getAutomation | Get an automation by ID |
listAutomationsPeople | List people in automations |
getAutomationPerson | Get automation-person entry |
addPersonToAutomation | Add a contact to an automation |
updateAutomationPerson | Update automation status for a contact |
Custom Fields 5 tools
| Tool | What it does |
|---|---|
listCustomFields | List all custom fields |
createCustomField | Create a custom field |
getCustomField | Get a custom field by ID |
updateCustomField | Update a custom field |
deleteCustomField | Delete a custom field |
Users 3 tools
| Tool | What it does |
|---|---|
listUsers | List all users/agents |
getUser | Get a user by ID |
deleteUser | Delete a user |
Teams 5 tools
| Tool | What it does |
|---|---|
listTeams | List all teams |
createTeam | Create a team |
getTeam | Get a team by ID |
updateTeam | Update a team |
deleteTeam | Delete a team |
Groups 6 tools
| Tool | What it does |
|---|---|
listGroups | List all groups |
listRoundRobinGroups | List round robin groups |
createGroup | Create a group |
getGroup | Get a group by ID |
updateGroup | Update a group |
deleteGroup | Delete a group |
Ponds 5 tools
| Tool | What it does |
|---|---|
listPonds | List all ponds |
createPond | Create a pond |
getPond | Get a pond by ID |
updatePond | Update a pond |
deletePond | Delete a pond |
Webhooks 6 tools
| Tool | What it does |
|---|---|
listWebhooks | List all webhooks |
createWebhook | Create a webhook |
getWebhook | Get a webhook by ID |
updateWebhook | Update a webhook |
deleteWebhook | Delete a webhook |
getWebhookEvents | Get events for a webhook |
Events 3 tools
| Tool | What it does |
|---|---|
listEvents | List events with filtering by person, type, property |
createEvent | Create a new event (lead event, property inquiry, etc.) |
getEvent | Get a single event by ID |
Timeframes 1 tool
| Tool | What it does |
|---|---|
listTimeframes | List all timeframes |
Convenience Tools 5 tools
| Tool | What it does |
|---|---|
removeTagFromPerson | Remove a single tag without affecting others (handles read-modify-write internally) |
getPersonByEmail | Look up a person by email address |
searchPeopleByTag | Find all people with specific tags (comma-separated, OR logic) |
bulkUpdatePeople | Update multiple people at once with automatic rate limiting |
listAvailableTags | Discover all tags in your account by scanning contacts |
Meta Tools 2 tools
| Tool | What it does |
|---|---|
about | Author bio, related projects, contributors, "how to thank me" |
help | Usage tips, common tool examples, bug report links |