Spruce Health MCP by usefulapi
Read Spruce Health contacts, conversations, messages, phone lines and team members (read-only).
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (12)
- LOWin sprucehealth_list_contact_conversations
- LOWin sprucehealth_list_contact_integration_links
- LOWin sprucehealth_list_contact_fields
- LOWin sprucehealth_list_conversations
- LOWin sprucehealth_list_conversation_items
- LOWin sprucehealth_get_conversation_item
- LOWin sprucehealth_list_read_receipts
- LOWin sprucehealth_list_conversation_tags
- LOWin sprucehealth_list_conversation_scheduled_messages
- LOWin sprucehealth_list_scheduled_messages
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"spruce-health": {
"url": "https://spruce-health.usefulapi.io/mcp"
}
}
}Remote-Endpunkte
https://spruce-health.usefulapi.io/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (24)
🟢sprucehealth_get_organization
Your Spruce organization (id and name). The id is the owner/member id used by other objects. Good first call. GET /organization.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_members(page_size, pagination_token)
All members of the organization: teammates (name, email, admin, suspended), teams and the organization itself. Paged with hasMore/paginationToken; totalCount included. GET /organization/members.
Eingabe-Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Results per page (2-500). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 2,
"maximum": 500
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_get_member(member_id)
One organization member (teammate, team or the organization) by id. GET /organization/members/{memberId}.
Eingabe-Schema
{
"type": "object",
"properties": {
"member_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The member id (e.g. \"entity_0D4QABCC06000\")."
}
},
"required": [
"member_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_team_members(team_id, page_size, pagination_token)
The members of one team (team ids come from sprucehealth_list_members, type 'team'). Paged. GET /teams/{teamId}/members.
Eingabe-Schema
{
"type": "object",
"properties": {
"team_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The team id (e.g. \"entity_0D4QABCC06000\")."
},
"page_size": {
"description": "Results per page (1-500). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"required": [
"team_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_contacts(page_size, pagination_token)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Results per page (1-500). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_search_contacts(free_text, categories, tags, tags_match, given_name, ...)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"free_text": {
"description": "Free-text query (name, phone, email…).",
"type": "string",
"maxLength": 500
},
"categories": {
"description": "Contact categories to include.",
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"enum": [
"patient",
"professional",
"clinic",
"unknown"
]
}
},
"tags": {
"description": "Contact tag text values (the `value` of a tag from sprucehealth_list_contact_tags).",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"tags_match": {
"description": "How the tags combine: any (default), all, or none (exclude).",
"type": "string",
"enum": [
"any",
"all",
"none"
]
},
"given_name": {
"description": "Given (first) name.",
"type": "string",
"maxLength": 200
},
"family_name": {
"description": "Family (last) name.",
"type": "string",
"maxLength": 200
},
"phone_numbers": {
"description": "Phone numbers, e.g. 2065551234 or +12065551234.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 40
}
},
"email_addresses": {
"description": "Email addresses.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 320,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
}
},
"invite_states": {
"description": "Spruce account/invite state.",
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"enum": [
"has_account",
"invited",
"not_invited"
]
}
},
"created_from": {
"type": "string",
"description": "Only contacts added at or after this time (RFC 3339 with zone)."
},
"created_to": {
"type": "string",
"description": "Only contacts added at or before this time (RFC 3339 with zone)."
},
"page_size": {
"description": "Results per page (1-500). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_get_contact(contact_id)
One contact by Spruce contact id (entity_…): demographics, phones, emails, tags, custom and organization fields, integration links. GET /contacts/{contactId}.
Eingabe-Schema
{
"type": "object",
"properties": {
"contact_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The contact id (e.g. \"entity_0E5QDGJC03000\")."
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_contact_conversations(contact_id)
The conversations (secure, SMS/phone, email, fax…) associated with one contact. GET /contacts/{contactId}/conversations.
Eingabe-Schema
{
"type": "object",
"properties": {
"contact_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The contact id (e.g. \"entity_0E5QDGJC03000\")."
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_contact_integration_links(contact_id)
Links between a contact and external systems (Elation, Hint, athena, custom): type, external id, url. GET /contacts/{contactId}/integrationlinks.
Eingabe-Schema
{
"type": "object",
"properties": {
"contact_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The contact id (e.g. \"entity_0E5QDGJC03000\")."
}
},
"required": [
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_contact_tags(page_size, pagination_token)
All contact tags of the organization. Paged with hasMore/paginationToken; totalCount included. GET /contacts/tags.
Eingabe-Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Results per page (1-500). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_contact_fields(page_size, pagination_token)
The organization-wide contact fields shown on every contact. Paged; totalCount included. GET /contacts/fields.
Eingabe-Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Results per page (1-500). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_conversations(order_by, start_from, page_size, pagination_token)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"order_by": {
"description": "Order by creation time or last message time (default last_message).",
"type": "string",
"enum": [
"created",
"last_message"
]
},
"start_from": {
"type": "string",
"description": "Only conversations whose ordering time is at or after this RFC 3339 date-time (with zone)."
},
"page_size": {
"description": "Results per page (1-200). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_get_conversation(conversation_id)
One conversation by id (t_…). GET /conversations/{conversationId}.
Eingabe-Schema
{
"type": "object",
"properties": {
"conversation_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The conversation id (e.g. \"t_0E5QDJJC03000\")."
}
},
"required": [
"conversation_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_conversation_items(conversation_id, order, start_from, page_size, pagination_token)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"conversation_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The conversation id (e.g. \"t_0E5QDJJC03000\")."
},
"order": {
"description": "Order of the items (default newest_first).",
"type": "string",
"enum": [
"newest_first",
"oldest_first"
]
},
"start_from": {
"type": "string",
"description": "Only items created after this RFC 3339 date-time (with zone)."
},
"page_size": {
"description": "Results per page (1-200). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"required": [
"conversation_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_get_conversation_item(conversation_item_id)
One conversation item (message, note, call, voicemail…) by id (ti_…). GET /conversationItems/{conversationItemId}.
Eingabe-Schema
{
"type": "object",
"properties": {
"conversation_item_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The conversation item id (e.g. \"ti_0D4QABCC06000\")."
}
},
"required": [
"conversation_item_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_read_receipts(conversation_item_id)
Who has read one conversation item and when they first read it (oldest first). GET /conversationItems/{conversationItemId}/readReceipts.
Eingabe-Schema
{
"type": "object",
"properties": {
"conversation_item_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The conversation item id (e.g. \"ti_0D4QABCC06000\")."
}
},
"required": [
"conversation_item_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_get_transcription(transcription_id)
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}.
Eingabe-Schema
{
"type": "object",
"properties": {
"transcription_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The transcription id (from a conversation item's audio attachment)."
}
},
"required": [
"transcription_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_conversation_tags(page_size, pagination_token)
All conversation tags of the organization. Paged; totalCount included. GET /conversations/tags.
Eingabe-Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Results per page (1-500). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_conversation_scheduled_messages(conversation_id)
Messages scheduled to be sent later in one conversation (read only; nothing is sent or cancelled). GET /conversations/{conversationId}/scheduledmessages.
Eingabe-Schema
{
"type": "object",
"properties": {
"conversation_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The conversation id (e.g. \"t_0E5QDJJC03000\")."
}
},
"required": [
"conversation_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_scheduled_messages(pagination_token)
All messages scheduled to be sent from the organization (read only). Paged with hasMore/paginationToken; totalCount included. GET /scheduledmessages.
Eingabe-Schema
{
"type": "object",
"properties": {
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_saved_messages(page_size, pagination_token)
Saved message templates (private and organization-wide): title, text, internal/shared flags. Paged with hasMore/paginationToken. GET /savedmessages.
Eingabe-Schema
{
"type": "object",
"properties": {
"page_size": {
"description": "Results per page (1-500). Keep it small (e.g. 25-50) for long records: an oversized page is cut, but the Paging part with the cursor always stays whole.",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"pagination_token": {
"description": "The paginationToken from the previous page's reply (when hasMore is true).",
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_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.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_list_phone_lines
All phone lines of the organization (id, name); totalCount included. GET /phonelines.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sprucehealth_get_phone_line(phone_line_id)
One phone line by id (pd_…). GET /phonelines/{phonelineId}.
Eingabe-Schema
{
"type": "object",
"properties": {
"phone_line_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The phone line id (e.g. \"pd_26RRC7PQ6JG00\")."
}
},
"required": [
"phone_line_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Nachweis