{"id":301379,"recorded_at":"2026-10-26T22:34:11.235050Z","observed_at":"2026-10-26T22:34:11.234949Z","subject_kind":"endpoint","subject":"1619b8ec-81cb-4638-ba03-1bbd2d434615","kind":"mcp.tools","method":"probe.mcp/1","body":{"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"}]},"body_sha256":"14cad7362dfa9bb3e6b32f589ff538d4a2143778672a0664eaa4cdff1e7792a0","prev_id":null,"leaf":"0x28c60bb0af640344918ee48d8d6275cfcd032a5e16eba92e97f8cb6bf98328d7","leaf_text":"{\"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\"}","day":{"day":"2026-10-26","leaves":296695,"root":"0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8","chained":"0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a","anchor_chain":"eip155:5042002","anchor_tx":"0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae","anchor_block":69251483},"proof":["0x28c5a04f749c70c6283698b050e1e96f5805471e56d20b0a3d8346d69df094d1","0xc929995244e3ccc21c811b3fd5b5ca76a15ae72b0d2bbd41a72865676c1b8e26","0xfcad94fc2a6b852d8b8f040953cf6117a54ba4807f0d8090c6c756834bd3063b","0x267c486d16a7f22e4796b7451cc1c7f977930b3913996015f155017fff1abaca","0x2566e073d97cd2b5761aa18f6208810c3e03605fc4be4439791e730f0893c26a","0x44b44d4addc0d91d00565095961a79420080507520af812251b375dbc0f619e3","0x51f2e648a999fce3ca68e22d09e9856c922b28e0e375bc3f4ce786382d11439d","0xda8447219d4609b2ae5b8bbabbf31704b77502a16a0fe643b9cc7114ad56494a","0xa8810018e2704214b092e15de1b1c033e82ac39dfc4d80ab3600461ea58a631e","0x7f7b5e4017d0ebdc6e6e7ad11b8fd65cdecee6414f31e6c211b1dd0c217f99a4","0x29ff42cd28c985738cc9b9746505241162025974e4e3ebf7c6681609002132fa","0x364047261f51ecdbe278514b4f415358118ef4644f7124e15a40f80a86f6a05b","0x16a8fb19a5e4f4535e7cb3fce5c15ecfa188586bb74e347ee71164f8af27dfe1","0xd843afcced75dedd39194ff9bd12326b88099e6112686db2299392d022dc3146","0xc3a6a3ae44ec0da1848b16d40c45d7aac97a67352eea8df18e0f26edabea8a2f","0x06d71bfa7d8b41d62c8836efc2c601e1cc3772d9453596b2ae4950887f3310ca","0x8c756542e482157df0c36464d75c937b845e4423dbbcfad08f0cf8d5a16b9a13","0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d","0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a"]}