Project Gutenberg MCP について
Project Gutenberg MCPは、自前で運用するProject Gutenbergミラーに接続するMCPサーバーです。書籍を検索・閲覧するMCPクライアント向けに、タイトルや著者での検索、書籍情報の取得、全文または分割テキストの取得を提供します。
主な機能
- 01タイトルまたは著者で書籍を検索
- 02書籍のメタデータを取得
- 03プレーンテキスト書籍をダウンロード
- 04固定サイズの分割一覧を取得
- 05指定した分割を取得
活用シーン
- 01特定の著者の書籍を探す
- 02書名や形式を確認
- 03書籍の全文を取得
- 04長い書籍を分割して読む
MCP 対応
書籍検索、メタデータ照会、全文ダウンロード、分割テキスト取得のツールをMCPクライアントに公開します。自前のProject Gutenbergミラーが必要で、リポジトリにはミラーサーバーも含まれています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e GUTENBERG_BASE_URL -e GUTENBERG_TOOLS -e GUTENBERG_BOOK_ID -e GUTENBERG_CHUNK_SIZE -e GUTENBERG_LANGUAGE roberthouse224/project-gutenberg-mcp:1.2.0GUTENBERG_BASE_URLBase URL of your Gutenberg mirror. Run the mirror from the mirror/ directory and point this at it. See the README for setup instructions.GUTENBERG_TOOLSComma-separated list of tools to expose. Available: search_books, get_book_metadata, fetch_book_text, list_passages, get_passageGUTENBERG_BOOK_IDProject Gutenberg book ID to use as the default for all tools. Find IDs via search_books. Example: 2680 for Meditations by Marcus Aurelius.GUTENBERG_CHUNK_SIZESize in bytes of each passage returned by get_passage.GUTENBERG_LANGUAGEDefault ISO 639-1 language code filter for search_books. Used when the caller omits the language parameter.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
project-gutenberg-mcp
Project Gutenberg の書籍を読むための MCP サーバーです。
Project Gutenberg の利用規約
Project Gutenberg のロボットアクセス方針には、サイトは人間のユーザー専用であると記載されています。自動アクセスを行うと、IP アドレスがブロックされる場合があります。
この MCP サーバーを使用するには、ご自身でミラーを実行する必要があります。Project Gutenberg はミラーリングを明示的にサポートし、推奨しています。詳細については、ミラーリングガイドをご覧ください。
このリポジトリには、すぐに実行できるミラーサーバーが mirror/ ディレクトリに含まれています。
ミラーのセットアップ
ミラーサーバーは起動時に Project Gutenberg のカタログ(圧縮時で約 5 MB)をダウンロードし、初回アクセス時に書籍ファイルをローカルにキャッシュします。この MCP サーバーが想定する URL 構造を公開します。
Docker Compose(推奨)
ミラーと MCP サーバーを一緒に実行します。MCP サーバーはポート 8081 で HTTP により公開されます。
docker compose up
ミラーは http://localhost:8080、MCP サーバーは http://localhost:8081/mcp で利用できます。
ミラーのみ(stdio)
ミラーだけをビルドして起動し、その後、stdio 経由で MCP クライアントに接続します。
task build:mirror
task start:mirror
ミラーは http://localhost:8080 で実行されます。MCP クライアント設定の例(stdio):
{
"mcpServers": {
"project-gutenberg-mcp": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "GUTENBERG_BASE_URL=http://host.docker.internal:8080",
"-e", "GUTENBERG_TOOLS=search_books,get_book_metadata,list_passages,get_passage",
"roberthouse224/project-gutenberg-mcp"
]
}
}
}
設定
すべての設定は環境変数で行います。
| 変数 | 必須 | 説明 |
|---|---|---|
GUTENBERG_BASE_URL | はい | Gutenberg ミラーのベース URL(上記の「ミラーのセットアップ」を参照) |
GUTENBERG_TOOLS | はい | 公開するツールのカンマ区切りリスト(下記を参照) |
GUTENBERG_BOOK_ID | いいえ | デフォルトとして使用する Project Gutenberg の書籍 ID |
GUTENBERG_CHUNK_SIZE | いいえ | 文章のバイト単位のサイズ(デフォルト:4096) |
GUTENBERG_LANGUAGE | いいえ | search_books のデフォルトの ISO 639-1 言語コード(デフォルト:en) |
ツール
| ツール | 説明 |
|---|---|
search_books | タイトルまたは著者で書籍を検索します |
get_book_metadata | 書籍のメタデータ(タイトル、著者、形式)を取得します |
fetch_book_text | 書籍のプレーンテキスト全文をダウンロードします |
list_passages | 書籍の固定サイズの文章キーを一覧表示します |
get_passage | キーを指定して特定の文章を取得します |
GUTENBERG_BOOK_ID が設定されている場合、書籍 ID を受け取るツールはその値をデフォルトとして使用します。設定されていない場合は、エージェントが最初に ID を見つけられるよう、ツールのリストに search_books を含めてください。
実行
stdio
GUTENBERG_BASE_URL=http://localhost:8080 \
GUTENBERG_BOOK_ID=2680 \
GUTENBERG_TOOLS=get_book_metadata,list_passages,get_passage \
./project-gutenberg-mcp --transport stdio
HTTP
GUTENBERG_BASE_URL=http://localhost:8080 \
GUTENBERG_BOOK_ID=2680 \
GUTENBERG_TOOLS=get_book_metadata,list_passages,get_passage \
./project-gutenberg-mcp --transport http --addr :8081
Docker
ビルド済みイメージの取得
# MCP server
docker pull roberthouse224/project-gutenberg-mcp:1.2.0
# Mirror
docker pull roberthouse224/gutenberg-mirror:1.2.0
ローカルでのビルド
どちらの Dockerfile も、セキュリティを強化するために Docker Hardened Images(DHI) を使用しています。ビルドには Docker Hub の認証が必要です。
docker login
続いて、ビルドします。
# Build MCP server
docker build -t project-gutenberg-mcp .
# Build mirror
docker build -f mirror/Dockerfile -t gutenberg-mirror ./mirror
MCP サーバーの実行
# HTTP
docker run -p 8081:8081 \
-e GUTENBERG_BASE_URL=http://host.docker.internal:8080 \
-e GUTENBERG_BOOK_ID=2680 \
-e GUTENBERG_TOOLS=get_book_metadata,list_passages,get_passage \
roberthouse224/project-gutenberg-mcp --transport http --addr :8081
# stdio
docker run -i --rm \
-e GUTENBERG_BASE_URL=http://host.docker.internal:8080 \
-e GUTENBERG_BOOK_ID=2680 \
-e GUTENBERG_TOOLS=get_book_metadata,list_passages,get_passage \
roberthouse224/project-gutenberg-mcp
ミラーの実行
# Create a named volume for cache persistence
docker volume create gutenberg-cache
# Run mirror (serves on http://localhost:8080)
docker run -d \
-p 8080:8080 \
-v gutenberg-cache:/data \
--name gutenberg-mirror \
roberthouse224/gutenberg-mirror:1.2.0
マルチアーキテクチャビルド
どちらのイメージも linux/amd64 および linux/arm64 アーキテクチャに対応しています。マルチアーキテクチャイメージをビルドしてプッシュするには:
# Create a builder instance
docker buildx create --name multiarch --use
# Build and push MCP server
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t roberthouse224/project-gutenberg-mcp:1.2.0 \
-t roberthouse224/project-gutenberg-mcp:latest \
--push \
.
# Build and push mirror
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t roberthouse224/gutenberg-mirror:1.2.0 \
-t roberthouse224/gutenberg-mirror:latest \
--push \
-f mirror/Dockerfile \
./mirror
MCP クライアント設定(stdio)
{
"mcpServers": {
"project-gutenberg-mcp": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "GUTENBERG_BASE_URL=http://host.docker.internal:8080",
"-e", "GUTENBERG_BOOK_ID=2680",
"-e", "GUTENBERG_TOOLS=get_book_metadata,list_passages,get_passage",
"roberthouse224/project-gutenberg-mcp:1.2.0"
]
}
}
}
ローカルビルド(Docker 以外)
task build # outputs to build/project-gutenberg-mcp
task build:mirror # outputs to mirror/build/mirror
task test
書籍 ID
便利な ID の例:
| 書籍 | ID |
|---|---|
| 『自省録』— Marcus Aurelius | 2680 |
| 『国家』— Plato | 1497 |
| 『ツァラトゥストラはこう語った』— Nietzsche | 1998 |
| 『白鯨』— Melville | 2701 |
| 『高慢と偏見』— Austen | 1342 |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。