Spruce Health MCP server

Read Spruce Health contacts, conversations, messages, phone lines and team members (read-only). Hosted by usefulapi — connect from Claude, Cursor, or any MCP client.

Claude

  1. Open Settings → Connectors → Add custom connector
  2. Paste this URL:
    https://spruce-health.usefulapi.io/mcp
  3. Authenticate with Spruce Health when prompted

Cursor · VS Code · Windsurf · Cline

Add to your MCP config, then reload & authorize:

{
  "mcpServers": {
    "spruce-health": {
      "url": "https://spruce-health.usefulapi.io/mcp"
    }
  }
}
live27 toolsFree 100 tool calls / monthPro $9/mo · $90/yr

Tools 27

ToolTypeWhat it does
sprucehealth_get_organizationread
Get the organization
Your Spruce organization (id and name). The id is the owner/member id used by other objects. Good first call. GET /organization.
sprucehealth_list_membersread
List organization members
All members of the organization: teammates (name, email, admin, suspended), teams and the organization itself. Paged with hasMore/paginationToken; totalCount included. GET /organization/members.
sprucehealth_get_memberread
Get an organization member
One organization member (teammate, team or the organization) by id. GET /organization/members/{memberId}.
sprucehealth_list_team_membersread
List a team's members
The members of one team (team ids come from sprucehealth_list_members, type 'team'). Paged. GET /teams/{teamId}/members.
sprucehealth_list_contactsread
List contacts
Contacts of the organization (patients, professionals, clinics): name, date of birth, phones, emails, tags, custom fields, integration links. Paged with hasMore/paginationToken; totalCount included. Use sprucehealth_search_contacts to find someone. GET /contacts.
sprucehealth_search_contactsread
Search contacts
Find contacts by free text and/or filters (category, tags, name, phone, email, invite state, created time). Filters combine with AND; values inside one filter match ANY (tags can use all/none). Paged; totalCount with totalCountRelation (eq = exact, gte = lower bound). A read: POST /contacts/search changes nothing.
sprucehealth_get_contactread
Get a contact
One contact by Spruce contact id (entity_…): demographics, phones, emails, tags, custom and organization fields, integration links. GET /contacts/{contactId}.
sprucehealth_list_contact_conversationsread
List a contact's conversations
The conversations (secure, SMS/phone, email, fax…) associated with one contact. GET /contacts/{contactId}/conversations.
sprucehealth_list_contact_integration_linksread
List a contact's integration links
Links between a contact and external systems (Elation, Hint, athena, custom): type, external id, url. GET /contacts/{contactId}/integrationlinks.
sprucehealth_list_contact_tagsread
List contact tags
All contact tags of the organization. Paged with hasMore/paginationToken; totalCount included. GET /contacts/tags.
sprucehealth_list_contact_fieldsread
List organization contact fields
The organization-wide contact fields shown on every contact. Paged; totalCount included. GET /contacts/fields.
sprucehealth_list_conversationsread
List conversations
Conversations of the organization (title, type, tags, archived, assignee, participants, last message time), ordered by creation or last message. With start_from, only conversations whose ordering time is at or after it (useful for 'what changed since…'). Eventually consistent. Paged; give start_from OR pagination_token, not both. GET /conversations.
sprucehealth_get_conversationread
Get a conversation
One conversation by id (t_…). GET /conversations/{conversationId}.
sprucehealth_list_conversation_itemsread
List conversation messages
The items (messages, internal notes, calls, voicemails, faxes, attachments with short-lived signed URLs) in one conversation. Order newest_first (default) or oldest_first; start_from = only items created after that time. Paged with hasMore/paginationToken; totalCount is a best-effort count. GET /conversations/{conversationId}/items.
sprucehealth_get_conversation_itemread
Get a conversation message
One conversation item (message, note, call, voicemail…) by id (ti_…). GET /conversationItems/{conversationItemId}.
sprucehealth_list_read_receiptsread
List a message's read receipts
Who has read one conversation item and when they first read it (oldest first). GET /conversationItems/{conversationItemId}/readReceipts.
sprucehealth_get_transcriptionread
Get a call or voicemail transcription
The full transcription text and its summary (if any) for a transcription id (the transcriptionId on a call/voicemail attachment). Status pending/completed/failed/noSpeech. GET /transcriptions/{transcriptionId}.
sprucehealth_list_conversation_tagsread
List conversation tags
All conversation tags of the organization. Paged; totalCount included. GET /conversations/tags.
sprucehealth_list_conversation_scheduled_messagesread
List a conversation's scheduled messages
Messages scheduled to be sent later in one conversation (read only; nothing is sent or cancelled). GET /conversations/{conversationId}/scheduledmessages.
sprucehealth_list_scheduled_messagesread
List scheduled messages
All messages scheduled to be sent from the organization (read only). Paged with hasMore/paginationToken; totalCount included. GET /scheduledmessages.
sprucehealth_list_saved_messagesread
List saved messages
Saved message templates (private and organization-wide): title, text, internal/shared flags. Paged with hasMore/paginationToken. GET /savedmessages.
sprucehealth_list_internal_endpointsread
List internal endpoints
The organization's own channels: Spruce phone and fax numbers, email addresses and Spruce Links, with their owner and members. GET /internalendpoints.
sprucehealth_list_phone_linesread
List phone lines
All phone lines of the organization (id, name); totalCount included. GET /phonelines.
sprucehealth_get_phone_lineread
Get a phone line
One phone line by id (pd_…). GET /phonelines/{phonelineId}.
sprucehealth_usage_statusmeta
Usage status (free-tier meter)
Report the caller's current free-tier usage this month: calls used, monthly limit, remaining, and whether the cap is reached. Read-only; does not count against the meter.
sprucehealth_upgrademeta
Upgrade to Pro (unlimited)
Subscribe to the Pro plan for UNLIMITED Spruce Health tool calls (the free tier caps monthly usage). Choose monthly ($9/month) or yearly ($90/year — 2 months free) billing. Returns a Stripe Checkout link to open in your browser; after payment your account upgrades automatically. Does not count against the meter.
sprucehealth_cancel_subscriptionmeta
Cancel the Pro subscription
Cancel the caller's Spruce Health Pro subscription at the end of the paid period (no refund for the current period; unlimited calls continue until then, then the free tier applies). Requires confirm: true. Run sprucehealth_upgrade later to undo the cancel before the period ends. Does not count against the meter.

Pricing

PlanPriceLimit
Free$0100 tool calls / month
Proper organization$9/mo · $90/yrUnlimited

Pro covers this Spruce Health server only. Subscribe with sprucehealth_upgrade (it returns a Stripe Checkout link). Cancel any time with sprucehealth_cancel_subscription: Pro continues to the end of the paid period, with no refund for the current period, and running sprucehealth_upgrade before then undoes the cancel. Or write to [email protected].

This is a Model Context Protocol endpoint — meant to be connected from an AI client, not opened in a browser. An invalid_token response at the URL is the auth gate working as designed; clients authenticate automatically.

More Healthcare MCP servers

Canvas MedicalClinicalTrials.govClinikoDailyMedDrChronoFitbitHealth GorillaHealthieInfermedicaIntakeQMetriportNexHealthNookalNPPES NPI RegistryopenFDAOuraParticle HealthPhoton HealthRxNormVitalWHOOP

All Healthcare servers →