# io.github.wygogogo19/robotbase-content (remote · content.robotbase.cc)

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

- Trust score: 62/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-24

## Components

- remote · `content.robotbase.cc`: 62/100 (this document), [markdown](https://verifymcp.io/servers/wygogogo19-robotbase-content/content.md), [page](https://verifymcp.io/servers/wygogogo19-robotbase-content/content)

## Channel facts

- Endpoint: `https://content.robotbase.cc/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.32.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-24.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS enforcement could not be verified: the plaintext port answered with HTTP 405, which proves neither a plaintext path nor enforcement.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 65/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 7521 tokens (~214/item across 35 items; 35 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 3/100
  - Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 96/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 88% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "web_monitor_delete" implies "delete" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 36 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the io.github.wygogogo19/robotbase-content MCP server?

io.github.wygogogo19/robotbase-content is a hosted endpoint at https://content.robotbase.cc/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http wygogogo19-robotbase-content 'https://content.robotbase.cc/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "wygogogo19-robotbase-content": {
      "url": "https://content.robotbase.cc/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "wygogogo19-robotbase-content": {
      "type": "http",
      "url": "https://content.robotbase.cc/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.wygogogo19-robotbase-content]
url = "https://content.robotbase.cc/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "wygogogo19-robotbase-content": {
      "type": "remote",
      "url": "https://content.robotbase.cc/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add wygogogo19-robotbase-content --url 'https://content.robotbase.cc/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  wygogogo19-robotbase-content:
    url: "https://content.robotbase.cc/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "wygogogo19-robotbase-content": {
      "Transport": "http",
      "Url": "https://content.robotbase.cc/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add wygogogo19-robotbase-content -t streamable-http -u 'https://content.robotbase.cc/mcp'
```

### Other

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

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-24 (score 62, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-23 (score 61)

First indexed and scored.

## MCP tools (35)

### `web_search` (~366 tokens)

Web Search

Search the live web and get ranked results with title, URL, snippet and published date. When to use: an agent needs current facts, news or links that are not on chain - 'what is the BTC fee market saying today', 'recent Zcash governance proposals', 'find the docs page for X'. Use it before web_fetch, then fetch the one URL that looks authoritative. Do not use: for on-chain facts (use the BTC/ETH/XMR/ZEC/TRON tools) or for content inside a CyberLibrary book (use cyberlibrary_fulltext_search). Provider: self-hosted SearXNG (Bing/Baidu/360/Sogou/Yandex/Marginalia) first, then Serper, Tavily and cn.bing RSS as automatic fallbacks. Returns: {query, count, results:[{title,url,snippet,published}], provider (serper|tavily|bing_rss), cached, took_ms, _metering}. Results may be cached for up to 10 minutes; a cached result still counts as one call against the free allowance. 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[]. max count is 10.

Input parameters:

- `count` (integer): Number of results to return, 1-10. Default 5.
- `freshness` (string): Optional freshness filter.
- `lang` (string): Optional language preference, e.g. zh-cn or en.
- `query` (string, required): Search query (1-200 characters).
- `site` (string): Optional: restrict results to one domain, e.g. github.com.

### `web_fetch` (~361 tokens)

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[].

Input parameters:

- `format` (string): Output format. Default markdown.
- `max_chars` (integer): Truncate the returned content to this many characters (2000-20000). Default 8000.
- `ocr` (boolean): Force OCR on scanned PDFs/images (auto-detected by default; set false to skip).
- `url` (string, required): The http(s) URL to read (max 2048 chars).

### `web_screenshot` (~258 tokens)

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[].

Input parameters:

- `full_page` (boolean): Capture the whole page instead of the viewport. Default false.
- `height` (integer): Viewport height 240-1200. Default 800.
- `url` (string, required): The http(s) URL to capture (max 2048 chars).
- `width` (integer): Viewport width 320-1920. Default 1280.

### `web_map` (~177 tokens)

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[].

Input parameters:

- `limit` (integer): Max URLs to return, 1-50. Default 50.
- `url` (string, required): Site root or page URL (max 2048 chars).

### `web_fetch_batch` (~260 tokens)

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.

Input parameters:

- `format` (string): Snippet format. Default markdown.
- `max_chars` (integer): Snippet length per page, 200-2000. Default 1200.
- `urls` (array, required): 1-5 http(s) URLs to fetch in one call.

### `web_feed` (~195 tokens)

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.

Input parameters:

- `limit` (integer): Max items to return, 1-20. Default 10.
- `url` (string, required): RSS/Atom feed URL (max 2048 chars).

### `web_metadata` (~180 tokens)

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.

Input parameters:

- `url` (string, required): The http(s) page URL (max 2048 chars).

### `web_crawl` (~255 tokens)

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.

Input parameters:

- `depth` (integer): Link depth 1-2. Default 2.
- `max_chars` (integer): Per-page content cap 200-4000. Default 1000.
- `max_pages` (integer): Max pages 1-20. Default 20.
- `url` (string, required): Start URL (same host is crawled).

### `web_extract` (~197 tokens)

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.

Input parameters:

- `include_links` (boolean): Also return same-host links (max 100). Default false.
- `url` (string, required): The http(s) page URL.

### `web_act` (~287 tokens)

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.

Input parameters:

- `actions` (array, required): Actions: {type: click|type|press|scroll|wait_for|wait_ms, ...}
- `full_page` (boolean): Full-page screenshot. Default false.
- `include_xhr` (boolean): Return JSON XHR responses captured while acting. Default false.
- `max_chars` (integer): Text cap 1000-20000. Default 20000.
- `screenshot` (boolean): Return a JPEG screenshot. Default false.
- `url` (string, required): The http(s) page URL.

### `web_crawl_async` (~251 tokens)

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.

Input parameters:

- `depth` (integer): Link depth 1-2. Default 2.
- `idempotency_key` (string): Optional; retries within 24h return the same job.
- `max_chars` (integer): Per-page content cap 200-4000. Default 1000.
- `max_pages` (integer): Max pages 1-20. Default 20.
- `url` (string, required): Start URL (same host is crawled).

### `web_crawl_job` (~176 tokens)

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.

Input parameters:

- `action` (string): Poll status (default) or cancel the job.
- `job_id` (string, required): job_id returned by web_crawl_async.

### `web_extract_schema` (~242 tokens)

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.

Input parameters:

- `schema` (string): Target schema; auto detects from JSON-LD types. Default auto.
- `url` (string, required): The http(s) page URL.

### `web_diff` (~256 tokens)

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.

Input parameters:

- `fresh` (boolean): Bypass the page cache with a cache-busting query. Default true.
- `max_chars` (integer): Compare at most this many chars (500-12000). Default 4000.
- `url` (string, required): The http(s) page URL.

### `web_monitor_set` (~362 tokens)

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).

Input parameters:

- `interval_minutes` (integer): Check interval 15-1440 minutes. Default 60.
- `url` (string, required): The http(s) URL to watch (max 2048 chars).
- `webhook_url` (string): Optional https endpoint notified on each change (HMAC-signed).

### `web_monitor_list` (~237 tokens)

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.

Input parameters:

- `include_diff` (boolean): With monitor_id, include the latest unified diff. Default true.
- `monitor_id` (string): Optional: return this monitor (owned by the calling IP) plus its most recent change diff.

### `web_monitor_delete` (~132 tokens)

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.

Input parameters:

- `monitor_id` (string, required): monitor_id returned by web_monitor_set.

### `social_hot` (~103 tokens)

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}.

Input parameters:

- `limit` (integer)
- `platform` (string)

### `attention_trend` (~125 tokens)

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}.

Input parameters:

- `geo` (string)
- `include` (string)
- `limit` (integer)
- `query` (string): Optional keyword for Wikipedia/Ngram time series.

### `cyberlibrary_book_meta` (~138 tokens)

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.

Input parameters:

- `lang` (string, required): Language code, e.g. zh-cn.
- `slug` (string, required): Book slug from the catalog, e.g. 23825.

### `cyberlibrary_fulltext_search` (~262 tokens)

Cyberlibrary Fulltext Search

Full-text search inside the actual book text (a 26 GB corpus of chapter Markdown), returning the matching passage plus the book, chapter and canonical source URL for each hit. When to use: you need to locate where a phrase, name or quotation occurs in the corpus, or to ground an answer in a verifiable passage. Do not use: to find a book by title (call cyberlibrary_search_books, which is far cheaper). Strongly prefer passing lang: English alone is 79% of the corpus (20.4 GB), so a language-scoped search is typically 10-100x faster and more relevant. Returns: {query, lang, searched_languages, skipped_languages, scanned_mb, elapsed_ms, results[{lang, book, chapter, source_url, match, snippet}]}.

Input parameters:

- `lang` (string): Language code to search within (strongly recommended), e.g. zh-cn, en, fr.
- `limit` (integer): Max passages to return (1-50). Default 10.
- `query` (string, required): Literal phrase to find (2-120 chars, case-insensitive).
- `snippet_chars` (integer): Characters of context around each hit (100-2000). Default 400.

### `cyberlibrary_search_books` (~162 tokens)

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[']}.

Input parameters:

- `lang` (string, required): Language code to search in (required), e.g. en, zh-cn.
- `limit` (integer): Max books to return (1-100). Default 20.
- `query` (string, required): Substring matched against title and author (case-insensitive).

### `cyberlibrary_search_passages` (~253 tokens)

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.

Input parameters:

- `lang` (string): Optional language filter, e.g. zh-cn, en.
- `limit` (integer): Max passages (1-20). Default 10.
- `query` (string, required): Natural-language or keyword query (2-120 chars).
- `slug` (string): Optional book slug to restrict the search.
- `snippet_chars` (integer): Snippet length (100-1000). Default 300.

### `cyberlibrary_semantic_search` (~220 tokens)

Cyberlibrary Semantic Search

Semantic passage search over a neural embedding index: describe what you are looking for in natural language and get the closest passages, each with a permanent chunk_id, book/chapter/paragraph, citation, license and source URL. When to use: keyword/BM25 search misses paraphrases or themes ("a story about a soldier returning from war", "清代公案小说里的侠客"). Do not use: to verify an exact quotation (cyberlibrary_verify_quote) or to read a whole book (cyberlibrary_get_chunks). Falls back to BM25 if the embedding service is down. Returns: {query, lang, backend, total_vectors, corpus_version, results[{chunk_id, score, title, author, chapter, para, citation, url, license, snippet}]}.

Input parameters:

- `lang` (string): Optional language filter, e.g. zh-cn, en.
- `limit` (integer): Max passages (1-30). Default 10.
- `query` (string, required): Natural-language description (2-300 chars).

### `cyberlibrary_rag_context` (~236 tokens)

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[]}.

Input parameters:

- `budget_tokens` (integer): Approximate context budget (300-12000). Default 2000.
- `lang` (string): Optional language filter, e.g. zh-cn, en.
- `limit` (integer): Max passages (1-30). Default 12.
- `query` (string, required): Question or keywords (2-300 chars).
- `snippet_chars` (integer): Per-passage character cap (200-2000). Default 900.

### `cyberlibrary_get_chapter` (~170 tokens)

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}.

Input parameters:

- `chapter` (integer, required): Chapter number from cyberlibrary_get_toc.
- `lang` (string, required)
- `max_chars` (integer): Truncate Markdown to this many characters (1000-100000). Default 20000.
- `slug` (string, required)

### `cyberlibrary_get_markdown` (~149 tokens)

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}.

Input parameters:

- `lang` (string, required)
- `max_chars` (integer): Truncate to this many characters (1000-200000). Default 40000.
- `slug` (string, required)

### `cyberlibrary_catalog_index` (~122 tokens)

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}.

### `cyberlibrary_get_toc` (~155 tokens)

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}]}.

Input parameters:

- `lang` (string, required)
- `page` (integer): 1-based page of the chapter list. Default 1.
- `per_page` (integer): Chapters per page (1-500). Default 100.
- `slug` (string, required)

### `cyberlibrary_cite` (~110 tokens)

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}.

Input parameters:

- `lang` (string, required)
- `slug` (string, required)

### `cyberlibrary_verify_quote` (~209 tokens)

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}.

Input parameters:

- `lang` (string): Optional language filter, e.g. zh-cn, en.
- `limit` (integer): Max matches (1-20). Default 5.
- `quote` (string, required): Quotation to verify (4-500 chars).
- `slug` (string): Optional book slug to restrict the search.

### `cyberlibrary_get_chunks` (~238 tokens)

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}]}.

Input parameters:

- `chapter` (integer): Optional chapter number; omit for the whole book.
- `lang` (string, required): Language code, e.g. zh-cn, en.
- `limit` (integer): Chunks to return (1-100). Default 50.
- `max_chars` (integer): Per-chunk character cap (200-8000). Default 2000.
- `slug` (string, required): Book slug from the catalog.
- `start` (integer): 1-based chunk offset. Default 1.

### `cyberlibrary_language_shard` (~194 tokens)

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`.

Input parameters:

- `lang` (string, required): Language code, e.g. en, zh-cn, zh-tw, de.
- `limit` (integer): Max books to return (1-2500). Default 100.
- `page` (integer): 1-based page for paginated languages. Default 1.

### `cyberlibrary_service_info` (~93 tokens)

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.

### `cyberlibrary_search` (~235 tokens)

Cyberlibrary Search

Unified CyberLibrary search: one query, automatic language, BM25 + neural semantic fusion (RRF), returning the most relevant passages with stable chunk IDs, citations, licenses and source URLs, plus an answerable/confidence signal. When to use: first choice when you do not want to decide between keyword and semantic search. Modes: auto (default, both), keyword (exact terms/names), semantic (paraphrase/theme). Options: lang, limit, snippet_chars. Returns: {query, lang, mode_requested, mode_used, answerable, confidence, corpus_version, results[{chunk_id, score, sources, title, author, chapter, para, citation, url, license, snippet}], next_actions}.

Input parameters:

- `lang` (string): Optional language filter, e.g. zh-cn, en.
- `limit` (integer): Max passages (1-30). Default 10.
- `mode` (string): Default auto.
- `query` (string, required): Question, phrase or theme (2-300 chars).
- `snippet_chars` (integer): Snippet length (100-1000). Default 400.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/wygogogo19-robotbase-content/content#diagnostics

## Score history

- 2026-10-24: 62
- 2026-10-23: 61

## Common questions

### What is the io.github.wygogogo19/robotbase-content MCP server?

io.github.wygogogo19/robotbase-content is an MCP server listed in the public MCP registry as io.github.wygogogo19/robotbase-content. Agent MCP: 35 tools, social hot lists, attention trends, 80k+ books, 17 web tools. This page covers its hosted endpoint (https://content.robotbase.cc/mcp).

### Is the io.github.wygogogo19/robotbase-content MCP server safe to use?

io.github.wygogogo19/robotbase-content scores 62 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.wygogogo19/robotbase-content MCP server expose?

io.github.wygogogo19/robotbase-content exposes 35 tools: web_search, web_fetch, web_screenshot, web_map, web_fetch_batch, and 30 more. Their descriptions and schemas cost roughly 7,366 tokens of context every time the server is loaded.

### Does the io.github.wygogogo19/robotbase-content MCP server require authentication?

No. We connected to io.github.wygogogo19/robotbase-content without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the io.github.wygogogo19/robotbase-content MCP server still maintained?

io.github.wygogogo19/robotbase-content is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://content.robotbase.cc/mcp
- Repository: https://github.com/wygogogo19/robotbase-mcp
- Website: https://content.robotbase.cc/mcp
- Changelog RSS feed: https://verifymcp.io/servers/wygogogo19-robotbase-content/content.xml
- Changelog JSON feed: https://verifymcp.io/servers/wygogogo19-robotbase-content/content.json
- HTML version of this page: https://verifymcp.io/servers/wygogogo19-robotbase-content/content
