← The evidence ledger
Evidence row 300065
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 5962291f-9229-476e-a455-8b643b94f8fe
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- ab8082cf1d164f4c93c4fccbaf1fc51bb2e07bfeb811d499b5d994fd455e889d
- Leaf
- 0x70b8bee367fb9b3e09b1d66dad882313d1718020e4b1e18a662876f516a31d24
What was observed
{
"count": 10,
"tools": [
{
"description": "Fetch incoming SMS received on your shortcodes/numbers, oldest first, in batches (default 25 per call). Pass last_received_id (0 for the first call, then `next_last_received_id` from the previous reply) to move through them; `has_more` stays true while a call returns messages, so keep calling until `count` is 0. Optional shortcode and keyword filters. GET /version1/messaging.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"keyword": {
"description": "Only messages that start with this keyword.",
"maxLength": 50,
"type": "string"
},
"last_received_id": {
"description": "Id of the last message already read (default 0 = from the start).",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"limit": {
"description": "Most messages to return per call (default 25); `has_more` says if more are waiting.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"short_code": {
"description": "Only messages sent to this shortcode / number.",
"maxLength": 20,
"type": "string"
}
},
"type": "object"
},
"name": "africastalking_fetch_messages"
},
{
"description": "Look up an airtime transaction by its transaction id (the requestId / ATPid_... from a send reply): status, amount, destination and discount. GET /query/transaction/find.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"transaction_id": {
"description": "The transaction id, e.g. ATPid_...",
"maxLength": 100,
"minLength": 1,
"type": "string"
}
},
"required": [
"transaction_id"
],
"type": "object"
},
"name": "africastalking_find_airtime_transaction"
},
{
"description": "Look up a mobile data transaction by its transactionId (from a send reply): status, product, destination and cost. GET bundles /query/transaction/find.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"transaction_id": {
"description": "The mobile data transactionId.",
"maxLength": 100,
"minLength": 1,
"type": "string"
}
},
"required": [
"transaction_id"
],
"type": "object"
},
"name": "africastalking_find_mobile_data_transaction"
},
{
"description": "The Africa's Talking app balance (SMS/airtime wallet), e.g. {\"balance\": \"KES 1250.0000\"}. The sandbox app has no balance. GET /version1/user.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "africastalking_get_balance"
},
{
"description": "The balance of the mobile data wallet, e.g. {\"status\": \"Success\", \"balance\": \"KES 500.0000\"}. GET bundles /query/wallet/balance.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "africastalking_get_mobile_data_wallet_balance"
},
{
"description": "Number of outbound calls currently queued on each of your voice numbers. Live apps only. POST voice /queueStatus (a read: nothing is changed).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"phone_numbers": {
"description": "Your Africa's Talking voice numbers to check.",
"items": {
"pattern": "^\\+[1-9]\\d{6,14}$",
"type": "string"
},
"maxItems": 20,
"minItems": 1,
"type": "array"
}
},
"required": [
"phone_numbers"
],
"type": "object"
},
"name": "africastalking_get_voice_queue_status"
},
{
"description": "WRITE: place an outbound voice call from one of your Africa's Talking numbers to up to 10 phone numbers. The call is billed and rings real phones; what is said is decided by the voice callback URL configured for the number in the dashboard. Needs confirm=true after the user approved the numbers. Live apps only (the sandbox has no voice service). Returns a per-number queue status. POST voice /call.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"call_from": {
"description": "Your Africa's Talking voice number to call from (international format).",
"pattern": "^\\+[1-9]\\d{6,14}$",
"type": "string"
},
"call_to": {
"description": "Numbers to call (max 10).",
"items": {
"pattern": "^\\+[1-9]\\d{6,14}$",
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
"client_request_id": {
"description": "Optional label passed back to your voice callback URL as clientRequestId.",
"pattern": "^[A-Za-z0-9._:-]{1,64}$",
"type": "string"
},
"confirm": {
"description": "Must be true. Set it only after the user has explicitly approved this exact send (recipients, text/amount); it spends account credit.",
"type": "boolean"
}
},
"required": [
"call_from",
"call_to",
"confirm"
],
"type": "object"
},
"name": "africastalking_make_voice_call"
},
{
"description": "WRITE: top up mobile airtime for up to 25 phone numbers. Spends account credit immediately and cannot be reversed. Needs confirm=true after the user approved each number and amount. Amounts are in the given ISO currency (e.g. KES, UGX, TZS). Pass an idempotency_key to make a retry safe. Returns per-number status and requestId (use africastalking_find_airtime_transaction to follow up). POST /version1/airtime/send.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"confirm": {
"description": "Must be true. Set it only after the user has explicitly approved this exact send (recipients, text/amount); it spends account credit.",
"type": "boolean"
},
"idempotency_key": {
"description": "Optional unique key (8-100 chars) for this send; the same key makes Africa's Talking ignore a duplicate request.",
"pattern": "^[A-Za-z0-9._:-]{8,100}$",
"type": "string"
},
"recipients": {
"items": {
"properties": {
"amount": {
"description": "Amount of airtime in that currency.",
"exclusiveMinimum": 0,
"maximum": 1000000,
"type": "number"
},
"currency_code": {
"pattern": "^[A-Z]{3}$",
"type": "string"
},
"phone_number": {
"pattern": "^\\+[1-9]\\d{6,14}$",
"type": "string"
}
},
"required": [
"phone_number",
"currency_code",
"amount"
],
"type": "object"
},
"maxItems": 25,
"minItems": 1,
"type": "array"
}
},
"required": [
"recipients",
"confirm"
],
"type": "object"
},
"name": "africastalking_send_airtime"
},
{
"description": "WRITE: send mobile data bundles to up to 25 phone numbers from your Africa's Talking data wallet. Spends wallet credit and cannot be reversed. Needs confirm=true after the user approved each number and bundle. product_name is your data product (created in the Africa's Talking dashboard). Pass an idempotency_key to make a retry safe. Returns per-number status and transactionId (see africastalking_find_mobile_data_transaction). POST bundles /mobile/data/request.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"confirm": {
"description": "Must be true. Set it only after the user has explicitly approved this exact send (recipients, text/amount); it spends account credit.",
"type": "boolean"
},
"idempotency_key": {
"description": "Optional unique key (8-100 chars) for this send; the same key makes Africa's Talking ignore a duplicate request.",
"pattern": "^[A-Za-z0-9._:-]{8,100}$",
"type": "string"
},
"product_name": {
"description": "Name of your mobile data product in the Africa's Talking dashboard.",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"recipients": {
"items": {
"properties": {
"metadata": {
"additionalProperties": {
"type": "string"
},
"description": "Optional key-value labels stored with the transaction.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"phone_number": {
"pattern": "^\\+[1-9]\\d{6,14}$",
"type": "string"
},
"quantity": {
"description": "Bundle size in `unit`.",
"exclusiveMinimum": 0,
"maximum": 100000,
"type": "number"
},
"unit": {
"enum": [
"MB",
"GB"
],
"type": "string"
},
"validity": {
"enum": [
"Day",
"Week",
"BiWeek",
"Month",
"Quarterly"
],
"type": "string"
}
},
"required": [
"phone_number",
"quantity",
"unit",
"validity"
],
"type": "object"
},
"maxItems": 25,
"minItems": 1,
"type": "array"
}
},
"required": [
"product_name",
"recipients",
"confirm"
],
"type": "object"
},
"name": "africastalking_send_mobile_data"
},
{
"description": "WRITE: send one text message to up to 100 phone numbers. Spends account credit and delivers to real phones (the sandbox app only reaches the simulator). Needs confirm=true after the user approved the recipients and text. Returns the vendor's per-recipient status (statusCode 101 = sent), message ids and cost. Never retried. POST /version1/messaging.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"confirm": {
"description": "Must be true. Set it only after the user has explicitly approved this exact send (recipients, text/amount); it spends account credit.",
"type": "boolean"
},
"message": {
"description": "The SMS text (1-1600 characters; long texts are split into several billed parts).",
"maxLength": 1600,
"minLength": 1,
"type": "string"
},
"sender_id": {
"description": "Approved alphanumeric sender ID, shortcode or long-code number (e.g. +27... in South Africa); omit to use the account default.",
"pattern": "^(?:\\+\\d{6,16}|[A-Za-z0-9 ._-]{1,16})$",
"type": "string"
},
"to": {
"description": "Recipients in international format, e.g. +254711000000 (max 100).",
"items": {
"pattern": "^\\+[1-9]\\d{6,14}$",
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"type": "array"
}
},
"required": [
"to",
"message",
"confirm"
],
"type": "object"
},
"name": "africastalking_send_sms"
}
]
}What the leaf hashes
{"body":"ab8082cf1d164f4c93c4fccbaf1fc51bb2e07bfeb811d499b5d994fd455e889d","id":300065,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793053249208945,"prev":null,"subject":"5962291f-9229-476e-a455-8b643b94f8fe","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).
- 0x70b9162ef0c7a25dea4323707464a1ca09fccaf18d473862faa6911ff5e70efb
- 0x8b36b335590c3576ea6f15c64466c837e53020f1f7c01c41d293850a26b19645
- 0x290b3908c79fa3e48e16f8193705a8dd10d39a7089d7807d1d3fa4d37d4a9bbf
- 0x6fdef7b30406dbae9fd7ad18db44f46f6182cc0eacd01c32d818e1a544b6e4ba
- 0x39eac95bdc383a9b5f25b2e58fcd59d6da660c96822d4a942987fc9e598e7d27
- 0xd6d37f7e5e212a189f8dc9f4eb1888767b43e3ccc8c0a4128f1da6f3dfe8e836
- 0x01fc212e8bcdf4707a1146e827dd5109103a93229c71a011c5f5a1c14807f15c
- 0x68ace2b23863c07baf76c5982c8b23143d30bb4f21cd0533cf09549184b48620
- 0xc9ba8e512a3ad74ee604f8b1759e25b1172f9f8f62ba4f8f8bcc35beb64f6fcb
- 0x3801dc224ee69349c6fe3a8804f83a6392c51dbf385196ccaca4e1bc01124391
- 0x85ea4bbb5113622e4aa66d1805aad88594922ba95c70691ba980547dd9edd2b2
- 0x5be1d69fd9353c3a75685caffea8c98e8f079f5072011c82517cc5f365ba32f8
- 0x14b83e3bc6587240f31cd033d09d131e0775b7b00aada9042597008a70399013
- 0xfc9b5a81a7a83a1c735a4fe64590beb9db14d2366f463161358af28c3ea9a81d
- 0xa2d436d488e3600b0e5c3e3ed9c9234cd52853c59830b786334fd0c4292d9f40
- 0x47b89901b0f07938a6b9a66ddf35683903f79d756a7c7763665fd632758b08d0
- 0x9a83be955a206deb65b995adfd92c58fa31c95fbbf926bd199d300e70b08b26d
- 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
- 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
- Day root
- 0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
- Chained
- 0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
- Published
- On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae