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

A
Qualität der Beschreibung
96%
Vollständigkeit des Schemas
88%
Qualität der Benennung
70%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Befunde (12)

  • LOWTool 'sprucehealth_list_contact_conversations' name length outside 3-30 rangein sprucehealth_list_contact_conversations
  • LOWTool 'sprucehealth_list_contact_integration_links' name length outside 3-30 rangein sprucehealth_list_contact_integration_links
  • LOWTool 'sprucehealth_list_contact_fields' name length outside 3-30 rangein sprucehealth_list_contact_fields
  • LOWTool 'sprucehealth_list_conversations' name length outside 3-30 rangein sprucehealth_list_conversations
  • LOWTool 'sprucehealth_list_conversation_items' name length outside 3-30 rangein sprucehealth_list_conversation_items
  • LOWTool 'sprucehealth_get_conversation_item' name length outside 3-30 rangein sprucehealth_get_conversation_item
  • LOWTool 'sprucehealth_list_read_receipts' name length outside 3-30 rangein sprucehealth_list_read_receipts
  • LOWTool 'sprucehealth_list_conversation_tags' name length outside 3-30 rangein sprucehealth_list_conversation_tags
  • LOWTool 'sprucehealth_list_conversation_scheduled_messages' name length outside 3-30 rangein sprucehealth_list_conversation_scheduled_messages
  • LOWTool 'sprucehealth_list_scheduled_messages' name length outside 3-30 rangein sprucehealth_list_scheduled_messages

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~4,751Tokens (Tool-Definitionen)
~1.2 KBTypische Antwortgröße
Erhebliche Auswirkung auf die Aufmerksamkeit (3.71% von 128k Kontext)

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-http

Was es kann

Tool-Inventar

Tools (24)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢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

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet24 Tools