addrbookFor publishers
← The evidence ledger

Evidence row 301379

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 1619b8ec-81cb-4638-ba03-1bbd2d434615
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
14cad7362dfa9bb3e6b32f589ff538d4a2143778672a0664eaa4cdff1e7792a0
Leaf
0x28c60bb0af640344918ee48d8d6275cfcd032a5e16eba92e97f8cb6bf98328d7

What was observed

{
  "count": 23,
  "tools": [
    {
      "description": "WRITE: mark a conversation closed in the Sakari inbox (a new inbound message reopens it). PUT /v1/accounts/{accountId}/conversations/{conversationId}/close.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "conversation_id": {
            "description": "Sakari conversation id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "conversation_id"
        ],
        "type": "object"
      },
      "name": "sakari_close_conversation"
    },
    {
      "description": "WRITE: create a contact. If a contact with the same mobile number exists, merge_strategy decides what happens (append, core or remove, per Sakari). A contact is not opted in to messages by this call. POST /v1/accounts/{accountId}/contacts.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "country": {
            "description": "2-letter country of the number (default: the account's default country).",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string"
          },
          "email": {
            "maxLength": 254,
            "type": "string"
          },
          "first_name": {
            "maxLength": 200,
            "type": "string"
          },
          "last_name": {
            "maxLength": 200,
            "type": "string"
          },
          "merge_strategy": {
            "description": "How an existing contact with the same mobile is treated.",
            "enum": [
              "append",
              "core",
              "remove"
            ],
            "type": "string"
          },
          "mobile": {
            "description": "Mobile number in international format, e.g. +13471234567.",
            "pattern": "^\\+[1-9]\\d{6,14}$",
            "type": "string"
          }
        },
        "required": [
          "mobile"
        ],
        "type": "object"
      },
      "name": "sakari_create_contact"
    },
    {
      "description": "WRITE: create a reusable SMS template (does not send anything). POST /v1/accounts/{accountId}/templates.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "name": {
            "description": "Template name.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "text": {
            "description": "Template text; may contain placeholders such as {{firstName}}.",
            "maxLength": 1600,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "name",
          "text"
        ],
        "type": "object"
      },
      "name": "sakari_create_template"
    },
    {
      "description": "The Sakari account these credentials belong to: name, plan, balance, default country, business info and options. API credentials are never returned. GET /v1/accounts/{accountId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "sakari_get_account"
    },
    {
      "description": "Prepaid balance, default country, remaining segments and the price per segment. GET /v1/accounts/{accountId}/balance.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "sakari_get_balance"
    },
    {
      "description": "One call history record by id. GET /v1/accounts/{accountId}/calls/{callId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "call_id": {
            "description": "Sakari call id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "call_id"
        ],
        "type": "object"
      },
      "name": "sakari_get_call"
    },
    {
      "description": "One campaign by id. GET /v1/accounts/{accountId}/campaigns/{campaignId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "campaign_id": {
            "description": "Sakari campaign id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "campaign_id"
        ],
        "type": "object"
      },
      "name": "sakari_get_campaign"
    },
    {
      "description": "One contact by id: name, mobile (with validity and line type), email, lists, attributes, opt-in and blocked state. GET /v1/accounts/{accountId}/contacts/{contactId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "contact_id": {
            "description": "Sakari contact id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "contact_id"
        ],
        "type": "object"
      },
      "name": "sakari_get_contact"
    },
    {
      "description": "One conversation by id. Use sakari_list_messages with conversation_id for its messages. GET /v1/accounts/{accountId}/conversations/{conversationId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "conversation_id": {
            "description": "Sakari conversation id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "conversation_id"
        ],
        "type": "object"
      },
      "name": "sakari_get_conversation"
    },
    {
      "description": "One message by id: text, direction, status, segments, price, error. GET /v1/accounts/{accountId}/messages/{messageId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "message_id": {
            "description": "Sakari message id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "message_id"
        ],
        "type": "object"
      },
      "name": "sakari_get_message"
    },
    {
      "description": "One message template by id. GET /v1/accounts/{accountId}/templates/{templateId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "template_id": {
            "description": "Sakari template id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "template_id"
        ],
        "type": "object"
      },
      "name": "sakari_get_template"
    },
    {
      "description": "Autoresponders (automatic replies) configured on the account. GET /v1/accounts/{accountId}/autoresponders.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "sakari_list_autoresponders"
    },
    {
      "description": "Call history (voice) with direction, status, duration and contact; filter by contact, conversation, direction, status or date range. GET /v1/accounts/{accountId}/calls.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "contact_id": {
            "description": "Sakari contact id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          },
          "conversation_id": {
            "description": "Sakari conversation id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          },
          "direction": {
            "enum": [
              "inbound",
              "outbound"
            ],
            "type": "string"
          },
          "from": {
            "description": "Start of the date range (ISO 8601 date-time).",
            "maxLength": 40,
            "minLength": 10,
            "type": "string"
          },
          "limit": {
            "description": "Results per page, 1-100 (default 25).",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "description": "Results to skip (default 0). Pass the previous reply's next_offset.",
            "maximum": 10000000,
            "minimum": 0,
            "type": "integer"
          },
          "status": {
            "enum": [
              "initiated",
              "ringing",
              "active",
              "ended",
              "rejected",
              "forwarded",
              "missed",
              "transferring"
            ],
            "type": "string"
          },
          "to": {
            "description": "End of the date range (ISO 8601 date-time).",
            "maxLength": 40,
            "minLength": 10,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sakari_list_calls"
    },
    {
      "description": "List message campaigns with schedule, template, status and reporting. GET /v1/accounts/{accountId}/campaigns.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "limit": {
            "description": "Results per page, 1-100 (default 25).",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "name": {
            "description": "Filter by name or part of it.",
            "maxLength": 200,
            "type": "string"
          },
          "offset": {
            "description": "Results to skip (default 0). Pass the previous reply's next_offset.",
            "maximum": 10000000,
            "minimum": 0,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "sakari_list_campaigns"
    },
    {
      "description": "List or search contacts (partial matches on name, mobile or email; filter by tag). GET /v1/accounts/{accountId}/contacts.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "email": {
            "description": "Filter by email or part of it.",
            "maxLength": 254,
            "type": "string"
          },
          "first_name": {
            "description": "Filter by first name or part of it.",
            "maxLength": 200,
            "type": "string"
          },
          "last_name": {
            "description": "Filter by last name or part of it.",
            "maxLength": 200,
            "type": "string"
          },
          "limit": {
            "description": "Results per page, 1-100 (default 25).",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "mobile": {
            "description": "Filter by mobile number or part of it.",
            "maxLength": 40,
            "type": "string"
          },
          "offset": {
            "description": "Results to skip (default 0). Pass the previous reply's next_offset.",
            "maximum": 10000000,
            "minimum": 0,
            "type": "integer"
          },
          "tags": {
            "description": "Filter by tag(s).",
            "maxLength": 200,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sakari_list_contacts"
    },
    {
      "description": "List conversations (the inbox): contact, last message, unread count, open or closed. GET /v1/accounts/{accountId}/conversations.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "limit": {
            "description": "Results per page, 1-100 (default 25).",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "description": "Results to skip (default 0). Pass the previous reply's next_offset.",
            "maximum": 10000000,
            "minimum": 0,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "sakari_list_conversations"
    },
    {
      "description": "Lead capture forms with active state, impressions and conversions. GET /v1/accounts/{accountId}/forms.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "limit": {
            "description": "Results per page, 1-100 (default 25).",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "description": "Results to skip (default 0). Pass the previous reply's next_offset.",
            "maximum": 10000000,
            "minimum": 0,
            "type": "integer"
          },
          "q": {
            "description": "Search term across form fields.",
            "maxLength": 200,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sakari_list_forms"
    },
    {
      "description": "Shortened tracked links with destination, short URL and click stats. GET /v1/accounts/{accountId}/links.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "q": {
            "description": "Search term across link fields.",
            "maxLength": 200,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "sakari_list_links"
    },
    {
      "description": "List messages (sent and received) with status, segments, price and timestamps; filter by contact or conversation. GET /v1/accounts/{accountId}/messages.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "contact_id": {
            "description": "Sakari contact id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          },
          "conversation_id": {
            "description": "Sakari conversation id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          },
          "limit": {
            "description": "Results per page, 1-100 (default 25).",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "description": "Results to skip (default 0). Pass the previous reply's next_offset.",
            "maximum": 10000000,
            "minimum": 0,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "sakari_list_messages"
    },
    {
      "description": "List reusable message templates. GET /v1/accounts/{accountId}/templates.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "limit": {
            "description": "Results per page, 1-100 (default 25).",
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "name": {
            "description": "Filter by name or part of it.",
            "maxLength": 200,
            "type": "string"
          },
          "offset": {
            "description": "Results to skip (default 0). Pass the previous reply's next_offset.",
            "maximum": 10000000,
            "minimum": 0,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "sakari_list_templates"
    },
    {
      "description": "Active webhook subscriptions (message event notifications). GET /v1/accounts/{accountId}/webhooks.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {},
        "type": "object"
      },
      "name": "sakari_list_webhooks"
    },
    {
      "description": "WRITE: SEND REAL TEXT MESSAGES that cost account balance and cannot be recalled. Recipients: phone numbers (international format), existing contact ids, or conversation ids (max 100 in total). Only text people who opted in; Sakari enforces TCPA/CTIA rules and the sender is responsible. Confirm the recipients and the text with the user first. Placeholders like {{firstName}} are filled per contact. POST /v1/accounts/{accountId}/messages.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "confirm_send": {
            "const": true,
            "description": "Must be true: you confirm the user approved these recipients and this text, and that the texts go out now.",
            "type": "boolean"
          },
          "contact_ids": {
            "description": "Existing Sakari contact ids.",
            "items": {
              "description": "Sakari contact id.",
              "maxLength": 128,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 100,
            "type": "array"
          },
          "conversation_ids": {
            "description": "Existing conversation ids to reply into.",
            "items": {
              "description": "Sakari conversation id.",
              "maxLength": 128,
              "minLength": 1,
              "type": "string"
            },
            "maxItems": 100,
            "type": "array"
          },
          "media_urls": {
            "description": "Public media URLs to attach (MMS).",
            "items": {
              "format": "uri",
              "maxLength": 2000,
              "type": "string"
            },
            "maxItems": 10,
            "type": "array"
          },
          "text": {
            "description": "Message text (the Sakari 'template').",
            "maxLength": 1600,
            "minLength": 1,
            "type": "string"
          },
          "to_numbers": {
            "description": "Recipient phone numbers in international format.",
            "items": {
              "pattern": "^\\+[1-9]\\d{6,14}$",
              "type": "string"
            },
            "maxItems": 100,
            "type": "array"
          },
          "type": {
            "description": "SMS (default) or MMS.",
            "enum": [
              "SMS",
              "MMS"
            ],
            "type": "string"
          }
        },
        "required": [
          "text",
          "confirm_send"
        ],
        "type": "object"
      },
      "name": "sakari_send_message"
    },
    {
      "description": "WRITE: change a contact's name, email or mobile. Sakari's update replaces the contact, so this reads the current contact first and sends it back whole (lists, opt-in, blocked, attributes) with only your changes applied. PUT /v1/accounts/{accountId}/contacts/{contactId}.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "contact_id": {
            "description": "Sakari contact id.",
            "maxLength": 128,
            "minLength": 1,
            "type": "string"
          },
          "country": {
            "description": "2-letter country of the mobile number.",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string"
          },
          "email": {
            "maxLength": 254,
            "type": "string"
          },
          "first_name": {
            "maxLength": 200,
            "type": "string"
          },
          "last_name": {
            "maxLength": 200,
            "type": "string"
          },
          "mobile": {
            "description": "New mobile number in international format.",
            "pattern": "^\\+[1-9]\\d{6,14}$",
            "type": "string"
          }
        },
        "required": [
          "contact_id"
        ],
        "type": "object"
      },
      "name": "sakari_update_contact"
    }
  ]
}

What the leaf hashes

{"body":"14cad7362dfa9bb3e6b32f589ff538d4a2143778672a0664eaa4cdff1e7792a0","id":301379,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793054051234949,"prev":null,"subject":"1619b8ec-81cb-4638-ba03-1bbd2d434615","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. 0x28c5a04f749c70c6283698b050e1e96f5805471e56d20b0a3d8346d69df094d1
  2. 0xc929995244e3ccc21c811b3fd5b5ca76a15ae72b0d2bbd41a72865676c1b8e26
  3. 0xfcad94fc2a6b852d8b8f040953cf6117a54ba4807f0d8090c6c756834bd3063b
  4. 0x267c486d16a7f22e4796b7451cc1c7f977930b3913996015f155017fff1abaca
  5. 0x2566e073d97cd2b5761aa18f6208810c3e03605fc4be4439791e730f0893c26a
  6. 0x44b44d4addc0d91d00565095961a79420080507520af812251b375dbc0f619e3
  7. 0x51f2e648a999fce3ca68e22d09e9856c922b28e0e375bc3f4ce786382d11439d
  8. 0xda8447219d4609b2ae5b8bbabbf31704b77502a16a0fe643b9cc7114ad56494a
  9. 0xa8810018e2704214b092e15de1b1c033e82ac39dfc4d80ab3600461ea58a631e
  10. 0x7f7b5e4017d0ebdc6e6e7ad11b8fd65cdecee6414f31e6c211b1dd0c217f99a4
  11. 0x29ff42cd28c985738cc9b9746505241162025974e4e3ebf7c6681609002132fa
  12. 0x364047261f51ecdbe278514b4f415358118ef4644f7124e15a40f80a86f6a05b
  13. 0x16a8fb19a5e4f4535e7cb3fce5c15ecfa188586bb74e347ee71164f8af27dfe1
  14. 0xd843afcced75dedd39194ff9bd12326b88099e6112686db2299392d022dc3146
  15. 0xc3a6a3ae44ec0da1848b16d40c45d7aac97a67352eea8df18e0f26edabea8a2f
  16. 0x06d71bfa7d8b41d62c8836efc2c601e1cc3772d9453596b2ae4950887f3310ca
  17. 0x8c756542e482157df0c36464d75c937b845e4423dbbcfad08f0cf8d5a16b9a13
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON