Skip to main content
Glama
README.md
# kaken-mcp

科研費データベース KAKEN で採択課題や研究者を探せます。課題番号が分かっているときは、その番号から研究機関、研究期間、実施状況を確認できます。

## 利用前に

[uv](https://docs.astral.sh/uv/) と Git が必要です。Python 3.12以上に対応しています。[NIIのAPI利用登録](https://support.nii.ac.jp/ja/cinii/api/developer)で発行されたアプリケーションIDが必要です。CiNii Web APIのIDを取得済みなら同じIDを使えます。下の例の `YOUR_KAKEN_APP_ID` を手元の設定で差し替えてください。

## MCPクライアントに登録する

公開GitHubリポジトリから `uvx` で起動します。初回は依存関係の準備に時間がかかることがあります。

### Codex

```sh
codex mcp add kaken-mcp --env "KAKEN_APP_ID=YOUR_KAKEN_APP_ID" -- uvx --python 3.12 --from git+https://github.com/koizumikento/kaken-mcp.git@main kaken-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": {
    "kaken-mcp": {
      "command": "uvx",
      "args": ["--python", "3.12", "--from", "git+https://github.com/koizumikento/kaken-mcp.git@main", "kaken-mcp"],
      "env": {"KAKEN_APP_ID": "YOUR_KAKEN_APP_ID"}
    }
  }
}
```

登録後の質問例

> 科研費の採択課題から、都市のヒートアイランドに関する研究を5件探して。気になる課題は番号から研究期間と実施状況も調べて。

## MCPツール

| ツール | 用途 |
| --- | --- |
| `search_projects` | `query` にキーワードを指定し、課題名・課題番号・詳細ページを探す |
| `get_project` | `project_number` に課題・領域番号を指定し、研究機関、研究期間、実施状況を調べる。`21K00001` と `JP21K00001` のどちらも指定可能 |
| `search_researchers` | `name` に研究者の名前を指定し、研究者番号・現在の所属などを探す。`affiliation` で所属機関を絞り込める |

検索は1〜20件ずつ取得でき、続きは返された `next_start` を `start` に指定します。課題番号の照会では、該当するレコードを `items` に返します。照会した範囲で完全一致がなければ空になります。

## CLIで使う

CLIやPythonを実行するシェルで環境変数を設定します。

```powershell
$env:KAKEN_APP_ID = "YOUR_KAKEN_APP_ID"
```

macOSやLinuxのシェルでは `export KAKEN_APP_ID="YOUR_KAKEN_APP_ID"` を使います。

結果は標準出力にUTF-8のJSONで返ります。

```sh
uvx --python 3.12 --from git+https://github.com/koizumikento/kaken-mcp.git@main kaken-mcp search-projects --query "ヒートアイランド" --limit 5
uvx --python 3.12 --from git+https://github.com/koizumikento/kaken-mcp.git@main kaken-mcp get-project --project-number 21K00001
uvx --python 3.12 --from git+https://github.com/koizumikento/kaken-mcp.git@main kaken-mcp search-researchers --name "横山 幹子" --affiliation "筑波大学"
```

## Pythonから呼び出す

```sh
git clone https://github.com/koizumikento/kaken-mcp.git
cd kaken-mcp
uv sync --locked
```

```python
import asyncio

from kaken_mcp import get_project

result = asyncio.run(get_project("21K00001"))
print(result)
```

すでにイベントループがある場合は、関数を直接 `await` してください。

## 出典と利用条件

コードはMIT Licenseです。国立情報学研究所の科研費データベース KAKEN のOpenSearch APIを使用します。NIIのAPI利用細則では、自己の学術研究・非営利の情報利活用以外の目的には事前の申請と承認が必要です。取得した情報を利用する際は出典を記載してください。[公式API仕様](https://support.nii.ac.jp/ja/kaken/api/api_outline) · [KAKEN 利用規程](https://support.nii.ac.jp/ja/kaken/about/terms) · [NII ウェブAPI利用細則](https://support.nii.ac.jp/sites/default/files/cinii/webapi-term.pdf)

## 開発

```sh
uv sync --locked
uv run ruff check .
uv run ty check
uv run pytest
uv build
```