loading…
Search for a command to run...
loading…
MCP server for Follow Up Boss CRM with 157 tools covering 100% of the official API. Manage contacts, deals, pipeline, tasks, emails, smart lists, action plans,
MCP server for Follow Up Boss CRM with 157 tools covering 100% of the official API. Manage contacts, deals, pipeline, tasks, emails, smart lists, action plans, webhooks, and more through natural language.
Connect your Follow Up Boss CRM to Claude AI (or any MCP-compatible tool) with 157 tools covering all official API endpoints plus convenience tools for common workflows.
WARNING: This tool has full read AND write access to your Follow Up Boss account. It can create, update, and delete contacts, deals, tasks, notes, and other data in your CRM. Use at your own risk. We strongly recommend testing with a small number of records first, and always reviewing AI-suggested actions before confirming changes to your live data. The authors are not responsible for any data loss or unintended modifications to your FUB account.
This server acts as a bridge between your Follow Up Boss account and AI tools like Claude. Once connected, you can talk to Claude in plain English and it will read, create, update, and manage your FUB data directly.
What you can do:
Your API key is like a password that lets this server talk to your FUB account.
If you know git:
git clone https://github.com/mindwear-capitian/followupboss-mcp-server.git
cd followupboss-mcp-server
npm install
If you don't know git:
cd path/to/followupboss-mcp-server
npm install
npm run setup
This will:
.env file| Safe Mode (default) | Full Access | |
|---|---|---|
| Read data (contacts, deals, etc.) | Yes | Yes |
| Create new records | Yes | Yes |
| Update existing records | Yes | Yes |
| Delete records | No | Yes |
| Tools available | 134 | 157 |
Safe Mode is the default and recommended for most users. It gives you everything except the ability to delete data. You can switch modes at any time by changing FUB_SAFE_MODE in your .env file or AI tool config.
Before connecting to Claude, you can verify everything works:
npm test
You should see:
PASS Server starts and MCP handshake succeeds
PASS Lists 134 tools
PASS Read-only API call works (account: ok)
3 passed, 0 failed
If all 3 pass, you're good to go. If something fails, double-check your API key in the .env file.
Pick the tool you use below. Each one needs a small config file edit -- the setup wizard (npm run setup) will show you the exact paths and JSON for your computer, but here are the manual instructions for each.
What's a config file? It's a settings file that tells your AI tool where to find this server. You'll copy/paste a small block of text into it. That's it.
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"followupboss": {
"command": "node",
"args": ["/full/path/to/followupboss-mcp-server/index.js"],
"env": {
"FUB_API_KEY": "your_api_key_here"
}
}
}
}
/full/path/to/ with where you downloaded this projectyour_api_key_here with your FUB API keyRun this one command in your terminal (replace the path):
claude mcp add followupboss -- node /full/path/to/followupboss-mcp-server/index.js
Then restart Claude Code.
~/.cursor/mcp.json){
"mcpServers": {
"followupboss": {
"command": "node",
"args": ["/full/path/to/followupboss-mcp-server/index.js"],
"env": {
"FUB_API_KEY": "your_api_key_here"
}
}
}
}
~/.codeium/windsurf/mcp_config.json%USERPROFILE%\.codeium\windsurf\mcp_config.json{
"mcpServers": {
"followupboss": {
"command": "node",
"args": ["/full/path/to/followupboss-mcp-server/index.js"],
"env": {
"FUB_API_KEY": "your_api_key_here"
}
}
}
}
Requires VS Code 1.99 or newer and GitHub Copilot extension.
Cmd+Shift+P (Mac) or Ctrl+Shift+P (Windows){
"servers": {
"followupboss": {
"type": "stdio",
"command": "node",
"args": ["/full/path/to/followupboss-mcp-server/index.js"],
"env": {
"FUB_API_KEY": "your_api_key_here"
}
}
}
}
Note: VS Code uses
"servers"and requires"type": "stdio"-- slightly different from the other tools.
{
"mcpServers": {
"followupboss": {
"command": "node",
"args": ["/full/path/to/followupboss-mcp-server/index.js"],
"env": {
"FUB_API_KEY": "your_api_key_here"
}
}
}
}
This works with Google's Gemini CLI tool, not the Gemini website.
~/.gemini/settings.json%USERPROFILE%\.gemini\settings.json{
"mcpServers": {
"followupboss": {
"command": "node",
"args": ["/full/path/to/followupboss-mcp-server/index.js"],
"env": {
"FUB_API_KEY": "your_api_key_here"
}
}
}
}
.continue/mcpServers/ if it doesn't existfollowupboss.json inside it{
"mcpServers": {
"followupboss": {
"command": "node",
"args": ["/full/path/to/followupboss-mcp-server/index.js"],
"env": {
"FUB_API_KEY": "your_api_key_here"
}
}
}
}
These tools only support remote MCP servers (hosted on the internet), not local ones. This means the setup is more advanced -- you would need to host this server on a cloud service with HTTPS.
If there's enough interest, we may add a hosted version in the future. For now, we recommend using one of the tools listed above that support local MCP servers.
Once connected, just talk to your AI tool normally. Here are some things you can ask:
"Show me all my leads from this week"
"Create a task to follow up with John Smith tomorrow at 2pm"
"What deals do I have in my pipeline over $500k?"
"Add a note to Jane Doe's profile: Had a great phone call, she's interested in the Oak Park listing"
"List all my upcoming appointments for this week"
"Who are my uncontacted leads?"
"Move the Smith deal to the 'Under Contract' stage"
"Show me all contacts tagged 'hot lead'"
"Create a new email template called 'Open House Follow Up'"
"What action plans do I have set up?"
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
createPersonAttachment |
Attach a file to a contact |
getPersonAttachment |
Get an attachment by ID |
updatePersonAttachment |
Update an attachment |
deletePersonAttachment |
Delete an attachment |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
getIdentity |
Get account information for the API key |
getCurrentUser |
Get the current authenticated user |
| Tool | Description |
|---|---|
createNote |
Create a note on a contact |
getNote |
Get a note by ID |
updateNote |
Update a note |
deleteNote |
Delete a note |
| Tool | Description |
|---|---|
listCalls |
List call records |
createCall |
Log a call |
getCall |
Get a call by ID |
updateCall |
Update a call record |
| Tool | Description |
|---|---|
listTextMessages |
List text messages |
createTextMessage |
Send a text message |
getTextMessage |
Get a text message by ID |
| Tool | Description |
|---|---|
listUsers |
List all users/agents |
getUser |
Get a user by ID |
deleteUser |
Delete a user |
| Tool | Description |
|---|---|
listSmartLists |
List all smart lists |
getSmartList |
Get a smart list by ID |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
listEmEvents |
List email marketing events |
createEmEvent |
Create email marketing events |
listEmCampaigns |
List email marketing campaigns |
createEmCampaign |
Create a campaign |
updateEmCampaign |
Update a campaign |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
listStages |
List all pipeline stages |
createStage |
Create a stage |
getStage |
Get a stage by ID |
updateStage |
Update a stage |
deleteStage |
Delete a stage |
| Tool | Description |
|---|---|
listTasks |
List tasks |
createTask |
Create a task |
getTask |
Get a task by ID |
updateTask |
Update a task |
deleteTask |
Delete a task |
| Tool | Description |
|---|---|
listAppointments |
List appointments |
createAppointment |
Create an appointment |
getAppointment |
Get an appointment by ID |
updateAppointment |
Update an appointment |
deleteAppointment |
Delete an appointment |
| Tool | Description |
|---|---|
listAppointmentTypes |
List appointment types |
createAppointmentType |
Create a type |
getAppointmentType |
Get a type by ID |
updateAppointmentType |
Update a type |
deleteAppointmentType |
Delete a type |
| Tool | Description |
|---|---|
listAppointmentOutcomes |
List outcomes |
createAppointmentOutcome |
Create an outcome |
getAppointmentOutcome |
Get an outcome by ID |
updateAppointmentOutcome |
Update an outcome |
deleteAppointmentOutcome |
Delete an outcome |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
listPipelines |
List all pipelines |
createPipeline |
Create a pipeline |
getPipeline |
Get a pipeline by ID |
updatePipeline |
Update a pipeline |
deletePipeline |
Delete a pipeline |
| Tool | Description |
|---|---|
listDeals |
List deals with filtering |
createDeal |
Create a deal |
getDeal |
Get a deal by ID |
updateDeal |
Update a deal |
deleteDeal |
Delete a deal |
| Tool | Description |
|---|---|
createDealAttachment |
Attach a file to a deal |
getDealAttachment |
Get an attachment by ID |
updateDealAttachment |
Update an attachment |
deleteDealAttachment |
Delete an attachment |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
listTeams |
List all teams |
createTeam |
Create a team |
getTeam |
Get a team by ID |
updateTeam |
Update a team |
deleteTeam |
Delete a team |
| Tool | Description |
|---|---|
listTeamInboxes |
List all team inboxes |
| Tool | Description |
|---|---|
listPonds |
List all ponds |
createPond |
Create a pond |
getPond |
Get a pond by ID |
updatePond |
Update a pond |
deletePond |
Delete a pond |
| Tool | Description |
|---|---|
listTimeframes |
List all timeframes |
| Tool | Description |
|---|---|
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 |
| Tool | Description |
|---|---|
getReactions |
Get reactions for an item |
createReaction |
Add a reaction |
deleteReaction |
Remove a reaction |
| Tool | Description |
|---|---|
getThreadedReplies |
Get threaded replies for an item |
| Tool | Description |
|---|---|
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 |
The server automatically retries requests when FUB's rate limits are hit (HTTP 429). It reads the Retry-After header and backs off with increasing delays, up to 3 retries per request. FUB's limits are:
The bulkUpdatePeople tool also adds a built-in pause every 20 operations to stay under the PUT limit.
"Cannot connect" or "Connection refused"
node --version in your terminal (should show v18 or higher)npm install in the project folder"Invalid API key" or "401 Unauthorized"
npm run setup again to test your key"Tool not found" in Claude
Claude doesn't seem to know about FUB
Is my data safe?
Yes. This server runs entirely on your computer. Your API key stays in a local file on your machine and is never sent anywhere except directly to Follow Up Boss's official API. No data passes through any third-party servers.
Does this cost anything?
This server is free and open source. You just need a Follow Up Boss account with API access (included in most paid plans).
Can Claude modify my FUB data?
Yes, Claude can create, update, and delete records in your FUB account. Claude will typically confirm before making changes, especially for deletions. If you want read-only access, you can create a restricted API key in FUB.
What's MCP?
MCP (Model Context Protocol) is an open standard created by Anthropic that lets AI tools like Claude connect to external services. Think of it as a universal plug that lets Claude talk to your apps. Learn more about MCP.
Who made this?
Built by Ed Neuhaus, broker at Neuhaus Realty Group and creator of StaySTRA, both in Austin, TX. We use Follow Up Boss every day and built this to make our own workflow faster.
Contributions are welcome! Here's how:
git checkout -b my-featurenode -c index.js (syntax check)git commit -m "Add my feature"git push origin my-featurePlease keep the code style consistent and make sure all 157 tools continue to work.
MIT -- see LICENSE for details.
Built by Ed Neuhaus / StaySTRA
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"followupboss-mcp-server": {
"command": "npx",
"args": []
}
}
}