addrbookFor publishers
← The evidence ledger

Evidence row 301502

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint d4908eb4-d465-4c29-985b-38bcbf9ee52b
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
9a848cfaeac836908e314dab0bdf3eb90cf3172881cfe27f0b1287dc91b67027
Leaf
0xa49e01e61d76e49ffb8721ded1cfa0af9ab09ebb03ab85e9de2595999a4830df

What was observed

{
  "count": 24,
  "tools": [
    {
      "description": "One contact by Spruce contact id (entity_…): demographics, phones, emails, tags, custom and organization fields, integration links. GET /contacts/{contactId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "contact_id": {
            "description": "The contact id (e.g. \"entity_0E5QDGJC03000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "contact_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_get_contact"
    },
    {
      "description": "One conversation by id (t_…). GET /conversations/{conversationId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "conversation_id": {
            "description": "The conversation id (e.g. \"t_0E5QDJJC03000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "conversation_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_get_conversation"
    },
    {
      "description": "One conversation item (message, note, call, voicemail…) by id (ti_…). GET /conversationItems/{conversationItemId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "conversation_item_id": {
            "description": "The conversation item id (e.g. \"ti_0D4QABCC06000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "conversation_item_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_get_conversation_item"
    },
    {
      "description": "One organization member (teammate, team or the organization) by id. GET /organization/members/{memberId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "member_id": {
            "description": "The member id (e.g. \"entity_0D4QABCC06000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "member_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_get_member"
    },
    {
      "description": "Your Spruce organization (id and name). The id is the owner/member id used by other objects. Good first call. GET /organization.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "sprucehealth_get_organization"
    },
    {
      "description": "One phone line by id (pd_…). GET /phonelines/{phonelineId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "phone_line_id": {
            "description": "The phone line id (e.g. \"pd_26RRC7PQ6JG00\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "phone_line_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_get_phone_line"
    },
    {
      "description": "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}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "transcription_id": {
            "description": "The transcription id (from a conversation item's audio attachment).",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "transcription_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_get_transcription"
    },
    {
      "description": "The conversations (secure, SMS/phone, email, fax…) associated with one contact. GET /contacts/{contactId}/conversations.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "contact_id": {
            "description": "The contact id (e.g. \"entity_0E5QDGJC03000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "contact_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_list_contact_conversations"
    },
    {
      "description": "The organization-wide contact fields shown on every contact. Paged; totalCount included. GET /contacts/fields.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "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.",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sprucehealth_list_contact_fields"
    },
    {
      "description": "Links between a contact and external systems (Elation, Hint, athena, custom): type, external id, url. GET /contacts/{contactId}/integrationlinks.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "contact_id": {
            "description": "The contact id (e.g. \"entity_0E5QDGJC03000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "contact_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_list_contact_integration_links"
    },
    {
      "description": "All contact tags of the organization. Paged with hasMore/paginationToken; totalCount included. GET /contacts/tags.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "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.",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sprucehealth_list_contact_tags"
    },
    {
      "description": "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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "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.",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sprucehealth_list_contacts"
    },
    {
      "description": "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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "conversation_id": {
            "description": "The conversation id (e.g. \"t_0E5QDJJC03000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "order": {
            "description": "Order of the items (default newest_first).",
            "enum": [
              "newest_first",
              "oldest_first"
            ],
            "type": "string"
          },
          "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.",
            "maximum": 200,
            "minimum": 1,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          },
          "start_from": {
            "description": "Only items created after this RFC 3339 date-time (with zone).",
            "type": "string"
          }
        },
        "required": [
          "conversation_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_list_conversation_items"
    },
    {
      "description": "Messages scheduled to be sent later in one conversation (read only; nothing is sent or cancelled). GET /conversations/{conversationId}/scheduledmessages.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "conversation_id": {
            "description": "The conversation id (e.g. \"t_0E5QDJJC03000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "conversation_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_list_conversation_scheduled_messages"
    },
    {
      "description": "All conversation tags of the organization. Paged; totalCount included. GET /conversations/tags.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "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.",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sprucehealth_list_conversation_tags"
    },
    {
      "description": "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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "order_by": {
            "description": "Order by creation time or last message time (default last_message).",
            "enum": [
              "created",
              "last_message"
            ],
            "type": "string"
          },
          "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.",
            "maximum": 200,
            "minimum": 1,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          },
          "start_from": {
            "description": "Only conversations whose ordering time is at or after this RFC 3339 date-time (with zone).",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sprucehealth_list_conversations"
    },
    {
      "description": "The organization's own channels: Spruce phone and fax numbers, email addresses and Spruce Links, with their owner and members. GET /internalendpoints.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "sprucehealth_list_internal_endpoints"
    },
    {
      "description": "All members of the organization: teammates (name, email, admin, suspended), teams and the organization itself. Paged with hasMore/paginationToken; totalCount included. GET /organization/members.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "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.",
            "maximum": 500,
            "minimum": 2,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sprucehealth_list_members"
    },
    {
      "description": "All phone lines of the organization (id, name); totalCount included. GET /phonelines.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "sprucehealth_list_phone_lines"
    },
    {
      "description": "Who has read one conversation item and when they first read it (oldest first). GET /conversationItems/{conversationItemId}/readReceipts.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "conversation_item_id": {
            "description": "The conversation item id (e.g. \"ti_0D4QABCC06000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "conversation_item_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_list_read_receipts"
    },
    {
      "description": "Saved message templates (private and organization-wide): title, text, internal/shared flags. Paged with hasMore/paginationToken. GET /savedmessages.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "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.",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sprucehealth_list_saved_messages"
    },
    {
      "description": "All messages scheduled to be sent from the organization (read only). Paged with hasMore/paginationToken; totalCount included. GET /scheduledmessages.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sprucehealth_list_scheduled_messages"
    },
    {
      "description": "The members of one team (team ids come from sprucehealth_list_members, type 'team'). Paged. GET /teams/{teamId}/members.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "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.",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          },
          "team_id": {
            "description": "The team id (e.g. \"entity_0D4QABCC06000\").",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "team_id"
        ],
        "type": "object"
      },
      "name": "sprucehealth_list_team_members"
    },
    {
      "description": "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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "categories": {
            "description": "Contact categories to include.",
            "items": {
              "enum": [
                "patient",
                "professional",
                "clinic",
                "unknown"
              ],
              "type": "string"
            },
            "maxItems": 4,
            "type": "array"
          },
          "created_from": {
            "description": "Only contacts added at or after this time (RFC 3339 with zone).",
            "type": "string"
          },
          "created_to": {
            "description": "Only contacts added at or before this time (RFC 3339 with zone).",
            "type": "string"
          },
          "email_addresses": {
            "description": "Email addresses.",
            "items": {
              "format": "email",
              "maxLength": 320,
              "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,}$",
              "type": "string"
            },
            "maxItems": 20,
            "type": "array"
          },
          "family_name": {
            "description": "Family (last) name.",
            "maxLength": 200,
            "type": "string"
          },
          "free_text": {
            "description": "Free-text query (name, phone, email…).",
            "maxLength": 500,
            "type": "string"
          },
          "given_name": {
            "description": "Given (first) name.",
            "maxLength": 200,
            "type": "string"
          },
          "invite_states": {
            "description": "Spruce account/invite state.",
            "items": {
              "enum": [
                "has_account",
                "invited",
                "not_invited"
              ],
              "type": "string"
            },
            "maxItems": 3,
            "type": "array"
          },
          "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.",
            "maximum": 500,
            "minimum": 1,
            "type": "integer"
          },
          "pagination_token": {
            "description": "The paginationToken from the previous page's reply (when hasMore is true).",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string"
          },
          "phone_numbers": {
            "description": "Phone numbers, e.g. 2065551234 or +12065551234.",
            "items": {
              "maxLength": 40,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 20,
            "type": "array"
          },
          "tags": {
            "description": "Contact tag text values (the `value` of a tag from sprucehealth_list_contact_tags).",
            "items": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 50,
            "type": "array"
          },
          "tags_match": {
            "description": "How the tags combine: any (default), all, or none (exclude).",
            "enum": [
              "any",
              "all",
              "none"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sprucehealth_search_contacts"
    }
  ]
}

What the leaf hashes

{"body":"9a848cfaeac836908e314dab0bdf3eb90cf3172881cfe27f0b1287dc91b67027","id":301502,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793054119140804,"prev":null,"subject":"d4908eb4-d465-4c29-985b-38bcbf9ee52b","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0xa49d4b4f0d3b7cc618fa8aa844617f15dd88e788879de40456d042ce6427e4f5
  2. 0x16bab4c9abcfe4e349c8d0ad66e8ff657783e84bb9e9132bb02a08cbddfd527a
  3. 0x4534c7662aed5ae7427db404cd60848b38a8162a2cd3242a93b3475a5ce8a3b8
  4. 0xc8e6fce9f835d23930cc77ae9437df86fe91971626888907b0aa2152781985f8
  5. 0x079554627ef049571d98254d9fd5ddf3d6bb069b2a665fc735167654b645f703
  6. 0xea8853b937b6e95c535946305fbbdf921bb4b9840427aa64e93aa3778494d798
  7. 0x8b5ddb0ad55794cb2cc6a367f90dcb038cfbc384a23c0db646bff59cf2c8c66c
  8. 0xe49e2d0ed142794e41252c9c2ae9faecb6a7d846aaf89f7fc1462a5bc05ca899
  9. 0xbcef88b1730010a11c8820c2e7e4ec1441c62ab07c0fc752b294fd2666c9d9a9
  10. 0xcfc41667c7e4033b09b3eb60ac1b4f7735f1d813168ca8ee332b26dbabe469c4
  11. 0x63bb18928b05af339d3db18a674ec04120f1a31736f638d4e101d735122f8380
  12. 0x21725c62783071369e87d9e0abedb3d8cc37bdab8d0d58308c28aeb7cfd2bc8c
  13. 0xc34c13c58ba9c342ea1b833ac1882a4aea22777c4fd1092b2f83d3bac6b9f845
  14. 0x428106f4ae4ec142f17aebf6fa50935242f8d3f1c211cf95d6351d03d11da2b7
  15. 0x62a900133713919f4eed33d8336876b7a6d538233b8a4f3ed03b29aa44f5bad0
  16. 0x1ac20d30773e1f4f2f811540e9a99b5cca9177c9e2e029acc0d80cf3f1d11f0f
  17. 0xd21942ae3214eff88e08ab04884fd4b11958b51af9a0741b7668e2d07a2c56c9
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON