addrbookFor publishers
← 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).

  1. 0x70b9162ef0c7a25dea4323707464a1ca09fccaf18d473862faa6911ff5e70efb
  2. 0x8b36b335590c3576ea6f15c64466c837e53020f1f7c01c41d293850a26b19645
  3. 0x290b3908c79fa3e48e16f8193705a8dd10d39a7089d7807d1d3fa4d37d4a9bbf
  4. 0x6fdef7b30406dbae9fd7ad18db44f46f6182cc0eacd01c32d818e1a544b6e4ba
  5. 0x39eac95bdc383a9b5f25b2e58fcd59d6da660c96822d4a942987fc9e598e7d27
  6. 0xd6d37f7e5e212a189f8dc9f4eb1888767b43e3ccc8c0a4128f1da6f3dfe8e836
  7. 0x01fc212e8bcdf4707a1146e827dd5109103a93229c71a011c5f5a1c14807f15c
  8. 0x68ace2b23863c07baf76c5982c8b23143d30bb4f21cd0533cf09549184b48620
  9. 0xc9ba8e512a3ad74ee604f8b1759e25b1172f9f8f62ba4f8f8bcc35beb64f6fcb
  10. 0x3801dc224ee69349c6fe3a8804f83a6392c51dbf385196ccaca4e1bc01124391
  11. 0x85ea4bbb5113622e4aa66d1805aad88594922ba95c70691ba980547dd9edd2b2
  12. 0x5be1d69fd9353c3a75685caffea8c98e8f079f5072011c82517cc5f365ba32f8
  13. 0x14b83e3bc6587240f31cd033d09d131e0775b7b00aada9042597008a70399013
  14. 0xfc9b5a81a7a83a1c735a4fe64590beb9db14d2366f463161358af28c3ea9a81d
  15. 0xa2d436d488e3600b0e5c3e3ed9c9234cd52853c59830b786334fd0c4292d9f40
  16. 0x47b89901b0f07938a6b9a66ddf35683903f79d756a7c7763665fd632758b08d0
  17. 0x9a83be955a206deb65b995adfd92c58fa31c95fbbf926bd199d300e70b08b26d
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON