addrbookFor publishers
← The evidence ledger

Evidence row 258358

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint d9cd60ce-fac0-4c0f-b79a-6adbff38fad1
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
9a4a977402f2190cfb53a92c1680e88efbef4308c7e6705eb5c111c5024ded92
Leaf
0x69aa128b473880eb4df5d3b96b9c4a13b2ec62d48a225bdbe2f1a74a37b70ef6

What was observed

{
  "count": 8,
  "tools": [
    {
      "description": "Replace the text of an existing message in a Telegram chat. Only works on messages sent by the authenticated account. Cannot edit media or other message attributes — text only. parse_mode: classic markdown/html/auto or rich (Rich Message; dialect auto-detected). schedule_date (ISO 8601) reschedules an already-queued message; it does not turn a delivered message into a scheduled one, and the result then carries status='scheduled'. Success: dict with message_id, date, chat, text, status='edited', and edit_date (rich messages also set rich=true and rich_format). Error: dict with ok=false and error string (e.g. message not found or not editable). Use edit_message to update a previously sent message; use send_message to create new ones.  Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "chat_id": {
            "description": "Target chat: numeric id (e.g. -100…), username without @, or 'me' for Saved Messages.",
            "type": "string"
          },
          "message": {
            "description": "Message text. When sending files, used as caption.",
            "type": "string"
          },
          "message_id": {
            "description": "Message id in this chat to edit (from get_messages or Telegram).",
            "type": "integer"
          },
          "parse_mode": {
            "default": "auto",
            "description": "'markdown'/'html'/'auto': classic entity formatting (auto detects). 'rich': Telegram Rich Message document; dialect auto-detected (known HTML tags outside code → rich HTML, else rich markdown). Default is 'auto'. parse_mode='rich' cannot be combined with files.",
            "enum": [
              "markdown",
              "html",
              "auto",
              "rich"
            ],
            "type": "string"
          },
          "schedule_date": {
            "default": null,
            "description": "ISO 8601 instant at which Telegram should deliver the message, e.g. '2026-10-20T09:00:00Z' or '2026-10-20T12:00:00+03:00'. Must be in the future. On send: queues the message instead of delivering now. On edit: reschedules an already-queued message.",
            "type": "string"
          }
        },
        "required": [
          "chat_id",
          "message",
          "message_id"
        ],
        "type": "object"
      },
      "name": "edit_message"
    },
    {
      "description": "Find users/groups/channels by name, username, or phone. Comma-separated usernames are searched in parallel and results are merged round-robin. Global search (query required) searches all Telegram; with min_date, max_date, or filter, search uses dialog list or a named filter; include_peers filters use last-activity from GetPeerDialogs; flag-based filters use dialog list dates. Success: dict with key chats (list of chat objects).  Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "chat_type": {
            "default": null,
            "description": "Comma-separated chat kinds: private, bot, group, channel. Case-insensitive; extra spaces allowed.",
            "type": "string"
          },
          "folder": {
            "default": null,
            "description": "Telegram folder name (case-insensitive exact match after normalization). In Telegram's UI these are called folders; internally they are \"dialog filters\" — saved filter presets that group chats by custom criteria (pinned, unread, business, etc.). See Filters-vs-Folders.md for the technical distinction.",
            "type": "string"
          },
          "limit": {
            "default": 20,
            "description": "Maximum chats to return (recommended 50 or less).",
            "type": "integer"
          },
          "max_date": {
            "default": null,
            "description": "Inclusive maximum date filter (ISO 8601 date or datetime). Omit for no upper bound.",
            "type": "string"
          },
          "min_date": {
            "default": null,
            "description": "Inclusive minimum date filter (ISO 8601 date or datetime). Omit for no lower bound.",
            "type": "string"
          },
          "public": {
            "default": null,
            "description": "If true, prefer chats with a public username; if false, without. Does not apply to private DMs. Omit to skip this filter.",
            "type": "boolean"
          },
          "query": {
            "default": null,
            "description": "Name, username (no @), phone (+country…), or comma-separated usernames for batch lookup. Example: 'alice,bob,charlie'. Required for global search unless you use min_date/max_date or folder alone.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "find_chats"
    },
    {
      "description": "Load profile and metadata for one user, bot, group, or channel. Success: info dict; forum chats may include topics up to topics_limit; user targets may include common_chats up to common_chats_limit.  Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "chat_id": {
            "description": "Target chat: numeric id (e.g. -100…), username without @, or 'me' for Saved Messages.",
            "type": "string"
          },
          "common_chats_limit": {
            "default": 10,
            "description": "Max common groups to list for user targets.",
            "type": "integer"
          },
          "topics_limit": {
            "default": 20,
            "description": "Max forum topics to list when the chat is a forum.",
            "type": "integer"
          }
        },
        "required": [
          "chat_id"
        ],
        "type": "object"
      },
      "name": "get_chat_info"
    },
    {
      "description": "Read or search messages in one chat: browse latest, search text, fetch by ids, or load replies to a message (comments, forum topics, threads). Use from_user to filter by sender (server-side, per-chat only). Use context to include neighboring messages and reply chains around each result. Use include_replies to fetch up to 5 direct replies per result. Do not combine message_ids with query or reply_to_id. Results are ordered by ascending date-time (oldest first) in every mode, including message_ids and nested context lists; limit selects the newest N. Success: messages, has_more, optional total_count and discussion fields.  Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "auto_expand_batches": {
            "default": 2,
            "description": "Extra search batches to run when filters narrow results. Higher values may return more matches at the cost of latency.",
            "type": "integer"
          },
          "chat_id": {
            "description": "Target chat: numeric id (e.g. -100…), username without @, or 'me' for Saved Messages.",
            "type": "string"
          },
          "context": {
            "default": 0,
            "description": "Number of surrounding messages to include as context for each search result. 0 = disabled (default). 1-10 = include N messages before and N after each result. Also fetches the message being replied to and top replies (if include_replies=true). Requires chat_id. Disabled when result count exceeds cost-based caps.",
            "maximum": 10,
            "minimum": 0,
            "type": "integer"
          },
          "from_user": {
            "default": null,
            "description": "Only return messages from this sender. Not a display-name or contact-name search — bare strings resolve like chat_id via get_entity (usernames are case-insensitive and may match an unrelated channel). Prefer @username, phone (+…), or numeric user id. Also accepts 'me', 'self', t.me URL, -100 prefixed id. Uses Telegram's native from_id server-side filter (per-chat search only).",
            "type": "string"
          },
          "include_replies": {
            "default": false,
            "description": "If true, fetch up to 5 direct replies per search result and attach as replies. Each result costs one API call (not batchable). Default: false.",
            "type": "boolean"
          },
          "include_total_count": {
            "default": false,
            "description": "If true, response may include total_count where supported (per-chat search; ignored for global search).",
            "type": "boolean"
          },
          "limit": {
            "default": 50,
            "description": "Maximum messages to return (recommended 50 or less).",
            "type": "integer"
          },
          "max_date": {
            "default": null,
            "description": "Inclusive maximum date filter (ISO 8601 date or datetime). Omit for no upper bound.",
            "type": "string"
          },
          "message_ids": {
            "default": null,
            "description": "Exact message ids to fetch. Mutually exclusive with query and reply_to_id.",
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "min_date": {
            "default": null,
            "description": "Inclusive minimum date filter (ISO 8601 date or datetime). Omit for no lower bound.",
            "type": "string"
          },
          "query": {
            "default": null,
            "description": "Search within this chat only; comma-separated terms. Omit to browse latest or use message_ids / reply_to_id modes.",
            "type": "string"
          },
          "reply_to_id": {
            "default": null,
            "description": "Anchor message id: channel post id, forum topic_id from get_chat_info, or a message id for direct replies. Use with thread_scope.",
            "type": "integer"
          },
          "thread_scope": {
            "default": "auto",
            "description": "Only with reply_to_id. auto: full forum topic (topic_id) or channel comment thread via getReplies; else direct replies. full: nested branch under a message id (forum in-topic uses search window, not whole topic); supergroup threads use search top_msg_id. direct: immediate replies only.",
            "enum": [
              "auto",
              "full",
              "direct"
            ],
            "type": "string"
          }
        },
        "required": [
          "chat_id"
        ],
        "type": "object"
      },
      "name": "get_messages"
    },
    {
      "description": "Low-level Telegram API (MTProto) invoke for methods not wrapped by other tools. Dangerous methods require allow_dangerous=true. Success: API result dict or normalized error. PII and credential-shaped fields (phone, access_hash) are dropped from a successful result by default; pass include_sensitive=true for the raw payload. A bare message id needs a chat binding: requests with no peer field (messages.GetMessages, messages.DeleteMessages) are refused, because a bare id resolves against an arbitrary dialog. Use channels.GetMessages or messages.GetHistory, which carry the binding. messages.GetHistory cannot address a forum topic (no thread_id/top_msg_id in the schema, and channels.GetHistory does not exist) -- use messages.Search with top_msg_id, or the high-level get_messages with reply_to_id.  Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "allow_dangerous": {
            "default": false,
            "description": "If false, destructive methods (e.g. deletes) are blocked. Set true only when intended.",
            "type": "boolean"
          },
          "include_sensitive": {
            "default": false,
            "description": "If true, return the raw result including PII and credential-shaped fields (phone, access_hash). Default false drops them.",
            "type": "boolean"
          },
          "method_full_name": {
            "description": "Telegram API method, e.g. \"messages.GetHistory\" or \"users.GetFullUser\" (normalization applied).",
            "type": "string"
          },
          "params_json": {
            "description": "JSON object string of TL parameters as in Telegram API docs; nested TL uses \"_\": \"typeName\" discriminator.",
            "type": "string"
          },
          "resolve": {
            "default": true,
            "description": "If true, resolve string/int peer-like fields to TL Input* entities before invoke.",
            "type": "boolean"
          }
        },
        "required": [
          "method_full_name",
          "params_json"
        ],
        "type": "object"
      },
      "name": "invoke_mtproto"
    },
    {
      "description": "Search all Telegram chats at once (not scoped to one chat). Comma-separated query terms; optional filters by date, chat kind, and public username. Results are ordered by ascending date-time (oldest first); limit selects the newest N. Success: message list and metadata dict. Global search ignores include_total_count. Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "auto_expand_batches": {
            "default": 2,
            "description": "Extra search batches to run when filters narrow results. Higher values may return more matches at the cost of latency.",
            "type": "integer"
          },
          "chat_type": {
            "default": null,
            "description": "Comma-separated chat kinds: private, bot, group, channel. Case-insensitive; extra spaces allowed.",
            "type": "string"
          },
          "include_total_count": {
            "default": false,
            "description": "If true, response may include total_count where supported (per-chat search; ignored for global search).",
            "type": "boolean"
          },
          "limit": {
            "default": 50,
            "description": "Maximum messages to return (recommended 50 or less).",
            "type": "integer"
          },
          "max_date": {
            "default": null,
            "description": "Inclusive maximum date filter (ISO 8601 date or datetime). Omit for no upper bound.",
            "type": "string"
          },
          "min_date": {
            "default": null,
            "description": "Inclusive minimum date filter (ISO 8601 date or datetime). Omit for no lower bound.",
            "type": "string"
          },
          "public": {
            "default": null,
            "description": "If true, prefer chats with a public username; if false, without. Does not apply to private DMs. Omit to skip this filter.",
            "type": "boolean"
          },
          "query": {
            "description": "Search terms, comma-separated for multiple terms (OR-style global search). Required.",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search_messages_globally"
    },
    {
      "description": "Send text and optional file attachments to a Telegram chat. Supports reply-to (including forum topics and channel discussion groups), parse_mode: classic markdown/html/auto (entities) or rich (Rich Message document; dialect auto-detected). parse_mode=rich cannot be combined with files. File attachments as http(s) URLs, local paths, or data: URIs. When files are provided, the message text becomes a caption. For channel posts with reply_to_id, automatically posts in the linked discussion group. schedule_date (ISO 8601, must be in the future) queues the message instead of delivering it now, so the result carries status='scheduled' plus scheduled and schedule_date. save_as_draft=true saves the text as the chat's draft instead of sending it (empty message clears the draft; user sessions only, bots cannot; text-only, so no files, no parse_mode='rich', no schedule_date). Success: dict with message_id, date, chat, text, status='sent', and sender info (rich messages also set rich=true and rich_format). Error: dict with ok=false and error string. Use send_message to create new messages; use edit_message to modify existing ones. Use send_message_to_phone when targeting a phone number instead of a chat_id.  Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "chat_id": {
            "description": "Target chat: numeric id (e.g. -100…), username without @, or 'me' for Saved Messages.",
            "type": "string"
          },
          "files": {
            "default": null,
            "description": "List of attachment URLs, local paths, or data URIs (one or more strings). data: URIs (data:<mime>;base64,<payload>) work in all server modes; local paths work in stdio mode only.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "message": {
            "description": "Message text. When sending files, used as caption.",
            "type": "string"
          },
          "parse_mode": {
            "default": "auto",
            "description": "'markdown'/'html'/'auto': classic entity formatting (auto detects). 'rich': Telegram Rich Message document; dialect auto-detected (known HTML tags outside code → rich HTML, else rich markdown). Default is 'auto'. parse_mode='rich' cannot be combined with files.",
            "enum": [
              "markdown",
              "html",
              "auto",
              "rich"
            ],
            "type": "string"
          },
          "reply_to_id": {
            "default": null,
            "description": "Telegram message id to reply to. For forums, topic root id; for channel posts, post id (may create a comment). Omit for a new top-level message.",
            "type": "integer"
          },
          "save_as_draft": {
            "default": false,
            "description": "If true, save the text as the chat's draft instead of sending it (an empty text clears the existing draft). User sessions only — bot accounts cannot call messages.saveDraft. Cannot be combined with schedule_date, files, or parse_mode='rich'.",
            "type": "boolean"
          },
          "schedule_date": {
            "default": null,
            "description": "ISO 8601 instant at which Telegram should deliver the message, e.g. '2026-10-20T09:00:00Z' or '2026-10-20T12:00:00+03:00'. Must be in the future. On send: queues the message instead of delivering now. On edit: reschedules an already-queued message.",
            "type": "string"
          }
        },
        "required": [
          "chat_id",
          "message"
        ],
        "type": "object"
      },
      "name": "send_message"
    },
    {
      "description": "Send to a phone number: may create a temporary contact, then send text or files. Supports parse_mode: classic markdown/html/auto or rich (Rich Message; dialect auto-detected). parse_mode=rich cannot be combined with files. schedule_date (ISO 8601, future) queues the message instead of delivering now; save_as_draft=true saves the text as the draft in that chat instead of sending. Success: send result plus contact_was_new / contact_removed when applicable.  Full documentation: https://github.com/leshchenko1979/fast-mcp-telegram/blob/main/docs/Tools-Reference.md",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "files": {
            "default": null,
            "description": "List of attachment URLs, local paths, or data URIs (one or more strings). data: URIs (data:<mime>;base64,<payload>) work in all server modes; local paths work in stdio mode only.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "first_name": {
            "default": "Contact",
            "description": "First name when creating a temporary contact.",
            "type": "string"
          },
          "last_name": {
            "default": "Name",
            "description": "Last name when creating a temporary contact.",
            "type": "string"
          },
          "message": {
            "description": "Message text. When sending files, used as caption.",
            "type": "string"
          },
          "parse_mode": {
            "default": "auto",
            "description": "'markdown'/'html'/'auto': classic entity formatting (auto detects). 'rich': Telegram Rich Message document; dialect auto-detected (known HTML tags outside code → rich HTML, else rich markdown). Default is 'auto'. parse_mode='rich' cannot be combined with files.",
            "enum": [
              "markdown",
              "html",
              "auto",
              "rich"
            ],
            "type": "string"
          },
          "phone_number": {
            "description": "E.164 phone number with country code, e.g. +1234567890 (must be on Telegram).",
            "type": "string"
          },
          "remove_if_new": {
            "default": false,
            "description": "If true, delete the contact after send when it was created only for this send.",
            "type": "boolean"
          },
          "reply_to_msg_id": {
            "default": null,
            "description": "Reply to this message id in the target chat after resolve.",
            "type": "integer"
          },
          "save_as_draft": {
            "default": false,
            "description": "If true, save the text as the chat's draft instead of sending it (an empty text clears the existing draft). User sessions only — bot accounts cannot call messages.saveDraft. Cannot be combined with schedule_date, files, or parse_mode='rich'.",
            "type": "boolean"
          },
          "schedule_date": {
            "default": null,
            "description": "ISO 8601 instant at which Telegram should deliver the message, e.g. '2026-10-20T09:00:00Z' or '2026-10-20T12:00:00+03:00'. Must be in the future. On send: queues the message instead of delivering now. On edit: reschedules an already-queued message.",
            "type": "string"
          }
        },
        "required": [
          "phone_number",
          "message"
        ],
        "type": "object"
      },
      "name": "send_message_to_phone"
    }
  ]
}

What the leaf hashes

{"body":"9a4a977402f2190cfb53a92c1680e88efbef4308c7e6705eb5c111c5024ded92","id":258358,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793030083452410,"prev":null,"subject":"d9cd60ce-fac0-4c0f-b79a-6adbff38fad1","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. 0x69a9c8e8c9bcd02c9c68b1ee7f4bcdb312a870a4eff32faeb9c411e176024211
  2. 0xaad475bf7fe329832ffa654f24a1249ef9180a51f5b626639996b4fac4c1162f
  3. 0x385d33bf6355b9215d4917e728e503de052084c9ad2baa6d5833ea5ed648e1a8
  4. 0x78c74588c44d00e46d89209afdd9e230b4e7bd350aece34810deee3c716270c2
  5. 0x008eac61370d047ae08c8ee59cc6ea59cf306f4592bc96219eedc49ff8187213
  6. 0xaec7bd3cfe0602aea43e32c05628d5fa605d2d05bc867bb4e1bf346ffd730724
  7. 0xbe43d86702d0209b1b930aaf18587bd6b8aca6803a634967fcae49db776562d9
  8. 0xffa27f4a04292ce360f77801f73e61ba5d3fb82972531543fc89be69ceb4cf0b
  9. 0xcfea3d374e09f3953efca8897edd1e7d29fad8cb44d3ae4b2edf59bc292470ca
  10. 0x6b4a90af13dfa1f8aab9268ee64011e6443b055ffb0f0f11e33c1a0847946fc9
  11. 0xe8b20383a9232d45872f50d7c4c484b3ffe756328a5a1e2d63218cd46b95695c
  12. 0x9483a0a7a066ffc2fb890c8f34dbc91bf373e546e4a3800b76064288b3cc4875
  13. 0x5f350d70c252ff1169c0210fd45fce1b0ab8d7316f048741a9e90a6c8cb65dcf
  14. 0x9a79c65e077cd9da9d436b3ade6f5ddc0d244510c4d5903ef2f02d81205f7666
  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