Robotbase Content

io.github.wygogogo19Published by GitHub account wygogogo19v0.32.3Updated Oct 30, 2026

Agent MCP: 35 tools — social hot lists, attention trends, 80k+ books, 17 web tools.

Overview

AI-generated overview

Remote MCP endpoint giving assistants 17 web tools (search, fetch, crawl, extract, screenshot, monitors), social hot lists, attention trends and 16…

What you can do
  • Search the live web and read, batch-fetch, map, crawl or screenshot public pages, with structured extraction, schema extraction, feeds, metadata and page-change diffs
  • Set up, list and delete scheduled page-change monitors and poll asynchronous crawl jobs
  • Read cross-platform social hot lists and attention signals from Google Trends, Wikipedia pageviews and Google Books Ngram
  • Browse the Cyber Library catalog, search books by title or author, and read tables of contents, chapters or whole-book Markdown
  • Run keyword, semantic and fused passage search, pack passages into a token budget for RAG, and verify quotations with citations
When to use it
Useful when an assistant needs current web facts, page text or visual layout, wants to watch pages for changes, or needs citable public-domain book passages for research and RAG grounding.
Requirements
Remote Streamable HTTP endpoint; no API key, account or subscription. Free allowances are per IP (100 web calls/day per edition, 5 CyberLibrary calls/day), then metered x402 credits paid in USDC on Base or Solana from the caller's own wallet.
Before you install
Past the free allowance, calls return Payment Required and require spending USDC credits; the payment payload is re-sent with each call. Monitors and crawl jobs are tied to the calling IP and store snapshots. Read-only tools, but they fetch third-party pages and send queries to external search providers.

Installation

In SourceWeft

  1. Open Robotbase Content in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.wygogogo19%2Frobotbase-content/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "robotbase-content": {
      "type": "http",
      "url": "https://content.robotbase.cc/mcp"
    }
  }
}

README

RobotBase MCP Server

One MCP endpoint for agents: search the web, read any page, verify on-chain payments, and pay per call — no API keys.

免鉴权 · 无追踪 · 只读 | 自建裸金属全节点,对 Agent 暴露统一的「验证 + 风控」语义入口

Hosted surface: three MCP editions, all including the full 17-tool web toolbox: Web3 (https://web3.robotbase.cc/mcp, 65 tools — BTC/ETH/XMR/ZEC/TRON verification & risk, prediction markets, crypto trends), Dev (https://dev.robotbase.cc/mcp, 18 tools — GitHub/HF/npm/PyPI/HN trends + web), and Content (https://content.robotbase.cc/mcp, 35 tools — social hot lists, attention trends, 16 CyberLibrary book tools + web). https://robotbase.cc/mcp is the Web3 compatibility alias. This repository is the dependency-free reference implementation: 45 tools (41 free verification + 2 risk + 2 web).

EditionEndpointToolsAudience
Web3https://web3.robotbase.cc/mcp65chain verification, risk, prediction markets, crypto trends
Devhttps://dev.robotbase.cc/mcp18GitHub/HF/npm/PyPI/HN trends + web docs tooling
Contenthttps://content.robotbase.cc/mcp35social hot lists, attention trends, books + web

https://robotbase.cc/mcp is a compatibility alias of Web3 for existing clients — it is not a separate MCP server and should not be listed as a separate connector.

All four include the 17-tool web toolbox. Free web allowance is 100 calls/day/IP per edition; the x402 credit balance is shared.

Base and Solana data tools were retired on 2026-10-18. The five-chain surface is Bitcoin, Ethereum, Monero, Zcash and Tron. x402 payments still settle in USDC on Base or Solana; that is a payment rail, not a data service.

[Hosted tools] [Reference tools] [Protocol] [Transport] [Glama] [MCP Registry]

Hosted endpoint: https://robotbase.cc/mcp · Landing page: https://robotbase.cc/mcp · Server card: https://robotbase.cc/mcp/server.json · Live usage audit: https://robotbase.cc/mcp/stats

Listed in the official MCP Registry as io.github.wygogogo19/robotbase-mcp · indexed by Glama · published on Smithery (wygogogo/robotbase-mcp).


Why

An autonomous agent handling crypto has exactly two blocking questions: did this payment actually settle, and what will the next one cost. Ask an LLM those today and it has nowhere reliable to look — the MCP ecosystem is rich in wrappers around hosted indexers and thin on self-run infrastructure.

The Web3 edition answers with 65 strictly read-only tools (44 free verification tools + 2 metered risk tools + 2 market/trend tools + 17 web tools: 14 metered plus 3 free helpers — web_crawl_job, web_monitor_list and web_monitor_delete); this reference implementation ships 45 of them (41 free + 2 risk + 2 web). Everything is backed by our own full nodes, local indexes and a metered web layer: btc_get_transaction for the settlement check, btc_get_fee_rates and btc_get_mempool_state for the price of the next one, zec_get_pool_status for Zcash shielded-pool supply, a full Monero surface (xmr_get_fee_rates, xmr_get_transaction, xmr_verify_payment, …) read straight off our own monerod, an Ethereum surface (eth_get_transaction, eth_get_fee_rates, eth_read_contract) on our own Reth node, and a Tron surface (tron_read_contract, tron_get_transaction) on our own java-tron node.

Pricing

TierWhat it coversLimit
Verification (41 tools)Fee, mempool, tx/block/address verification, node and shielded-pool telemetry, optional raw-tx relayFree forever, no key, no signup
Risk intelligence (2 tools)tron_check_address_risk, tron_verify_usdt_transfer5 calls/day per IP free, resets 00:00 Asia/Shanghai
Hosted web tools (17 tools)web_search, web_fetch, web_crawl, web_map, web_extract, web_act, web_screenshot, web_feed, web_metadata, web_fetch_batch, web_diff, web_monitor_* and helpers — one shared web bucket100 calls/day per IP, per edition, resets 00:00 Asia/Shanghai
x402 credit packsPast the free allowance, each metered call costs $0.01 (1 credit: risk 1, web_search 1, web_fetch 1)10 calls / 0.10 USDC or 100 calls / 1.00 USDC in USDC on Base or Solana, paid from the caller's own wallet — payment rail only, no Base/Solana chain data

Base and Solana are a payment rail only. x402 settles in USDC on Base or Solana, but RobotBase does not serve Base or Solana chain data: those eight data tools were retired on 2026-10-18, and the roster is Bitcoin, Ethereum, Monero, Zcash and Tron.

Every metered answer carries its own _metering block (allowance, reset time, calls left), and a call that fails local validation — a malformed address or txid — does not consume the allowance. Past the free allowance the tool returns Payment Required and names the top-up page instead of a partial result.

There is no API key, no account and no subscription — from 2026-10-16 the paid tier is x402 machine payment only. When the free allowance runs out the tool answers 402 Payment Required with the full machine-readable terms in structuredContent.accepts[]. An agent settles one credit pack (EIP-3009 on Base, a signed transfer on Solana), then re-sends that same payment payload in params._meta["x402/payment"] on every later call: settlement is idempotent per payment nonce, so the payload is never charged twice — each call simply spends one credit until the pack is empty. Buy another pack to continue.

Replay works the same on both networks. For Solana the payload carries only the signed transaction, so the server recovers the payer from the settled-payment ledger by the transaction hash — it never re-simulates a transaction that already landed.

The x402 payment layer (open source)

x402_pay.py is the complete paid-tier implementation and it ships in this repo. It is standard library only — it talks HTTP to your facilitator and keeps a sqlite ledger. It never touches a private key and never submits a transaction.

What it does:

PieceBehaviour
402 challengestructuredContent.accepts[] lists every network/asset/pack combination, with extra.feePayer for Solana and the EIP-712 domain for EIP-3009
SettlementPOST /verify then POST /settle on your facilitator, once per payment nonce
Credita settled pack credits calls against the payer address; the pack is spent one call at a time
Replaythe client re-sends the same payload; the ledger short-circuits it, so nothing is simulated or settled twice (EVM and Solana alike)
Retry safetythe same payer + tool + arguments within 5 minutes returns the cached answer with charged_this_call=false
BalanceGET /credits?payer=<address> returns credits left, calls charged, last payment and the live pack list
Exhaustionthe tool answers PaymentRequired / insufficient_credit instead of a partial result
Failure safetya tool that fails local validation returns _no_charge, so a bad argument never burns a credit
Concurrencyspend() is a single atomic UPDATE ... WHERE balance>0; the balance cannot go negative
Reconciliationif a settlement's response is lost, EIP-3009 authorizationState is checked on-chain before crediting again

Enable it entirely through environment variables (see examples/x402.env.example):

bash
export RB_X402_ENABLED=1export RB_X402_FACILITATOR_URL=https://facilitator.exampleexport RB_X402_OPTIONS='[{"network":"eip155:8453","asset":"0x…","pay_to":"0x…","decimals":6, …}]'export RB_X402_PACKS='[{"amount_atomic":"100000","calls":10,"label":"10 calls"}]'export RB_X402_LEDGER_DB=./x402_credit.dbpython3 server.py

With those unset, the server runs the free tier only. This repo ships the 45 chain/web tools as a reference implementation — the only differences from the hosted endpoint are where the per-chain backends point (your RB_* variables instead of ours) and the hosted-only CyberLibrary bridge (16 book tools) and fifteen additional web tools (screenshot, map, batch, feed, metadata, crawl, extract, act, extract_schema, diff, crawl_async, crawl_job, monitor_set, monitor_list, monitor_delete), which are not included here.

Check a payer's balance without spending a call:

GET https://robotbase.cc/mcp/credits?payer=<the address that paid>→ { "found": true, "credits_remaining": 19, "calls_charged": 1,    "last_payment": { … }, "packs": [ … ] }

EVM addresses are case-insensitive; there is no authentication because the balance is derived from public on-chain payments.

Connect (3 lines)

json
{  "mcpServers": {    "robotbase": { "url": "https://robotbase.cc/mcp" }  }}

Works with Claude Desktop, Cursor, VS Code (remote MCP), and any MCP client supporting Streamable HTTP (2025-06-18). No API key needed.

bash
curl -s https://robotbase.cc/mcp -H 'content-type: application/json' \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",       "params":{"name":"btc_get_fee_rates","arguments":{}}}'

Tools (45 — reference implementation)

Public order is web-first, then high-frequency verification (the order returned by tools/list and server.json); the hosted endpoint puts its 16 CyberLibrary tools last.

The hosted endpoint https://robotbase.cc/mcp has 79 tools: these 45 plus 3 free XMR wallet/merchant tools, the 16 CyberLibrary book tools (cyberlibrary_catalog_index, cyberlibrary_language_shard, cyberlibrary_book_meta, cyberlibrary_get_toc, cyberlibrary_get_chapter, cyberlibrary_get_markdown, cyberlibrary_cite, cyberlibrary_search_books, cyberlibrary_fulltext_search, cyberlibrary_service_info, cyberlibrary_get_chunks, cyberlibrary_verify_quote, cyberlibrary_search_passages, cyberlibrary_rag_context, cyberlibrary_semantic_search, cyberlibrary_search) twelve additional web tools (web_screenshot, web_map, web_fetch_batch, web_feed, web_metadata, web_crawl, web_extract, web_act, web_extract_schema, web_diff, web_crawl_async, web_crawl_job) and 3 scheduled-monitor tools (web_monitor_set, web_monitor_list, web_monitor_delete).

Web tools (high-frequency)

The hosted endpoint exposes seventeen web tools: web_search, web_fetch, web_screenshot, web_map, web_fetch_batch, web_feed, web_metadata, web_crawl, web_extract, web_act, web_extract_schema, web_diff, web_crawl_async, web_crawl_job, web_monitor_set, web_monitor_list and web_monitor_delete. This reference implementation ships the first two; the other fifteen are hosted-only. They are listed first in the public tools/list order.

Two general-purpose web tools sit next to the on-chain surface. They are the entry point an agent uses before it verifies: search the live web, read the one page that looks authoritative, then check the claim on chain. No API key is needed to call them.

ToolWhat it doesTypical question
web_search(query, count?, freshness?, site?, lang?)Ranked web results with title, URL, snippet and published date. Serper is the primary provider, with Tavily, Brave and a zero-key cn.bing RSS feed as fallbacks; the answer carries a provider field. Results are deduplicated (one domain cannot take more than ~40% of a result set) and cached for up to 10 minutes"What is the BTC fee market saying today?" "Recent Zcash governance proposals?"
web_fetch(url, max_chars?, format?)Readable text/markdown of one public URL: robots.txt is checked first and scripts/nav/header/footer are stripped by a standard-library extractor. Direct fetch is tried first; pages blocked from this node are fetched through the provider fallback and marked source=provider. Response capped at 12,000 characters per call"Read this article and summarise it" "Turn this URL into clean markdown"

Shared free allowance: the two web tools share 100 calls/day per IP, in a bucket separate from the 5/day risk allowance — searching can never consume the risk tools' free calls. A cached search still counts as one call against the free allowance; a paid call answered from cache does not spend a credit. Past the allowance each call is 1 x402 credit ($0.01), charged through the same USDC credit balance as the risk tools.

Boundaries: web_fetch reads one public URL, never a batch or a whole site; it does not log in, break paywalls, follow noindex tricks or bypass robots.txt. All fetching is SSRF-guarded: only http/https, only ports 80/443, private / loopback / link-local / reserved / CGNAT addresses are rejected, every redirect hop is re-validated, the resolved IP is pinned to the connection, and the response body is capped at 2 MB. Audit stores no query string and no URL — only the tool name, latency, result and a truncated IP hash.

Provider configuration (optional). The reference implementation is standard library only. Set RB_SERPER_KEY for the primary search provider, and optionally RB_TAVILY_KEY / RB_BRAVE_KEY for the fallback chain (cn.bing RSS needs no key). Set RB_TAVILY_DAILY_CREDITS (default 15) to cap daily Tavily credits, and RB_SERPER_DAILY_CALLS (default 200) to cap Serper calls. With no provider key at all, web_search degrades to the zero-key cn.bing RSS feed and web_fetch still works for directly reachable pages.

Chain verification tools

ToolWhat it doesTypical question
list_chainsEvery chain on the roster with its state (live|provisioning|planned) and availability"Which chains do you support? Are they online?"
chain_status(chain)Node height, sync progress, peers, mempool, version (btc|eth|xmr|zec|tron)"Is the Monero node synced?"
robotbase_capabilitiesWhat each node can and cannot answer, incl. pruning/retention limits"Can you still read that far back?"
robotbase_servicesGateway-wide service health"Give me an overall health check"
btc_get_fee_ratesFees for 1/2/3/6/12/24-block targets + mempool floor, in sat/vB"What fee should I pay right now?"
btc_get_mempool_stateMempool depth, capacity load, min fee, total fees + busy/normal verdict"Is Bitcoin congested right now?"
btc_get_transaction(txid)BTC transaction: confirmations, block, I/O summary"Did this payment actually settle?"
btc_get_block(height|blockhash)Block summary (defaults to tip)"How many txs in the latest block?"
btc_get_network_statsDifficulty, hashrate, total txs and current tx/s, client, peers, relay fee, uptime, synced indexes"How much hashrate secures Bitcoin?"
btc_get_address(address)Balance, UTXOs, tx count, recent txs (P2PKH/P2SH/bech32/bech32m)"How much BTC is in this address?"
broadcast_raw_transactionRelay an already-signed BTC transaction through our own node (testmempoolaccept first; operator-gated)"Broadcast this signed tx for me"
eth_get_transaction(txid)ETH transaction: status, gas, fee, confirmations, finalized, and ERC-20 transfers decoded from the receipt logs with the token's own decimals resolved"Did this ETH or USDT/USDC payment settle?"
eth_get_fee_ratesBase fee (now and next), priority-fee percentiles, and cost estimates for a plain and an ERC-20 transfer"What will my Ethereum transaction cost?"
eth_get_account(address)ETH balance, nonce, and whether the address is a contract"Is this an EOA or a contract?"
eth_get_block(height?|block_hash?)Block by number, tag (latest/finalized/safe) or hash: txs, gas used vs limit, base fee, builder"How full is Ethereum right now?"
eth_get_logs(from?, to?, address?, topic0?)Event logs over a range with ERC-20 Transfers decoded; auto-narrows when a query exceeds the node's result cap"Who moved this token in the last N blocks?"
eth_read_contract(contract, function, argument?)Read-only eth_call on our own Reth node: balanceOf, allowance, decimals, symbol, name, totalSupply, or any raw selector"What is this address's USDT balance?"
tron_get_node_statusTron node: tip height, finalized (solidity) height and lag, peers, client version, txs in the tip block"Is the Tron node synced?"
tron_get_current_blockThe block being produced: number, id, timestamp, tx count by contract type, producing witness"How busy is Tron right now?"
tron_get_block(height|block_id)One block: producer, timestamp, tx count by type, tx ids"What is in block 87,147,698?"
tron_list_proposals(limit?)Governance proposals: id, proposer, state, approvals and the parameters they would change"Is a chain-parameter change pending?"
tron_get_transaction(txid)One transaction: success/reverted, energy used, confirmations, finalized-on-solidity, and TRC-20 transfers decoded from the receipt logs (token, from, to, amount)"Did this USDT payment land, and for how much?"
tron_get_account(address)TRX balance, activation state, energy and bandwidth, witness flag, account age"How much TRX is in this address?"
tron_get_contract(address)Is the ABI published, name, creator, function list, code hash, TRC-20 detection"Is this contract verified?"
tron_read_contract(contract, function, argument)Read-only constant call run by our own node — balanceOf, allowance, decimals, symbol, name, totalSupply, or any raw selector. No key, no state change"What is this address's USDT balance?"
tron_get_chain_economicsEnergy price (sun/unit), transaction fee, account creation fee, witness pay per block, energy/bandwidth limits, next maintenance"What will a TRC-20 transfer cost in TRX?"
tron_list_witnesses(limit)Super representatives: blocks produced, missed, votes, websites"Who produces Tron blocks?"
xmr_get_node_statusMonero node: true last-block height, sync flag, difficulty, txpool, database size, monerod version, peers"Is the Monero node synced?"
xmr_get_fee_ratesFee estimate per kB across ascending priority tiers, read from our own node"What fee will my XMR transaction need?"
xmr_get_mempool_statePending tx count, total bytes and fees, age of the oldest pending tx, double-spend/failing counts"Is Monero congested right now?"
xmr_get_block(height|block_hash)One block header: time, tx count, reward, difficulty, weight, protocol version"What is in block 3,784,931?"
xmr_get_recent_blocks(n)Recent blocks plus the observed block interval vs the 120s target"Are XMR blocks healthy?"
xmr_get_output_distribution(from?, to?)Spendable outputs per ring-size bucket — Monero's anonymity-set side. Raw counts, never a "privacy score". Data lags the tip by ~5,000 blocks and says so"How large is the spendable output set?"
xmr_get_transaction(txid)Is this txid mined, which block, confirmations, size, outputs, ring size. Amount/sender/recipient are reported as not disclosed by the protocol — Monero hides them by design and no third party can recover them"Did my XMR transfer get mined?"
xmr_get_network_statsNetwork hashrate, difficulty, emission and fees over the last 720 blocks, protocol version, next hard fork"How much hashrate secures Monero?"
xmr_verify_payment(txid, address, tx_key|signature)Cryptographic Monero payment verification: give it a txid plus the transaction key (get_tx_key) or a tx proof (get_tx_proof) from your own wallet and it verifies the transaction really pays that address, for how much, with how many confirmations. Runs on RobotBase's own monero-wallet-rpc instance (separate service, separate credentials, empty wallet — no funds, no receiving keys)"Did this XMR payment actually arrive?"
zec_get_pool_statusZcash node state plus all six value pools (transparent/sprout/sapling/orchard/ironwood/lockbox) with 1h/24h deltas"How much ZEC is shielded, and is it growing?"
zec_get_recent_blocks(n)Recent Zcash blocks"Are ZEC blocks healthy?"
zec_get_network_statsMempool, node version, difficulty, hashrate, chain progress, block reward, funding streams (ZCG) and lockbox"How much hashrate secures Zcash, and where does the subsidy go?"
zec_get_treestate(block_hash?|height?)Sapling / Orchard / Ironwood shielded commitment-tree anchor roots at a block"How is the shielded set advancing?"
zec_get_transaction(txid)ZEC transaction: confirmations, block, active-chain, and how much is transparent vs shielded. Shielded amounts/parties are reported as not disclosed by the protocol"Did this ZEC payment land?"

Risk intelligence (metered)

Two tools answer what a free block explorer cannot. They are aggregation over public datasets refined in our own middle layer; the TRON settlement check reads our own node inside its retention window and falls back to TronGrid for older transactions.

ToolWhat it doesTypical question
tron_check_address_risk(address)TRC-20 counterparty screening: judicial / black-market / mixer / phishing labels, account activation and age, 0-100 safety score, plus an explicit not_covered list"Is it safe to accept USDT from this address?"
tron_verify_usdt_transfer(txid, expected_to?, expected_amount_usdt?)USDT settlement check: finalized on the solidity chain, confirmations, amount, sender, recipient, matched against what you expect. Reads our own Tron node inside its ~6 day window (sub-second, no third party) and falls back to TronGrid for older transactions — source says which answered, and a local miss is never reported as "not found""Did this USDT payment land, irreversibly, for the right amount?"

Base and Solana are a payment rail, not a data service. x402 settles in USDC on Base or Solana; the Base/Solana on-chain data tools were retired on 2026-10-18 and no external RPC is queried for chain data.

Each one returns risk_level, a 0-100 safety_score, the verbatim upstream flags it was derived from, a not_covered list and a disclaimer — it relays public labels and forms no legal opinion. Issuer-backed tokens (regulated stablecoins) are read as issuer control rather than as a rug signal, and that decision is stated in the response.

Boundary worth stating plainly: RobotBase does not index Monero transactions, wallets or ring signatures, and does not label or risk-score Bitcoin addresses. Where a node cannot answer, the tool says so instead of guessing.

Beyond a generic reader

Most MCP servers wrap a third-party API. These come from infrastructure we operate, which is why they are hard to find elsewhere:

  1. Settlement verification — btc_get_transaction / btc_get_block / btc_get_address answer the first question an agent has once a payment is claimed, from our own txindex node.
  2. Fee & mempool oracles — btc_get_fee_rates + btc_get_mempool_state answer the second: what the next transaction will cost, and whether now is a good moment.
  3. Local indexes — zec_get_pool_status reads our own Zebra node and value-pool index (all six pools with deltas) rather than a public explorer.
  4. Optional relay — broadcast_raw_transaction lets an agent sign locally and use us purely as a high-availability broadcast path; it is disabled unless the operator sets RB_ENABLE_BROADCAST=1.

Architecture

   AI Agent (Claude / Cursor / VS Code / custom)            │  HTTPS · MCP Streamable HTTP (2025-06-18)            ▼   https://robotbase.cc/mcp          ← hosted, no auth required            │            ▼   MCP server (dependency-free Python, this repo)            ├── BTC  : Bitcoin Core RPC + electrs (address/tx index)            ├── ETH  : Reth (execution) + Lighthouse (consensus)            ├── XMR  : monerod JSON-RPC (node telemetry only)            ├── ZEC  : Zebra RPC (valuePools → shielded-pool supply)            ├── TRON : java-tron lite full node (tip state + a ~6 day window)            ├── meta : gateway service aggregation            └── web  : Serper / Tavily / Brave / cn.bing RSS search (optional keys),                       direct fetch + standard-library extraction, Tavily /extract fallback

Privacy & limits

  • No auth at all — robotbase.cc issues no API key, and sending X-API-Key changes nothing.
  • 120 req/min per IP, one tier (X-MCP-Plan / X-RateLimit-Limit response headers). Paid access is x402 credit and does not raise the per-IP rate limit.
  • Audit stores only a truncated SHA-256 of the client IP — never query parameters.
  • Read-only: no trading, signing, custody, or write methods. BTC transactions are looked up with txindex.
  • Responses are trimmed to ~3.8 KB per call to protect LLM context; web_fetch is the exception (12,000 characters) because its whole point is to return a page's text.
  • Web tools have an extra 20 req/min/IP limit on top of the 120/min/IP overall limit, and their free allowance (100 calls/day/IP shared by the 14 metered web tools) is tracked separately.

Self-hosting (this repo)

server.py is a dependency-free reference implementation that talks to your own nodes. Configure everything with environment variables:

bash
export RB_BIND=0.0.0.0            # bind address (default 127.0.0.1)export RB_PORT=8090               # listen portexport RB_BTC_RPC_URL=http://127.0.0.1:8332export RB_BTC_RPC_USER=rpcuserexport RB_BTC_RPC_PASS=...export RB_BTC_DASHBOARD=http://127.0.0.1:8600            # optional: /api/node used by chain_status(btc)export RB_ELECTRS_HOST=127.0.0.1  # electrs for btc_get_addressexport RB_ELECTRS_PORT=50001export RB_ZEC_BASE=http://127.0.0.1:8080                  # status API with /api/chaininfoexport RB_XMR_HELPER=http://127.0.0.1:18085/rpc           # monerod JSON-RPC (xmr_get_node_status)export RB_HOME_BASE=http://127.0.0.1:8081                 # gateway aggregation: /api/nodes (eth + xmr telemetry) /api/servicesexport RB_USAGE_DB=./usage.db                             # optional usage auditexport RB_BILLING_DB=./billing.db                         # deprecated: API-key verification (no keys are issued since 2026-10-16)export RB_RISK_DB=./risk_quota.db                         # optional: daily risk-tool allowance bookkeepingexport RB_WEB_CACHE_DB=./web_cache.db                     # optional: web result cache + web quota/spend tables# web tools: no key is required. Optional provider keys buy quality/reliability:export RB_SERPER_KEY=...                                  # primary search provider (best results)export RB_TAVILY_KEY=...                                  # fallback search + fetch-extract fallbackexport RB_BRAVE_KEY=...                                   # optional extra search fallbackexport RB_SERPER_DAILY_CALLS=200                          # optional: daily Serper call capexport RB_TAVILY_DAILY_CREDITS=15                         # optional: daily Tavily credit capexport RB_WEB_FREE=100                                    # optional: per-IP free web allowance (shared by web tools)export RB_WEB_GLOBAL=2000                                 # optional: site-wide free web capexport RB_WEB_DAILY_BUDGET_USD=5                          # optional: daily upstream spend breakerexport RB_WEB_TRUNCATE=12000 RB_WEB_CACHE_MAX_MB=100      # optional: web_fetch cap / cache capexport RB_WEB_UA='RobotBaseMCP/0.25.2 (+https://robotbase.cc/mcp)'  # optional: crawler User-Agent# optional paid tier — see examples/x402.env.example for the full listexport RB_X402_ENABLED=1export RB_X402_FACILITATOR_URL=https://facilitator.exampleexport RB_X402_OPTIONS='[ … ]'export RB_X402_PACKS='[ … ]'export RB_X402_LEDGER_DB=./x402_credit.dbpython3 server.py

See examples/ for client configs, examples/env.example for the node variables and examples/x402.env.example for the payment variables. Endpoints exposed by the server itself: / (docs), /tools (tool list JSON), /server.json (server card), /stats (usage audit), /healthz.

Reference implementation history

  • 2026-10-20 — v0.27.0: the 10 hosted web tools now share 100 calls/day per IP (previously web_search 20 + other 9 shared 50); reference implementation's 2 web tools use the same shared-100 policy. Paid points, risk/library 5/day, and all other terms unchanged.
  • 2026-10-23 — v0.32.0: split the hosted surface into three MCP editions, all including the 17 web tools: Web3 65 (ZEC kept; prediction/crypto trends), Dev 18 (dev_trending + web), Content 35 (CyberLibrary + social/attention + web). Official Registry now has separate entries robotbase-mcp (Web3 alias), robotbase-dev and robotbase-content. Per-edition free web bucket: 100/day/IP each; shared x402 credit balance.
  • 2026-10-23 — v0.31.1: web_monitor_list gains a single-monitor mode — pass monitor_id to get that monitor plus last_event.diff (the most recent detected change, up to 4000 chars), so agents without a webhook can read what changed; include_diff=false omits it. Validated end-to-end against the hosted endpoint with a real public HTTPS webhook receiver (delivery status=200) and an isolated instance (RB_MONITOR_MIN_INTERVAL_S=5). Tool count unchanged: 79 hosted / 45 reference.
  • 2026-10-23 — v0.31.0: hosted surface reaches 79 tools (44 free verification + 2 risk + 16 CyberLibrary + 17 web: 14 metered + 3 free helpers — web_crawl_job, web_monitor_list, web_monitor_delete), adding web_monitor_set, web_monitor_list and web_monitor_delete for scheduled page-change monitoring with optional HMAC-SHA256 webhooks; reference implementation remains 45 tools. Tool count 79, metered 32. Registry/Glama/Smithery metadata synced to the hosted surface.
  • 2026-10-23 — v0.30.0: hosted surface reaches 76 tools (44 free verification + 2 risk + 16 CyberLibrary + 14 web), adding web_extract_schema, web_diff, web_crawl_async and web_crawl_job; reference implementation remains 45 tools. Registry/Glama/Smithery metadata synced to the hosted surface.
  • 2026-10-20 — v0.26.0: public tool order is now web-first / high-frequency-first (tools/list, server.json, README table); hosted endpoint stays at 72 tools (44 free + 2 risk + 16 CyberLibrary + 10 web), reference implementation remains 45 tools.
  • 2026-10-19 — v0.25.2: hosted surface reaches 72 tools (10 web tools incl. web_crawl/web_extract/web_act and OCR; self-hosted SearXNG primary for web_search; 16 CyberLibrary tools). This release also ports the defect fixes that shipped in the hosted service (v0.22.0/v0.22.1) into this 45-tool reference implementation. Highlights: JSON-safe truncation (responses over the transport cap stay valid JSON and carry _truncated / _original_chars metadata instead of being sliced mid-object); bech32m/BIP350 witness-v1+ and base58check address validation; Zcash Ironwood shielded-pool accounting; eth_read_contract raw selector and ABI-parameter prefix handling (no more silent lstrip("0x") corruption); TRON contract-revert detection, has_code via getcontract, USDT verdict finality split, confirmation off-by-one, risk-address base58 checksum + 41-hex validation and unactivated-account coverage notes; consistent isError for every tool; strict batch/HTTP handling (batch element validation, 405 for DELETE/PUT/HEAD, 413 body cap, 415 Content-Type, 404 path, complete CORS preflight, trusted client IP via X-Real-IP, Retry-After on 429); tool title + annotations (readOnlyHint etc.) and additionalProperties normalization in tools/list; web_fetch max_chars cap/budget and HTTP 4xx passthrough instead of a silent provider fallback; dynamic XMR output-distribution lag with the real chain tip; Monero proof-check error semantics; and fee estimates priced from eth_feeHistory percentiles (p50 tip for a transfer, p90 for an ERC-20 transfer) instead of a zero eth_maxPriorityFeePerGas. Version fields in server.json, mcp-registry.json and smithery.yaml follow; glama.json carries no version field.

License

MIT — see LICENSE.


RobotBase · verification & risk intelligence for Web3 agents · https://robotbase.cc/

Source: README.md at commit af0d7a4

Tools

35

web_fetch

Web Fetch

Fetch one public web page and return its readable text as clean markdown or plain text, with navigation, scripts, headers and footers stripped. When to use: you have a specific URL (from web_search or the user) and need what the page actually says - 'read this article', 'summarise this docs page', 'turn this URL into markdown'. Do not use: to crawl or mirror a site, to fetch a page behind a login or paywall, to read API/RPC endpoints, or for book text inside CyberLibrary (use cyberlibrary_get_chapter). Returns: {url, final_url, status, title, content, chars, truncated, fetched_at, source (direct|provider), cached, took_ms, _metering}. The response is capped at 12000 characters per call; raise max_chars (up to 20000) when you need more. Reads one public URL only, respects robots.txt, and does not bypass login or paywall. Direct fetch is tried first; pages blocked from this node are fetched through a provider and marked source=provider. Metered: all web tools share 100 free calls/day per IP (separate from the risk/library allowance), then 1 credit per call over x402 - there is no API key; the 402 answer carries accepts[].

Parametersocrurlrequiredformatmax_chars

web_screenshot

Web Screenshot

Capture a screenshot of one public web page as an image (JPEG) plus metadata. When to use: visual layout matters - a dashboard, chart, UI state, or 'what does this page look like'. Do not use: to read text (use web_fetch), for pages behind a login or paywall, or for bulk capture. Returns: image content (image/jpeg) plus {url, final_url, title, width, height, bytes, engine, elapsed_ms, _metering}. Rendered by a real Chromium browser, robots.txt-respecting, SSRF-guarded, max 3MB per image. Metered: shares the web free bucket (100 calls/day per IP shared by all twelve web tools), then 2 credits per call over x402 - there is no API key; the 402 answer carries accepts[].

Parametersurlrequiredwidthheightfull_page

web_map

Web Map

Discover the URLs of one site - sitemap first, then same-host links from the homepage. When to use: you need the list of pages a site exposes before fetching a few of them. Do not use: as a crawler (max 50 URLs, no page content) or to bypass robots.txt. Returns: {url, final_url, count, urls:[{url,source}], cached, took_ms, _metering}. Metered: shares the web free bucket (100 calls/day per IP shared by all web tools), then 1 credit per call over x402 - there is no API key; the 402 answer carries accepts[].

Parametersurlrequiredlimit

web_fetch_batch

Web Fetch Batch

Fetch up to 5 public URLs in one call and return each page's title, engine and a short snippet (first ~1200 characters), so an agent can triage several links quickly. When to use: search returned several candidate pages and you want a first pass over all of them; then call web_fetch on the ones worth reading in full. Do not use: when you need the complete text of a page (use web_fetch), or to crawl a site (use web_map). Returns: {ok, count, ok_count, results:[{url, ok, final_url, status, title, engine, chars, snippet, error?}], took_ms, _metering}. Partial failures do not fail the whole call. Metered: counts one call per URL against the shared web free bucket (50 URLs/day per IP together with web_fetch), then 1 credit per URL over x402 - max 5 URLs per call, no API key.

Parametersurlsrequiredformatmax_chars

web_feed

Web Feed

Read an RSS or Atom feed and return its latest items. When to use: the user wants the latest posts/news from a site that publishes a feed, or you found a feed URL and want headlines plus links. Do not use: to read article text (use web_fetch) or to discover a site's URLs (use web_map). Returns: {ok, url, final_url, title, count, items:[{title, link, published, summary}], cached, took_ms, _metering}. Summary is HTML-stripped and capped at 500 characters. Metered: shares the web free bucket (100 calls/day per IP shared by all web tools), then 1 credit per call over x402 - there is no API key.

Parametersurlrequiredlimit

web_metadata

Web Metadata

Extract a page's structured metadata: Open Graph, Twitter cards, canonical URL, language and JSON-LD. When to use: you need the title/description/author/image of a page, or JSON-LD structured data for a product/article, without reading the whole page. Do not use: when you need the page text (use web_fetch) or a screenshot (use web_screenshot). Returns: {ok, url, final_url, title, description, image, site_name, type, canonical, lang, jsonld[], cached, took_ms, _metering}. Metered: shares the web free bucket (100 calls/day per IP shared by all web tools), then 1 credit per call over x402 - there is no API key.

Parametersurlrequired

web_crawl

Web Crawl

Crawl one site's same-host pages starting from a URL (depth 1-2, at most 20 pages) and return each page's title, URL and readable text. When to use: you need several pages from one site (docs section, news index, product list) and web_map alone is not enough. Do not use: to mirror a whole site (hard cap 20 pages, same host), or for one page (web_fetch). Returns: {ok, url, final_url, count, pages:[{url, title, status, chars, content}], cached, took_ms, _metering}. Respects robots.txt and SSRF guards; partial page failures are skipped. Metered: shares the web free bucket (100 calls/day per IP shared by all web tools), then 3 credits per call over x402 - no API key.

Parametersurlrequireddepthmax_charsmax_pages

web_extract

Web Extract

Extract structured data from one public page: tables (headers + rows), JSON-LD blocks, and Open Graph/Twitter/canonical/language metadata. When to use: the page has tables or schema.org JSON-LD you need as data, without an LLM. Do not use: when you only need the page text (web_fetch) or a screenshot (web_screenshot). Returns: {ok, url, final_url, title, meta:{description,image,site_name,type,canonical,lang}, jsonld[], tables:[{caption,headers,rows}], links? , cached, took_ms, _metering}. Metered: shares the web free bucket (100 calls/day per IP shared by all web tools), then 1 credit per call over x402.

Parametersurlrequiredinclude_links

web_act

Web Act

Drive a real Chromium browser on one public page: click, type, press keys, scroll, wait for selectors, then return the resulting text (and optionally a screenshot and JSON XHR responses). When to use: the page needs interaction before its content appears (cookie banners, tabs, 'load more', form submit) and web_fetch/web_crawl cannot see it. Do not use: for plain reading (web_fetch) or bulk crawling (web_crawl); no login/paywall bypass. Returns: {ok, url, final_url, title, markdown, chars, elapsed_ms, screenshot?, xhr?, took_ms, _metering}. Max 10 actions; screenshot returns MCP image content. Metered: shares the web free bucket (100 calls/day per IP shared by all web tools), then 3 credits per call over x402.

Parametersurlrequiredactionsrequiredfull_pagemax_charsscreenshotinclude_xhr

web_crawl_async

Web Crawl Async

Submit a same-host crawl as an asynchronous job and return a job_id immediately. When to use: you need more than a couple of pages and cannot hold a long HTTP request; submit here, then poll web_crawl_job until status is done, failed or cancelled. Do not use: for one page (web_fetch) or when you need the result in this call (web_crawl). Returns: {ok, job_id, status, url, depth, max_pages, max_chars, idempotent, poll_with}. Pass idempotency_key to retry safely (24h window returns the same job). Metered: shares the web free bucket (100 calls/day per IP), then 3 credits per submit over x402.

Parametersurlrequireddepthmax_charsmax_pagesidempotency_key

web_crawl_job

Web Crawl Job

Check or cancel an asynchronous crawl job created by web_crawl_async. When to use: after web_crawl_async, poll with action=status until status is done/failed/cancelled; use action=cancel to stop a running job. Do not use: to start a crawl (web_crawl_async) or for a quick one-page read (web_fetch). Returns status: {ok, job_id, status: queued|running|done|failed|cancelled, progress:{pages_done,max_pages}, created_at, updated_at, result?, error?}. Free (not metered); rate-limited. Done result uses the same shape as web_crawl.

Parametersactionjob_idrequired

web_extract_schema

Web Extract Schema

Extract a page's structured data into a named schema's common fields (no LLM): article, product, event, faq, recipe, course, organization, local_business, breadcrumb, dataset or job_posting. When to use: you need fields (title/author/date, price/currency/availability, event dates, FAQ Q&A, recipe ingredients, org address) rather than raw markdown or tables. Do not use: to get every JSON-LD block verbatim (web_metadata/web_extract) or to read text (web_fetch). Returns: {ok, url, final_url, schema, requested_schema, detected_types, matched, fields:{...}, sources:[jsonld|meta], jsonld_count, tables_count, took_ms, cached, _metering}. If no matching JSON-LD exists it falls back to Open Graph/meta fields and matched=false. Metered: shares the web free bucket (100 calls/day per IP), then 1 credit per call over x402.

Parametersurlrequiredschema

web_diff

Web Diff

Fetch a page now and compare it with the previous snapshot of the same URL, returning whether it changed and a unified diff (no LLM). When to use: monitoring a page for updates - prices, docs, policy pages, SEO titles/meta; first call stores the baseline, later calls return added/removed lines. Do not use: for one-off reading (web_fetch) or structured fields (web_extract_schema). Returns: {ok, url, baseline, changed, diff, added_lines, removed_lines, previous_ts, current_ts, title, hash, chars, fetched_cached, took_ms, _metering}. fresh=true (default) adds a cache-busting query to bypass the 6h page cache; pass fresh=false to compare cached content. Snapshots are kept per URL in SQLite (latest only). Metered: shares the web free bucket (100 calls/day per IP), then 1 credit per call over x402.

Parametersurlrequiredfreshmax_chars

web_monitor_set

Web Monitor Set

Create a scheduled change monitor for one public URL: the server re-fetches the page on an interval, stores a new snapshot and records a diff event whenever the readable text changes. When to use: the user wants to be told when a page changes (price, docs, policy page, job post, release notes) and cannot poll it themselves; also for handing off 'watch this for me'. Do not use: for a single comparison right now (web_diff) or when you only need the page today (web_fetch). Returns: {ok, monitor_id, url, status:active, interval_minutes, next_check_ts, webhook_enabled, webhook_secret?, webhook_signature?, hint}. The first check runs within ~60s to store the baseline; later changes show up in web_monitor_list.recent_events and, if requested, are POSTed to webhook_url. Webhook: https only, no redirects, 8s timeout, up to 2 retries (30s/120s); body JSON {monitor_id,url,ts,changed,added_lines,removed_lines,title,diff,event_id}; verify header 'X-RobotBase-Signature: sha256=<hex HMAC-SHA256 of the raw body using webhook_secret>'. Limits: 15-1440 minutes; max 5 monitors per IP; monitors expire after 7 days. Metered: 1 credit (shares the web free bucket of 100 calls/day per IP).

Parametersurlrequiredwebhook_urlinterval_minutes

web_monitor_list

Web Monitor List

List the scheduled change monitors owned by the calling IP, with latest/next check time, last title or error, and the 5 most recent change events. When to use: after web_monitor_set, poll this instead of re-fetching the page; or to show the user what is currently being watched. Do not use: to create a monitor (web_monitor_set) or to compare one page now (web_diff). Returns: {ok, count, monitors:[{monitor_id,url,interval_minutes,active,created_ts,last_check_ts,next_check_ts,last_title,last_error,webhook_enabled,events_total,recent_events}], note}. Pass monitor_id to get that one monitor plus last_event.diff (the most recent detected change, up to 4000 chars) so you can read what changed without a webhook. Free (not metered); rate-limited to 20 calls/min per IP.

Parametersmonitor_idinclude_diff

web_monitor_delete

Web Monitor Delete

Delete one scheduled change monitor owned by the calling IP (its event history is removed too). When to use: the user no longer needs to watch a page, or the per-IP monitor limit was reached. Do not use: to pause a monitor temporarily - there is no pause; delete and re-create. Returns: {ok, deleted, monitor_id, note}; unknown or foreign ids return {ok:false,error:'monitor_not_found'} and delete nothing. Free (not metered); rate-limited to 20 calls/min per IP.

Parametersmonitor_idrequired

social_hot

Social Hot

Cross-platform social hot lists: Baidu, Toutiao, Douyin, Bilibili and Hacker News. When to use: what people are talking about now, content ideas, trend discovery. Do not use: for search interest over time (attention_trend) or general web search (web_search). Returns: {platform, count, items:[{title, heat, url, source}], errors}.

Parameterslimitplatform

attention_trend

Attention Trend

Attention and search-interest signals: Google Trends RSS, Wikipedia pageviews and Google Books Ngram. When to use: is a topic rising, long-term attention, regional trending searches, evidence of public interest. Do not use: for social hot lists (social_hot) or prediction-market odds (prediction_market_odds). Returns: {query, geo, trending[], pageviews, ngram, errors}.

Parametersgeolimitqueryinclude

cyberlibrary_book_meta

Cyberlibrary Book Meta

Metadata for exactly one book: title, author, genre, chapter count, word count, source URL and every access URL (HTML page, Markdown mirror, first chapter). When to use: you have a lang+slug and need to decide whether the book is worth fetching, or you need chapter_count before pulling a specific chapter. Do not use: to read content (call cyberlibrary_get_chapter or cyberlibrary_get_markdown). Returns: one catalog record object.

Parameterslangrequiredslugrequired

cyberlibrary_search_books

Cyberlibrary Search Books

Search the catalog by title or author within one language, returning matching book records (title, author, lang, slug, chapter_count, word_count and URLs). When to use: you have a title or author and need the lang+slug that every other tool requires. Do not use: to find words inside the text of books - that is cyberlibrary_fulltext_search. Returns: {query, lang, searched_languages, matches_returned, books[']}.

Parameterslangrequiredlimitqueryrequired

cyberlibrary_search_passages

Cyberlibrary Search Passages

Ranked passage retrieval over the paragraph index (BM25). Use a natural-language or keyword query to find the most relevant passages across books, with the book, chapter, chunk_id, citation, license and source URL for each hit. When to use: you need evidence passages for a question rather than a literal phrase match. Do not use: to verify an exact quotation (cyberlibrary_verify_quote) or to read a whole book (cyberlibrary_get_chunks). Pass lang when known (faster/more precise). Returns: {query, matched, candidates, corpus_version, results[{chunk_id, score, lang, slug, title, chapter, para, citation, url, license, snippet}]}. Note: BM25 lexical ranking; a neural semantic layer is planned.

Parameterslangsluglimitqueryrequiredsnippet_chars

cyberlibrary_rag_context

Cyberlibrary Rag Context

Retrieve ranked passages for a question and pack them into a token budget, ready to paste into an agent context. Each passage carries a permanent chunk_id, book/chapter/paragraph, citation, license and source URL, plus a packed context string and citations index. When to use: you are building a RAG answer and need grounded evidence with citations, without assembling chunks yourself. Do not use: to verify an exact quotation (cyberlibrary_verify_quote) or to read a whole book (cyberlibrary_get_chunks). Returns: {query, lang, budget_tokens, used_tokens, passages_returned, corpus_version, context, passages[], citations[]}.

Parameterslanglimitqueryrequiredbudget_tokenssnippet_chars

cyberlibrary_get_chapter

Cyberlibrary Get Chapter

Clean Markdown of a single chapter - the recommended way to put Cyber Library text into an agent context. Chapter 0/1 are both accepted for the opening chapter. When to use: after cyberlibrary_get_toc, to read the specific chapter you care about without pulling the whole book. Do not use: to read an entire book in one shot (use cyberlibrary_get_markdown, but mind the size). Returns: {chapter, title, chars_total, chars_returned, truncated, markdown, markdown_url}.

Parameterslangrequiredslugrequiredchapterrequiredmax_chars

cyberlibrary_get_markdown

Cyberlibrary Get Markdown

Whole-book Markdown mirror, including the book's own metadata header and summary. When to use: you need the complete text and have checked chapter_count/word_count via cyberlibrary_book_meta, or you specifically want the book-level summary block. Do not use: for long books where you only need part of the text - prefer cyberlibrary_get_toc + cyberlibrary_get_chapter, which is far cheaper. Returns: {chars_total, chars_returned, truncated, markdown, markdown_url}.

Parameterslangrequiredslugrequiredmax_chars

cyberlibrary_catalog_index

Cyberlibrary Catalog Index

Every language catalog in Cyber Library with item counts and the corpus generation date. When to use: first call in any session - it tells you which languages exist and how large each is, so you can pick a language before fetching a shard. Do not use: to list actual books (call cyberlibrary_language_shard) or to read a book (call cyberlibrary_get_markdown / cyberlibrary_get_chapter). Returns: {generated_at, total_items, readable_items, languages[]} where each language entry carries {lang, total_items, url|pages}.

Takes no parameters.

cyberlibrary_get_toc

Cyberlibrary Get Toc

Table of contents for one book: ordered chapters with their real titles. When to use: right after cyberlibrary_book_meta, to pick which chapter to read; this is the cheapest way to survey a long book (single HTML read regardless of chapter count). Do not use: to read prose (call cyberlibrary_get_chapter). Returns: {lang, slug, total_chapters, page, total_pages, chapters[{chapter, title, url}]}.

Parameterslangrequiredpageslugrequiredper_page

cyberlibrary_cite

Cyberlibrary Cite

Ready-to-paste citation for one book: title, author, canonical page URL, Markdown URL, license and the public-domain territory notice. When to use: before quoting or summarising a book, so the answer carries a verifiable source. Do not use: to fetch content (use cyberlibrary_get_chapter). Returns: {title, author, page_url, markdown_url, license, source_url, citation, notice}.

Parameterslangrequiredslugrequired

cyberlibrary_verify_quote

Cyberlibrary Verify Quote

Verify whether a quotation actually occurs in the Cyber Library corpus and return the exact passage, book, chapter, permanent chunk_id and citation. When to use: before citing a quotation, to catch model hallucination, or to ground a claim in a verifiable source. Do not use: to find a book by title (cyberlibrary_search_books) or to read a chapter (cyberlibrary_get_chapter). Matching is exact substring first, then fuzzy (>=90% of the quote). Returns: {quote, verified, match_type, best_score, matches[{chunk_id, score, title, chapter, para, citation, url, license}], corpus_version}.

Parameterslangsluglimitquoterequired

cyberlibrary_get_chunks

Cyberlibrary Get Chunks

Stable paragraph-level chunks for one book, each with a permanent chunk_id (lang:slug:chapter:para), citation text and canonical URL. When to use: you need RAG-ready passages with deterministic IDs instead of whole chapters, or you want to cache/index exact passages. Do not use: to read a whole chapter (cyberlibrary_get_chapter) or to search across books (cyberlibrary_verify_quote / cyberlibrary_fulltext_search). Returns: {lang, slug, title, license, corpus_version, total_chunks, chunks[{chunk_id, chapter, para, text, citation, url}]}.

Parameterslangrequiredslugrequiredlimitstartchaptermax_chars

cyberlibrary_language_shard

Cyberlibrary Language Shard

One page of the book catalog for a language. Large languages are paginated (for example en = 25 pages x 2500 books); small languages are a single shard. When to use: browse or sample what a language holds, or locate a book title. Do not use: to search by keyword across the whole corpus (that is the planned cyberlibrary_fulltext_search) or to get one book's metadata when you already know its slug (call cyberlibrary_book_meta). Returns: {lang, page, total_pages, total_items, count, books[]} with books trimmed to `limit`.

Parameterslangrequiredpagelimit

cyberlibrary_service_info

Cyberlibrary Service Info

Discovery endpoints for Cyber Library: MCP endpoint, tools list, Server Card, usage stats, catalog API, llms.txt / llms-full manifest, OpenAPI and the HTML search UI. When to use: you need a machine-readable entry point or want to know what else this service exposes. Do not use: for book data itself. Returns: a flat map of named endpoint URLs plus version and citation guidance.

Takes no parameters.

Version history

3
  1. v0.32.3LatestOct 29, 2026
  2. v0.32.2Oct 26, 2026
  3. v0.32.0Oct 23, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts