Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
MCP server for Project Gutenberg: 78,000+ public-domain ebooks with full plain-text retrieval.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
MCP_LOG_LEVEL你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://gutenberg.caseyjhand.com/mcp打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"gutenberg": {
"command": "npx",
"args": [
"-y",
"@cyanheads/gutenberg-mcp-server"
],
"env": {
"MCP_LOG_LEVEL": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add --transport http gutenberg https://gutenberg.caseyjhand.com/mcpclaude mcp add gutenberg --env MCP_LOG_LEVEL=your-value -- npx -y @cyanheads/gutenberg-mcp-server运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"gutenberg": {
"url": "https://gutenberg.caseyjhand.com/mcp"
}
}
}粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"gutenberg": {
"command": "npx",
"args": [
"-y",
"@cyanheads/gutenberg-mcp-server"
],
"env": {
"MCP_LOG_LEVEL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"gutenberg": {
"type": "http",
"url": "https://gutenberg.caseyjhand.com/mcp"
}
}
}粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"gutenberg": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cyanheads/gutenberg-mcp-server"
],
"env": {
"MCP_LOG_LEVEL": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://gutenberg.caseyjhand.com/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
MCP_LOG_LEVEL env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
工具名称和描述与服务器在 2026年11月6日 报告的完全一致。这些内容由作者撰写,不是我们写的;我们以纯文本形式显示。
gutenberg_search_booksSearch the Project Gutenberg catalog of 78,000+ books. Every query word matches a title or author substring; filter by topic, language, translator, author lifespan, IDs, MIME prefix or copyright status. More than four query words, and the translator filter, require the local mirr
gutenberg_get_bookFetch complete metadata for a Project Gutenberg book by ID — title, authors (with birth/death years), translators, editors, source bibliographic notes, subjects, bookshelves, languages, copyright status, and the full formats map with download URLs (plain text, HTML, EPUB, cover i
gutenberg_get_textRetrieve the plain-text content of a Project Gutenberg book, stripped of the standard license header and footer. Front matter such as producer credits, the title page, contents, and prefaces stays in the text. For long works — novels routinely run 500KB–2MB — use offset and limit
gutenberg_browse_popularBrowse Project Gutenberg books ordered by downloads in the last 30 days at the source snapshot. Returns up to 32 titles with IDs, authors, languages, download counts, and is_readable. Filter by language, topic, MIME prefix or copyright status. Empty matches succeed with criteria
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
注册名称已通过 GitHub 账户 cyanheads 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
在 154 毫秒内响应(HTTP 200)
无需登录
已读取 4 个工具描述,未发现针对 AI 的隐藏指令
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 3 项适用的基础检查中通过了 3 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
两种方式都可以:安装在你的电脑上,或者连接云端版本。
GitHub 仓库最后更新于–,最新版本(0.3.2)于6天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Funooy Krillion Reference
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Funooy trivia references in six languages, with rules and fixed scoring. No daily spoilers.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
@cyanheads/gutenberg-mcp-server Search, browse, and read 78,000+ public-domain books from Project Gutenberg with full plain-text retrieval and offset/limit chunking via MCP. STDIO or Streamable HTTP. 4 Tools
Public Hosted Server: https://gutenberg.caseyjhand.com/mcp
Project Gutenberg's library of 78,000+ public-domain books. Search by title, author, topic, or language, fetch full book metadata, and read supported UTF-8 plain-text and HTML editions in manageable chunks.
| Tool | Description |
|---|---|
gutenberg_search_books | Search the catalog by title, author, topic, translator, language, or author lifespan, with pagination and popularity sorting |
gutenberg_get_book | Fetch complete metadata for a book by ID — authors, translators, editors, full formats map, subjects, copyright status |
gutenberg_get_text | Retrieve a book's plain-text content stripped of license boilerplate, with offset/limit chunking or a find jump to a passage |
gutenberg_browse_popular | Browse the most-downloaded books, optionally filtered by language or topic |
The published gutenberg-guide skill covers deciding whether a book can be read, ruling out search blind spots before calling a book missing, finding openings and chapters past front matter, paging long texts, and ranking editions. Plugin installs include it; MCP clients can discover it through the Skills extension and its skill resource.
gutenberg_search_books toolquery (title/author words), topic, translator, languages (catalog codes exactly as results report them, two or three letters: en, not eng), author_year_start/author_year_end, ids, mime_type, and copyright ("true", "false", "null"; false means public domain in the USA). Live fallback rejects queries over four words and the translator filtersort is popular (default) or ascending/descending by Gutenberg ID. Up to 32 books per page; use totalCount and hasMore to pageis_readable (eligible Text formats; mirror file availability is not guaranteed) and has_plain_text. The local mirror ignores case and accents in query, translator and topic matching; live matching is upstream-defined. Result rows omit translators; gutenberg_get_book reports them. Fails with translator_requires_mirror, query_requires_mirror, page_out_of_range, or catalog_unavailablegutenberg_get_book toolformats map (MIME type → download URL) and authors, translators, and editors with birth/death yearsis_readable, has_plain_text, summary, source_notes, and download_count (downloads in the last 30 days, not lifetime)not_found or catalog_unavailablegutenberg_get_text tooloffset/limit chunks (default limit 20,000, capped at 50,000), with the Gutenberg license header and footer stripped. requestedLimit and appliedLimit report bothsourceFormat says which. Returns totalChars, length, remainingChars, hasMore, and provenance (ID, title, license URL). Use length, not limit, to compute the next offsetfind jumps to a passage instead of paging to it: the chunk starts at the first match at or after offset, and match reports its offset, length, and laterMatches. Matching ignores letter case and whitespace runs, and treats straight and curly quotes alike; accents and punctuation must matchnot_found, audio_book (media_type "Sound"), no_text_format, offset_out_of_range, passage_not_found, text_file_not_found, text_fetch_rejected, invalid_text_response, text_fetch_failed, or catalog_unavailablegutenberg_browse_popular toollimit, default 20), most downloaded in the last 30 days first. requestedLimit and appliedLimit report the caplanguages, topic, mime_type, and copyright filters work as in search. totalInCatalog gives the full countcontinuation pointing at gutenberg_search_books. Empty results succeed with a notice; fails with catalog_unavailableBuilt on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
Gutenberg-specific:
Agent-friendly output:
is_readable flags Text records with UTF-8 plain text, or HTML without audio formats; a missing mirror file still returns text_file_not_foundoffset, length, totalChars, remainingChars, and hasMore support reliable sequential readsprovenance and sourceFormat on every text response cover attribution and fidelityConnect to the hosted instance, no install:
claude mcp add --transport http gutenberg-mcp-server https://gutenberg.caseyjhand.com/mcp
Or run it locally:
claude mcp add gutenberg-mcp-server -- npx -y @cyanheads/gutenberg-mcp-server
For other clients, add this to the MCP config file:
{
"mcpServers": { "gutenberg-mcp-server": { "command": "npx", "args": ["-y", "@cyanheads/gutenberg-mcp-server"] } } }
No API key required. For Docker or a source build, see Running the server.
| Variable | Description | Default |
|---|---|---|
GUTENDEX_BASE_URL | Gutendex catalog API base URL. | https://gutendex.com/books/ |
GUTENBERG_TEXT_BASE_URL | Content mirror serving the /cache/epub file tree. | https://gutenberg.pglaf.org |
GUTENBERG_MIRROR_PATH | SQLite catalog path; use a persistent volume in containers. | ./.mirror/gutenberg-catalog.sqlite |
GUTENBERG_MIRROR_REFRESH_CRON | Cron schedule for in-process catalog refresh. | Unset |
MCP_TRANSPORT_TYPE | Transport: stdio or http. | stdio |
MCP_SESSION_MODE | HTTP session mode: auto, stateful, or stateless. Overrides the stateless posture the server declares in createApp(). | stateless |
MCP_HTTP_PORT | Port for HTTP server. | 3010 |
MCP_AUTH_MODE | Auth mode: none, jwt, or oauth. | none |
MCP_LOG_LEVEL | Log level (RFC 5424). | info |
LOGS_DIR | Directory for log files (Node.js only). | /logs |
STORAGE_PROVIDER_TYPE | Storage backend. | in-memory |
OTEL_ENABLED | Enable OpenTelemetry instrumentation. | false |
Build the local catalog with bun run mirror:init and check it with bun run mirror:verify. The server never harvests on startup, and uses Gutendex until the first harvest completes. Keep the catalog up to date with bun run mirror:refresh on a host scheduler, or set GUTENBERG_MIRROR_REFRESH_CRON.
Requires Bun v1.4.0 or higher (or Node.js v24+).
git clone https://github.com/cyanheads/gutenberg-mcp-server.git
cd gutenberg-mcp-server && bun install cp .env.example .env # optional overrides
# One-time build
bun run rebuild
bun run start:stdio
bun run start:http
bun run devcheck # Lint, format, typecheck, security
bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
docker run --rm -p 3010:3010 ghcr.io/cyanheads/gutenberg-mcp-server:latest
The image defaults to HTTP transport, stateless session mode, and logs to /var/log/gutenberg-mcp-server. To run it over stdio from an MCP client, use "command": "docker" with "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/gutenberg-mcp-server:latest"]. To build locally, docker build -t gutenberg-mcp-server .; OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
| Directory | Purpose |
|---|---|
src/index.ts | createApp() entry point — registers tools and inits services. |
src/config/server-config.ts | Server-specific environment variable parsing (Gutendex and file-server URL overrides). |
src/mcp-server/tools/definitions/ | Tool definitions (*.tool.ts). |
src/services/gutendex/ | Gutendex catalog API client — search and book metadata. |
src/services/catalog-mirror/ | Local SQLite+FTS5 catalog mirror — RDF ingestion and read helpers. |
src/services/gutenberg-text/ | Full plain-text retrieval, boilerplate stripping, tenant-scoped caching, and chunking. |
skills/gutenberg-guide/ | Published agent skill for reading and discovery workflows, also served over MCP. |
| tests/ | Unit and integration tests mirro
只显示了开头部分;其余内容请在仓库中阅读