wealthbox-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@wealthbox-mcp list my recent contacts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
wealthbox-mcp
A Model Context Protocol (MCP) server that exposes the Wealthbox CRM API to MCP-enabled clients (e.g., Claude Desktop).
Wealthbox API docs: https://dev.wealthbox.com/
Requirements
Node.js 18+ (uses global fetch)
A Wealthbox API Access Token (Personal access token)
Installation
Global install:
npm i -g wealthbox-mcpLocal (from source):
npm install
npm run buildConfiguration
Provide your Wealthbox token via environment variable or a local file:
WEALTHBOX_TOKEN(required): your Wealthbox API access token; sent asACCESS_TOKENheader per docsWEALTHBOX_API_BASE_URL(optional): defaults tohttps://api.crmworkspace.comOptional local file fallback:
wealthbox_key.txt(first line)
Example (stdio run):
WEALTHBOX_TOKEN=your_token_here wealthbox-mcp
# or if running from source
WEALTHBOX_TOKEN=your_token_here node dist/index.jsUsing with Claude (MCP)
Add to your Claude Desktop config (platform-specific path). Minimal example:
{
"mcpServers": {
"wealthbox": {
"command": "wealthbox-mcp",
"env": {
"WEALTHBOX_TOKEN": "YOUR_API_TOKEN"
}
}
}
}After starting Claude, you can ask it to list tools and call them. Example prompts:
"List all MCP tools from the wealthbox server."
"Call the wealthbox.health tool and show the full structured JSON."
"Call the wealthbox.getMe tool and print the full structured JSON."
Tools Overview
Core tools map to Wealthbox REST endpoints. Many create/update tools accept explicit fields and also an optional raw body that overrides field parameters when provided.
Health and basics
wealthbox.health– GET/v1/meand return ok + profilewealthbox.getMe– GET/v1/mewealthbox.listUsers– GET/v1/userswealthbox.listTeams– GET/v1/teamswealthbox.request– Generic caller:{ method, path, body?, query? }
Contacts
wealthbox.contacts.list– GET/v1/contactswealthbox.contacts.get– GET/v1/contacts/{id}wealthbox.contacts.create– POST/v1/contactswealthbox.contacts.update– PUT/v1/contacts/{id}wealthbox.contacts.delete– DELETE/v1/contacts/{id}
Tasks
wealthbox.tasks.list– GET/v1/taskswealthbox.tasks.get– GET/v1/tasks/{id}wealthbox.tasks.create– POST/v1/taskswealthbox.tasks.update– PUT/v1/tasks/{id}wealthbox.tasks.delete– DELETE/v1/tasks/{id}
Events
wealthbox.events.list– GET/v1/eventswealthbox.events.get– GET/v1/events/{id}wealthbox.events.create– POST/v1/eventswealthbox.events.update– PUT/v1/events/{id}wealthbox.events.delete– DELETE/v1/events/{id}
Notes
wealthbox.notes.list– GET/v1/noteswealthbox.notes.get– GET/v1/notes/{id}wealthbox.notes.create– POST/v1/noteswealthbox.notes.update– PUT/v1/notes/{id}
Opportunities
wealthbox.opportunities.list– GET/v1/opportunitieswealthbox.opportunities.get– GET/v1/opportunities/{id}wealthbox.opportunities.create– POST/v1/opportunitieswealthbox.opportunities.update– PUT/v1/opportunities/{id}wealthbox.opportunities.delete– DELETE/v1/opportunities/{id}
Projects
wealthbox.projects.list– GET/v1/projectswealthbox.projects.get– GET/v1/projects/{id}wealthbox.projects.create– POST/v1/projectswealthbox.projects.update– PUT/v1/projects/{id}wealthbox.projects.delete– DELETE/v1/projects/{id}
Comments & Activity Stream
wealthbox.comments.list– GET/v1/comments{?resource_id,resource_type,updated_since,updated_before}wealthbox.activityStream.list– GET/v1/activity_stream
Metadata & Categories
wealthbox.userGroups.list– GET/v1/user_groupswealthbox.tags.list– GET/v1/tags{?document_type}(document_type:ContactorNote)wealthbox.categories.list– GET/v1/categories/{type}where type ∈tags|custom_fields|opportunity_stages|opportunity_pipelines|contact_types|contact_sources|task_categories|event_categories|file_categories|investment_objectives|financial_account_types|email_types|phone_types|address_types|website_types|contact_roleswealthbox.customFields.list– GET/v1/custom_fieldswealthbox.contactRoles.list– GET/v1/contact_roles
Workflows
wealthbox.workflows.list– GET/v1/workflowswealthbox.workflows.get– GET/v1/workflows/{id}wealthbox.workflows.create– POST/v1/workflowswealthbox.workflows.delete– DELETE/v1/workflows/{id}wealthbox.workflowTemplates.list– GET/v1/workflow_templateswealthbox.workflowTemplates.get– GET/v1/workflow_templates/{id}wealthbox.workflowSteps.complete– POST/v1/workflow_steps/{id}/completewealthbox.workflowSteps.revert– POST/v1/workflow_steps/{id}/revert
Households
wealthbox.households.addMember– POST/v1/households/{household_id}/memberswealthbox.households.deleteMember– DELETE/v1/households/{household_id}/members/{id}
Parameter Hints (selected)
Contacts list (query)
{
"query": {
"name": "string",
"email": "string",
"phone": "string",
"contact_type": "string",
"id": 123,
"active": true,
"tags": ["VIP", "Newsletter"],
"type": "person",
"page": 1,
"per_page": 5
}
}Example: { "query": { "name": "John Smith", "per_page": 10 } }
Notes
// wealthbox.notes.create
{
"content": "Updated with Claude via Wealthbox MCP",
"linked_to": [{ "id": 12345, "type": "Contact" }]
}
// wealthbox.notes.update
{ "id": 211578273, "content": "New contents" }Tasks
// wealthbox.tasks.create
{ "title": "Call client", "due_date": "2025-10-04", "assigned_to_user_id": 123 }Contacts
// wealthbox.contacts.create
{ "first_name": "Ada", "last_name": "Lovelace", "emails": [{ "address": "ada@example.com", "type": "Work" }] }Households
// wealthbox.households.addMember
{ "household_id": 1, "id": 2, "title": "Head" }Tags/Categories
// wealthbox.tags.list
{ "document_type": "Contact" }
// wealthbox.categories.list
{ "type": "contact_sources" }Security
Do not commit your token. The token is loaded from
WEALTHBOX_TOKENor a local file (wealthbox_key.txt) which is ignored by git and npm.The server uses HTTPS to talk to Wealthbox’s API endpoint
https://api.crmworkspace.com.
Development
Run locally (stdio):
npm install
npm run build
WEALTHBOX_TOKEN=$(cat wealthbox_key.txt) node dist/index.jsLicense
MIT
Acknowledgements
Built on the TypeScript MCP SDK. See the Wealthbox API docs for full parameter and response details: https://dev.wealthbox.com/
Available Tools
51 toolswealthbox.activityStream.listC
Retrieve activity stream. Query params: updated_since, updated_before, page, per_page.
Inputs: query.
wealthbox.categories.listC
List members of a customizable category
Inputs: type (required).
wealthbox.comments.listC
List comments (optionally by resource). Query params: resource_id, resource_type, updated_since, updated_before, page, per_page.
Inputs: page, per_page, resource_id, resource_type, +2 more.
wealthbox.contactRoles.listB
List contact roles
Inputs: no named parameters.
wealthbox.contacts.createC
Create contact. Example: {"first_name":"Ada","last_name":"Lovelace"}. You can also provide a raw body.
Inputs: body, tags, type, emails, +4 more.
wealthbox.contacts.deleteC
Delete contact
Inputs: id (required).
wealthbox.contacts.getB
Get contact by id
Inputs: id (required).
wealthbox.contacts.listB
List contacts. Query params: name, email, phone, contact_type, id, active, tags[], type (person|household|organization|trust), page, per_page. Example: {"query":{"name":"John","per_page":10}}
Inputs: query.
wealthbox.contacts.updateA
Update contact. Provide id and changed fields. You can also pass raw body.
Inputs: id (required), body, tags, type, +5 more.
wealthbox.customFields.listA
List custom fields
Inputs: no named parameters.
wealthbox.events.createB
Create event. Example: {"title":"Review","starts_at":"2025-10-04 10:00","ends_at":"2025-10-04 11:00"}
Inputs: body, title, ends_at, location, +3 more.
wealthbox.events.deleteD
Delete event
Inputs: id (required).
wealthbox.events.getB
Get event by id
Inputs: id (required).
wealthbox.events.listC
List events. Query params: title, category_id, starts_after, starts_before, ends_after, ends_before, updated_since, updated_before, page, per_page.
Inputs: query.
wealthbox.events.updateB
Update event by id. You can also pass raw body.
Inputs: id (required), body, title, ends_at, +4 more.
wealthbox.getMeA
Retrieve login profile information for the authenticated user
Inputs: no named parameters.
wealthbox.healthA
Health check that hits /v1/me to verify token and connectivity
Inputs: no named parameters.
wealthbox.households.addMemberA
Add member to a household. Provide household_id and either id+title or raw body.
Inputs: household_id (required), id, body, title.
wealthbox.households.deleteMemberB
Delete member from a household
Inputs: id (required), household_id (required).
wealthbox.listTeamsA
List all teams in the authenticated account
Inputs: no named parameters.
wealthbox.listUsersA
List all users accessible to the authenticated account
Inputs: no named parameters.
wealthbox.notes.createA
Create note. Example: {"content": "Note text", "linked_to": [{"id": 12345, "type": "Contact"}]}
Inputs: body, content, linked_to.
wealthbox.notes.getB
Get note by id
Inputs: id (required).
wealthbox.notes.listC
List notes. Query params: updated_since, updated_before, page, per_page.
Inputs: query.
wealthbox.notes.updateB
Update note content by id. You can pass {content} directly, or a raw body.
Inputs: id (required), body, content.
wealthbox.opportunities.createC
Create opportunity. Example: {"name":"New deal","pipeline_id":1,"stage_id":2,"amount":10000}
Inputs: body, name, amount, stage_id, +4 more.
wealthbox.opportunities.deleteC
Delete opportunity
Inputs: id (required).
wealthbox.opportunities.getB
Get opportunity by id
Inputs: id (required).
wealthbox.opportunities.listB
List opportunities. Query params: name, pipeline_id, stage_id, amount_min, amount_max, close_after, close_before, updated_since, updated_before, page, per_page.
Inputs: query.
wealthbox.opportunities.updateC
Update opportunity by id. You can also pass raw body.
Inputs: id (required), body, name, amount, +5 more.
wealthbox.projects.createC
Create project. Example: {"name":"Onboarding","description":"..."}
Inputs: body, name, status, due_date, +1 more.
wealthbox.projects.deleteC
Delete project
Inputs: id (required).
wealthbox.projects.getC
Get project by id
Inputs: id (required).
wealthbox.projects.listB
List projects. Query params: name, status, due_after, due_before, updated_since, updated_before, page, per_page.
Inputs: query.
wealthbox.projects.updateC
Update project by id. You can also pass raw body.
Inputs: id (required), body, name, status, +2 more.
wealthbox.requestC
Generic Wealthbox API request tool supporting method, path, body, and query
Inputs: path (required), method (required), body, query.
wealthbox.tags.listB
List tags (optionally by document_type)
Inputs: document_type.
wealthbox.tasks.createB
Create task. Example: {"title":"Call client","due_date":"2025-10-04"}. You can also provide a raw body.
Inputs: body, title, due_date, category_id, +3 more.
wealthbox.tasks.deleteC
Delete task
Inputs: id (required).
wealthbox.tasks.getB
Get task by id
Inputs: id (required).
wealthbox.tasks.listB
List tasks. Query params: title, assigned_to_user_id, assigned_to_team_id, category_id, completed (boolean), due_date (YYYY-MM-DD), updated_since, updated_before, page, per_page.
Inputs: query.
wealthbox.tasks.updateB
Update task by id. You can also pass raw body.
Inputs: id (required), body, title, due_date, +4 more.
wealthbox.userGroups.listB
List user groups
Inputs: no named parameters.
wealthbox.workflows.createD
Create workflow
Inputs: body (required).
wealthbox.workflows.deleteC
Delete workflow
Inputs: id (required).
wealthbox.workflows.getB
Get workflow by id
Inputs: id (required).
wealthbox.workflows.listB
List workflows. Query params: status, template_id, updated_since, updated_before, page, per_page.
Inputs: query.
wealthbox.workflowSteps.completeC
Complete a workflow step
Inputs: id (required).
wealthbox.workflowSteps.revertC
Revert a workflow step
Inputs: id (required).
wealthbox.workflowTemplates.getB
Get workflow template by id
Inputs: id (required).
wealthbox.workflowTemplates.listB
List workflow templates. Query params: page, per_page.
Inputs: query.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 51 tools
Each tool targets a distinct resource-action pair, with standard CRUD verbs and clear resource prefixes. The only potential overlap is between health and getMe, but their descriptions clearly differentiate a connectivity check from profile retrieval. The generic request tool does not create ambiguity as it serves as a catch-all.
The vast majority of tools follow the wealthbox.<resource>.<action> pattern with consistent snake_case CRUD verbs. Minor deviations include wealthbox.getMe, listUsers, listTeams, and request, plus camelCase actions like addMember/deleteMember, which break the pattern slightly but remain predictable.
With 51 tools, this server is clearly on the heavy side, but the count is justified by the broad CRM domain covering over 10 entities with full CRUD operations. It may be overwhelming for agents, yet each tool serves a distinct purpose and no redundant tools exist.
Core entities (contacts, tasks, events, opportunities, projects) have complete CRUD coverage. Minor gaps exist, such as missing delete for notes, missing update for workflows, and limited operations for comments and templates, but these can be worked around with the generic request tool and do not severely hinder common workflows.
Related MCP Connectors
Native MCP access to CRM contacts, organizations, deals and tasks with user permissions.
API-first CRM for LLMs - contacts, companies, deals and activities over a native MCP server.
MCP server for Getfly CRM — customers, opportunities, orders, tickets and tasks.
Cross-product MCP server for CRM, LeadKit, ProjectKit, Bookio. 10 action types, MIT open spec.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceExposes CRM operations as MCP tools, enabling agents to search contacts, retrieve contact records, list appointments, log notes, and create new leads.-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to list customer accounts, retrieve event timelines, get next-action recommendations, and push tasks to a CRM.MIT

Ridian MCP Serviceofficial
AlicenseNot gradedqualityCmaintenanceEnables authorized users to manage calendars, availability, tasks, contacts, sync operations, and Agent Mailbox email tools through an OAuth-scoped MCP connection.MIT- FlicenseNot gradedqualityAmaintenanceEnables MCP-capable clients to browse, search, and manage projects, todos, messages, card tables, documents, uploads, comments, events, and webhooks through OAuth-authenticated API calls.-