bookmeter-mcp
Provides tools to search books by keyword, retrieve books by author, and compute reading statistics from a local Bookmeter reading log.
README
media-log-mcp
自分が触れてきたメディアの記録(本・映画・アニメ・ゲーム)を提供する最小の MCP サーバーです。3つのツールで記録を横断検索・集計できます。読書記録は Bookmeter のエクスポートをそのまま利用します。
旧リポジトリ名は
bookmeter-mcpです。読書記録だけの MCP から全メディア対応へ拡張したのに合わせて改名しました。
使い方は2通りあります。
- ローカル(stdio) — 自分の PC の Claude Desktop / Claude Code から使う。セットアップが最も簡単。
- リモート(AWS Lambda) — claude.ai(Web) やモバイルアプリからも使う。公開エンドポイントを立てる。
提供ツール
いずれも type(book / audiobook / movie / anime / drama / variety / game)で種別を絞り込めます。未指定なら全種別を横断します。
search_media(keyword, type?, limit=20)— タイトル・作者をキーワード検索(「これ読んだ/観た/やった?」判定用)media_by_creator(creator, type?)— 指定した作者(著者・監督・開発元など)の記録を全件返すmedia_stats(type?, topCreators=10)— 総件数・種別内訳・作者別トップN・年別件数を集計
使い方1: ローカル(stdio)
git clone <このリポジトリのURL>
cd media-log-mcp
npm install
node server.mjs
node server.mjs を実行して、エラーなく起動しプロセスが待機状態になっていれば起動確認は完了です
(stdio 前提のサーバーなので、ターミナルで単体実行しても何も表示されずに待機し続けるのが正常動作です。
終了する場合は Ctrl+C で止めてください)。
Claude Desktop などMCPクライアントへの登録
npm パッケージとして公開しているわけではないため、npx ではなく node コマンドで直接起動します。
設定ファイル(例: Claude Desktop の claude_desktop_config.json)に以下のように追記してください。
args の値は、クローンした先の server.mjs への絶対パスに置き換えます。
{
"mcpServers": {
"media-log": {
"command": "node",
"args": ["/絶対パス/media-log-mcp/server.mjs"]
}
}
}
設定後、MCP クライアントを再起動すると media-log サーバーが認識され、上記3つのツールが利用できます。
使い方2: リモート(AWS Lambda + Function URL)
claude.ai(Web) やモバイルアプリからも使いたい場合、AWS Lambda に立てて「リモート MCP コネクタ」として登録します。ローカルの stdio サーバーは claude.ai(Web) からは使えないため、Web で使うにはこちらが必要です。
構成
- AWS Lambda + Function URL(認証なし)/ Node.js 22.x(arm64)
- トランスポート: Streamable HTTP(stateless、単一 JSON 応答)
- Express アプリ(
app.mjs)を@codegenie/serverless-expressで Lambda ハンドラ(lambda.mjs)に載せる - ツール定義(
mcp-server.mjs)は stdio 版とリモート版で共有 - 費用: Lambda 無料枠内(月100万リクエスト)。API Gateway も WAF も使わないので実質 $0/月
2段階の防御(認証なしで公開する代わり)
- IP制限 — Lambda ハンドラで送信元 IP を検査し、Anthropic の outbound レンジ
160.79.104.0/21(公式)以外を 403 で拒否 - URL秘匿 — MCP エンドポイントのパスを推測困難なランダム文字列にする(
/mcp/<ランダム>)。パスは環境変数MCP_PATHで渡し、コードには含めない
books.json自体は公開リポジトリに含まれるため、上記はデータ機密性というより無駄なアクセス・DoS を防ぐ目的です。
前提
- AWS アカウントと認証済みの AWS CLI
- AWS SAM CLI
デプロイ
# 1. 秘匿パスを生成(出力の32文字hexをメモ)
openssl rand -hex 16
# 2. デプロイ(McpPath に /mcp/<生成した文字列> を渡す)
sam deploy \
--stack-name media-log-mcp \
--resolve-s3 --capabilities CAPABILITY_IAM \
--region ap-northeast-1 \
--parameter-overrides 'McpPath=/mcp/<生成した文字列> AllowedCidr=160.79.104.0/21'
デプロイ後、出力の FunctionUrl の末尾に秘匿パスを付けたものが MCP エンドポイントです:
https://xxxx.lambda-url.ap-northeast-1.on.aws/mcp/<生成した文字列>
| パラメータ | 意味 | 既定 |
|---|---|---|
McpPath |
MCP エンドポイントの秘匿パス | (必須) |
AllowedCidr |
許可する送信元 IP レンジ | 160.79.104.0/21 |
スタック名を後から変えることはできません(変えると別スタックが新規作成されて Function URL が変わり、コネクタの再登録が必要になります)。
自分の PC から疎通確認したいときは、一時的に
AllowedCidrを自分のグローバル IP(curl https://checkip.amazonaws.comの結果)の/32にしてデプロイし、確認後に160.79.104.0/21へ戻します。本番レンジのままだと、Anthropic のクラウド経由(=Claude から)以外はすべて 403 になります。
claude.ai / Claude Desktop への登録
- Settings > Connectors(設定 > コネクタ)を開く
- Add custom connector(カスタムコネクタを追加)
- 上記の MCP エンドポイント URL(秘匿パス込み)を入力。認証(OAuth)は不要
- 追加後、チャットの「+」からコネクタを ON にして使う
無料プランでも1個まで登録できます。一度登録すれば Web・モバイル・Desktop すべてで使えます(新規登録は Web / Desktop 推奨)。
データについて
メディア種別ごとに JSON ファイルを分けて管理します。記録の追加・修正はファイルを直接編集して git にコミットする運用です(リモート版は再デプロイで反映)。
| 種別 | ファイル | パス上書き用の環境変数 |
|---|---|---|
| 本(Bookmeter) | books.json |
BOOKS_JSON |
| 本(Kindle購入分) | kindle-books.json |
KINDLE_BOOKS_JSON |
| オーディオブック | audiobooks.json |
AUDIOBOOKS_JSON |
| 映画 | movies.json |
MOVIES_JSON |
| アニメ | anime.json |
ANIME_JSON |
| ドラマ | dramas.json |
DRAMAS_JSON |
| バラエティ | varieties.json |
VARIETIES_JSON |
| ゲーム | games.json |
GAMES_JSON |
books.json(Bookmeter エクスポート形式)
Bookmeter からのエクスポート形式をそのまま温存しています。読み込み時に下記の共通スキーマへ正規化されます。
| フィールド | 内容 |
|---|---|
t |
タイトル |
a |
著者 |
d |
日付("YYYY/MM/DD" 形式の文字列、または "日付不明") |
r |
感想文 |
i |
Amazon画像URL |
u |
Amazon商品ページURL |
movies.json / anime.json / games.json(共通スキーマ)
最初から共通スキーマで記録します。title 以外は省略可で、任意の追加フィールドも
そのまま検索結果に含まれます。
[
{
"title": "作品タイトル",
"creator": "監督・開発元など",
"date": "YYYY-MM-DD",
"review": "感想",
"url": "関連URL"
}
]
dateは「自分が観た・遊んだ時期」。日付まで不明なら"2010頃"のような年表記でもよい (集計は文字列中の4桁年を拾う)。完全に不明なら空文字- 通称・略称で検索できるよう、
titleに"ゼルダの伝説 ティアーズ オブ ザ キングダム (ティアキン)"の ように括弧で併記する(検索対象はtitle+creatorのみのため) - 任意フィールドの例:
favoriteRank— 「好きな作品トップ10」の順位(movies / games で使用)platform/hours— 機種・プレイ時間/視聴時間(games / 映像記録で使用)status—played(プレイ済み)/tried(1時間以下の試遊、映像・オーディオブックでは冒頭だけのちょい見・ちょい聴き)/playing(プレイ中)/purchased(Kindleで購入したが読了記録なし)dateLast/episodes/source— 視聴期間の終端・視聴話数・記録の出典(Prime Video 視聴履歴からの取り込み分で使用。dateは初回視聴日)progress— オーディオブックの聴取進捗(%。audiobooks で使用)purchasedDate— Kindle 購入日(読了日がdateに入っている場合の補助。kindle-books で使用)
同じ種別を複数ファイルに分けることもできます(
SOURCESに同じtypeの行を複数書く。例:books.jsonとkindle-books.jsonはどちらもbook)。
種別の追加
新しい種別(ドラマなど)を増やす場合は、mcp-server.mjs の SOURCES に1行足して
対応する JSON ファイルを置くだけです。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。