mediaarts-db-mcp
by koizumikento
README.md
# mediaarts-db-mcp
メディア芸術データベースで漫画雑誌の号を探し、掲載作品・話タイトル・開始ページを確認できます。マンガ・アニメ・ゲームの作品やシリーズをタイトルで探すこともできます。
## 利用前に
[uv](https://docs.astral.sh/uv/) と Git が必要です。Python 3.12以上に対応しています。APIキーは不要です。
## MCPクライアントに登録する
公開GitHubリポジトリから `uvx` で起動します。初回は依存関係の準備に時間がかかることがあります。
### Codex
```sh
codex mcp add mediaarts-db-mcp -- uvx --python 3.12 --from git+https://github.com/koizumikento/mediaarts-db-mcp.git@main mediaarts-db-mcp
codex mcp list
```
新しいセッションで `/mcp` を開くと、接続を確認できます。デスクトップ版では設定の「MCP servers」で、下のJSON例と同じコマンド・引数を指定できます。[Codexの公式設定ガイド](https://learn.chatgpt.com/docs/extend/mcp?surface=cli)
### Claude Desktop / Cursor
- Claude Desktop(Windows) `%APPDATA%/Claude/claude_desktop_config.json`
- Claude Desktop(macOS) `~/Library/Application Support/Claude/claude_desktop_config.json`
- Cursor `.cursor/mcp.json`(プロジェクト内)
設定ファイルの `mcpServers` に項目を追加して、クライアントを再起動してください。`uvx` が見つからない場合は、実行ファイルの絶対パスを指定します。
```json
{
"mcpServers": {
"mediaarts-db-mcp": {
"command": "uvx",
"args": ["--python", "3.12", "--from", "git+https://github.com/koizumikento/mediaarts-db-mcp.git@main", "mediaarts-db-mcp"]
}
}
}
```
登録後の質問例
> 『週刊少年マガジン』2011年の24号を探して、その号の目次を開始ページ順に10件出して。
> ゲーム作品名に「スーパーマリオブラザーズ」を含むものを5件、データベースの詳細ページ付きで出して。
## MCPツール
各ツールで `limit` は1〜50件、`start` は1から始まる取得位置です。次のページがある場合は、返された `next_start` を次回の `start` に指定します。`start` の上限は10001です。
### `search_manga_issues`
`query` に雑誌名の一部を指定します。必要に応じて `year`(西暦)、`volume_number`(巻)、`issue_number`(号)で絞り込みます。巻と号は文字列で完全一致します。号は誌面表記を優先し、誌面表記が未収録の場合はデータベースの号番号を使います。返された `issue_id` を `get_manga_issue_contents` に渡せます。
### `get_manga_issue_contents`
`issue_id` に `M` から始まる雑誌号IDを指定します。`start_page` はデータベースの表記のまま返します。目次が未収録の号では結果が空になることがあります。
### `search_works`
`query` にタイトルの一部、`medium` に `manga`、`anime`、`game` のいずれかを指定します。結果には作品・シリーズのID、タイトル、データベース上の分類、詳細ページが含まれます。
| `medium` | 検索対象 |
| --- | --- |
| `manga` | マンガ単行本シリーズ、マンガ雑誌の刊行物 |
| `anime` | TVレギュラー、TVスペシャル、劇場アニメのシリーズ |
| `game` | ゲーム作品 |
検索はデータベースのタイトル表記に対する部分一致です。巻、話、ゲームの機種別パッケージなどの個別資料は、詳細ページから確認してください。
## CLIで使う
結果は標準出力にUTF-8のJSONで返ります。
```sh
uvx --python 3.12 --from git+https://github.com/koizumikento/mediaarts-db-mcp.git@main mediaarts-db-mcp search-manga-issues --query '週刊少年マガジン' --year 2011 --issue-number 24
uvx --python 3.12 --from git+https://github.com/koizumikento/mediaarts-db-mcp.git@main mediaarts-db-mcp get-manga-issue-contents --issue-id M535428 --limit 5
uvx --python 3.12 --from git+https://github.com/koizumikento/mediaarts-db-mcp.git@main mediaarts-db-mcp search-works --medium game --query 'スーパーマリオブラザーズ' --limit 5
```
## Pythonから呼び出す
```sh
git clone https://github.com/koizumikento/mediaarts-db-mcp.git
cd mediaarts-db-mcp
uv sync --locked
```
```python
import asyncio
from mediaarts_db_mcp import get_manga_issue_contents, search_manga_issues, search_works
async def main() -> None:
issues = await search_manga_issues("週刊少年マガジン", issue_number="24", year=2011)
for issue in issues["items"]:
print(await get_manga_issue_contents(issue["issue_id"], limit=5))
break
print(await search_works("スーパーマリオブラザーズ", medium="game", limit=5))
asyncio.run(main())
```
すでにイベントループがある場合は、関数を直接 `await` してください。
## 出典と利用条件
コードはMIT Licenseです。メディア芸術データベースの公開SPARQLサービスを使用します。取得した情報の利用条件は配布元に従ってください。[公式SPARQL仕様](https://mediag.bunka.go.jp/madb_lab/lod/howto/) · [データセットとライセンス](https://github.com/mediaarts-db/dataset) · [MADB Lab 利用規約](https://mediag.bunka.go.jp/madb_lab/user_terms/)
## 開発
```sh
uv sync --locked
uv run ruff check .
uv run ty check
uv run pytest
uv build
```