{
  "markdown": "# Morse — Telegraph in Telegram\n\nA Telegraph Hackathon Season I, **Track 3** application.\n**Live: <https://telegraph-morse.vercel.app>** · [public ledger](https://telegraph-morse.vercel.app/#ledger) · [API & MCP](https://telegraph-morse.vercel.app/keys)\n\n**Telegraph in Telegram. Ask, get an answer from a ranked miner, with a receipt.** Send a question\nto the bot — no wallet, no key, no sign-up — and [Telegraph](https://telegraphprotocol.com)'s own\nrouter classifies it and picks a ranked miner (Morse falls back to its own routing only when the\nrouter does not answer), Morse pays the x402 fee from one app-owned wallet, and the answer comes\nback with a **receipt**: the miner that served it, the intent and why it was chosen, that miner's\nrank, its confidence, the cost, the latency, the on-chain settlement transaction, and a\n`signal_hash` you can verify on the node. The same thing is on the web and behind one hosted\nMCP/REST endpoint for agents.\n\nLive example, 2026-09-02: LiveCert #1 for `SSL_VERIFICATION`, $0.01, signal\n[`0x0691ca3f…0821a1`](https://telegraph-morse.vercel.app/verify/0x0691ca3f54514e5ea5ce342d8dadc30c58c48ada711cdfde01e171b4ee0821a1),\nsettled on-chain as [`0x31b9b480…2af007`](https://sepolia.basescan.org/tx/0x31b9b480548034ad571448194ea09bf12a13f3ad2903f88d3307dd191e2af007).\n\nEvery call Morse makes is in a public ledger, so \"people used it\" is checkable rather than\nclaimed.\n\n**What Morse deliberately does not do.** It does not re-rank miners. Telegraph's leaderboard is\nthe consensus and the router's pick is the answer, so there is no podium, no automatic second\nopinion and no consensus report. Those were built, measured and retired on 2026-09-04 after an\norganizer pointed out that paying several miners per question to re-derive the ranking is what the\nprotocol already does once for everyone, does not work economically for a user, and looks like\nspam. The ledger keeps their rows, labelled; the code leaves before the freeze (GAPS G32).\n\n**One check that does not rely on Morse's word.** [`/proof`](https://telegraph-morse.vercel.app/proof)\nreads the payer wallet's USDC transfers on Base Sepolia from a public indexer and matches them,\nhash for hash, against the ledger's settlement transactions — the \"actual volume of Telegraph\ncalls\" counted from the chain, with any settlement the ledger lacks shown rather than hidden. It is\ncomputed from data that already exists and spends nothing.\n\n**Not an aggregator.** Morse does not pick providers or blend answers. Telegraph's ranked router\npicks the miner; Morse pays and keeps the receipt. When you *do* want a specific miner — the\ndispatch the organizers' own reference apps use — name it: `telegraph_ask_miner` over MCP,\n`{\"miner\": \"livecert\", \"question\": \"…\"}` on REST, `/miner livecert <question>` in Telegram. The\nreceipt says routing was bypassed at your request.\n\n## Why\n\nConsuming Telegraph today needs a wallet, testnet USDC from a faucet, and an x402 client. That\nkeeps out everyone who is not already a developer with a burner key, and it means the network's\n\"real usage\" is mostly machines calling one miner. Morse is the missing front door, and because\nevery answer carries a verifiable receipt, its usage is evidence rather than a claim.\n\n## Quick start\n\n### Claude Code (MCP, no wallet)\n\nGet a free key at [/keys](https://telegraph-morse.vercel.app/keys), then:\n\n```bash\nclaude mcp add --transport http morse https://telegraph-morse.vercel.app/mcp --header \"Authorization: Bearer morse_YOURKEY\"\n```\n\nThen ask Claude anything the network can answer — *\"use telegraph_ask: is the TLS certificate for\ngithub.com valid, and who issued it?\"*, then *\"use telegraph_verify_signal on that signal_hash\"*.\nTools: `telegraph_ask`, `telegraph_ask_miner`, `telegraph_recipe`, `telegraph_verify_signal`. Intents\nand leaderboards are free over REST at `/v1/intents` and `/v1/leaderboard/{INTENT}`; the three MCP\ndiscovery tools that duplicated Telegraph's explorer were removed on 2026-09-05.\n\n### Cursor, or any Streamable-HTTP MCP client\n\n```json\n{\n  \"mcpServers\": {\n    \"morse\": {\n      \"url\": \"https://telegraph-morse.vercel.app/mcp\",\n      \"headers\": { \"Authorization\": \"Bearer morse_YOURKEY\" }\n    }\n  }\n}\n```\n\n### curl\n\n```bash\ncurl -X POST https://telegraph-morse.vercel.app/api/keys -H \"content-type: application/json\" -d '{\"label\":\"my-laptop\"}'\n```\n\n```bash\ncurl -X POST https://telegraph-morse.vercel.app/v1/ask -H \"Authorization: Bearer morse_YOURKEY\" -H \"content-type: application/json\" -d '{\"question\":\"What is the current weather in Chennai?\"}'\n```\n\nAsk one named miner directly (miner authors: your own slug goes here):\n\n```bash\ncurl -X POST https://telegraph-morse.vercel.app/v1/ask -H \"Authorization: Bearer morse_YOURKEY\" -H \"content-type: application/json\" -d '{\"miner\":\"livecert\",\"question\":\"Is the SSL certificate for github.com valid?\"}'\n```\n\nFree, no key needed — the discovery endpoints and the ledger:\n\n```bash\ncurl -s https://telegraph-morse.vercel.app/v1/intents\n```\n\n```bash\ncurl -s https://telegraph-morse.vercel.app/v1/leaderboard/SSL_VERIFICATION\n```\n\n```bash\ncurl -s https://telegraph-morse.vercel.app/api/stats\n```\n\n### Telegram\n\n**<https://t.me/MyMorse_Bot>** — `/start` shows tappable example questions; answers free text.\nCommands: `/miner <slug> <question>`, `/safe`, `/wallet`, `/weather`, `/fact`, `/verify`,\n`/stats`.\nEvery answer carries the same receipt the web and API surfaces return, and lands in the same\npublic ledger. In a group, Morse answers only when it is @mentioned or replied to, so a busy chat\nnever pays for answers nobody asked for.\n\n## What a receipt contains\n\n| field | meaning |\n| --- | --- |\n| `minerSlug`, `minerId` | which miner the Engine routed to |\n| `intent` | the canonical intent the router classified the question as |\n| `minerRank` | that miner's current leaderboard rank for the intent |\n| `routedBy` | `engine` when Telegraph's router chose the miner, `morse` when the fallback did |\n| `routerReasoning` | the router's stated reason, or which fallback rule fired |\n| `settlementTx` | the USDC transfer on Base Sepolia, from the node's `payment-response` header |\n| `confidence` | the miner's own confidence, read from its declared `signal_mapping` — or \"not reported\" |\n| `costUsd`, `durationMs` | what the call cost and how long it took |\n| `signalHash` | verify at `/verify/{hash}`, or on the node at `GET /engine/v1/signal/{hash}` |\n\n`/verify/{hash}` shows the node's record, the payer wallet **and whether it is Morse's**, the\nnode's own `keccak256`-over-payload attestation, and the payload the hash covers. The node does not\npublish a per-call settlement transaction (0 of 8 user-paid signals sampled on 2026-09-02 carried\none), so the on-chain trail is the payer wallet's USDC history on BaseScan, which Morse links.\n\n## Run it yourself\n\n```bash\ngit clone https://github.com/Harshyadav442277/telegraph-morse && cd telegraph-morse && npm ci\n```\n\n```bash\nnpm run typecheck && npm test\n```\n\n```bash\ncp .env.example .env && npm run dev\n```\n\nWithout `EVM_PRIVATE_KEY` and a non-zero `DAILY_BUDGET_CALLS`, asking is refused with an honest\nmessage; the site, the ledger and the free discovery endpoints all still work. The end-to-end\njudge journey runs against any deployment:\n\n```bash\nnpm run e2e\n```\n\nThat suite is free to run. The single paid step is gated behind `MORSE_E2E_PAID=1` so no schedule\ncan manufacture traffic.\n\n## Docs\n\n- [GO-LIVE.md](GO-LIVE.md) — the operator's runbook for the wallet, the bot and the first paid call\n- [PLAN.md](PLAN.md) — claim, reality checks, judging criteria, schedule, tooling\n- [PRD.md](PRD.md) · [ARCHITECTURE.md](ARCHITECTURE.md) · [PHASES.md](PHASES.md)\n- [GAPS.md](GAPS.md) — what is missing, broken, or unverified (read before trusting a claim)\n- [MEMORY.md](MEMORY.md) — decisions and lessons\n- [DEMO.md](DEMO.md) — the judge journey with exact expected output\n- [docs/TELEGRAPH_FACTS.md](docs/TELEGRAPH_FACTS.md) — protocol facts, sourced and dated\n\n## Assumptions and limitations\n\n- **Testnet.** Base Sepolia, testnet USDC. Answers are real; the money is not.\n- **Telegraph routes first; Morse only falls back.** The network's router gets 20 seconds; if it\n  does not answer (it timed out at ~47s for a day on 2026-09-02), Morse classifies the intent with\n  keyword rules and calls the best-ranked miner directly. Every receipt and ledger row says which\n  of the two happened (GAPS G17).\n- **The ledger's early rows are our own verification calls**, not users — real and receipted, but\n  not adoption (GAPS G20).\n- **\"Users\" means distinct salted identity hashes** — a Telegram user id, a web session cookie, or\n  an API key. One person on two surfaces counts twice; ten people reading one forwarded answer\n  count once. Morse publishes the method next to the number and never rounds it up (GAPS G4).\n- **The signal hash is shown, not re-derived.** The node states it is `keccak256` over the payload\n  and reports `verified: true`; eleven serialisations of the payload as served failed to reproduce\n  it, so Morse displays that attestation rather than claiming to have recomputed it (GAPS G3). What\n  Morse establishes independently is the **payer**: the wallet on the record, checked against its own.\n- **Confidence is heterogeneous.** Miners report it in different shapes or not at all; Morse\n  normalises what it can and says \"not reported\" otherwise (GAPS G8).\n- **A direct call to a named miner may not be possible for every miner.** Direct calls are built\n  from the miner's manifest and declared input schema, and some miners reject a request they did\n  not shape themselves — which fails honestly and costs nothing (GAPS G14, G30).\n- **`/proof` depends on a third-party indexer.** It reads Blockscout, which can lag the chain by a\n  few blocks or be down; the page then says so and shows the ledger alone. It proves payments, not\n  people. Two settlements on chain have no ledger row — calls Morse recorded as timed out that the\n  network settled anyway — and are listed rather than removed (GAPS G29).\n- **Nothing is written on chain by Morse.** Payments settle on Base Sepolia through x402; Morse\n  reads that trail but does not anchor verdicts or run ERC-8183 jobs (GAPS G27).\n\n## License\n\nMIT\n",
  "bytes": 10221,
  "sha": "ee577f662a9c977ed7c5d9a8916ac598d6ef3dbf1c7825e562ba093389f8da54",
  "repo_slug": "harshyadav442277/telegraph-morse",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_harshyadav442277_telegraph_mor_162bc275/readme"
}