クイックスタート¶
動かして1回ツールを呼ぶまで、5分ほど。ここでは HTTP 版の PAT モードを使う。 認可サーバが要らないので、コンテナ1つとトークン1本で済む。
1ファイル版を使うなら stdio 版を動かすを見ること。
1. InvenioRDM でトークンを発行する¶
UI なら <InvenioRDM>/account/settings/applications/tokens/new/、
アプリケーションコンテナの中からなら次のとおり。
作成・公開・ファイルの扱いは通常のアカウントで足りる。公開レコードの取り下げと復元には
admin ロールが要る——mcp:curate が対応するのがそれ。
自分のインスタンスでない場合や、トークンが通らない場合は InvenioRDM と繋ぐから始めること。リポジトリ側に要るものを まとめてある。
2. サーバを起動する¶
INVENIO_API と INVENIO_UI を自分のインスタンスに向ける。自己署名証明書なら
ルート CA を ./ca.crt に置く(CA_FILE で場所を変えられる)。
起動時の表示が、何をどう解釈したかを教えてくれる。
MCP リソースサーバ: http://0.0.0.0:9100/mcp
版 : 0.0.2
canonical URI (RFC 8707 resource) : http://127.0.0.1:9100/mcp
認証方式 (MCP_AUTH_MODE) : invenio
言語 (MCP_LANG) : ja(利用可能: en ja)
3. ツールを呼ぶ¶
export PAT=<手順1で発行したトークン>
curl -s -X POST http://127.0.0.1:9100/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Authorization: Bearer $PAT" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | head -c 400
検索にトークンは要らない。リポジトリなのだから、公開レコードは公開情報である。
curl -s -X POST http://127.0.0.1:9100/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"search_records","arguments":{"query":"","size":3}}}'
身元を訊くほうにはトークンが要る。
curl -s -X POST http://127.0.0.1:9100/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Authorization: Bearer $PAT" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"whoami"}}'
ヘッダを外すと同じ呼び出しが 401 を返し、WWW-Authenticate に必要な scope が載る。
これは失敗ではなく、発見フローが働いている姿。
4. 作ってみる¶
curl -s -X POST http://127.0.0.1:9100/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Authorization: Bearer $PAT" \
-d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{
"name":"create_record","arguments":{"metadata":{
"resource_type":{"id":"dataset"},
"title":"MCP から作成",
"publication_date":"2026-08-29",
"creators":[{"person_or_org":{"type":"personal",
"family_name":"山田","given_name":"太郎"}}]}}}}'
先に語彙を引かせる
resource_type.id は語彙から取る。list_vocabulary("resourcetypes") が正しい id を
返すので、エージェントは当てずっぽうで書いて 400 を集めずに済む。
5. クライアントを繋ぐ¶
{
"mcpServers": {
"invenio-mcp": {
"command": "npx",
"args": ["-y", "mcp-remote", "http://127.0.0.1:9100/mcp",
"--header", "Authorization:${AUTH_HEADER}",
"--transport", "http-only", "--allow-http"],
"env": {"AUTH_HEADER": "Bearer <PAT>"}
}
}
}
--allow-http はトークンを平文で送るので、手元の経路に限ること。Windows を含む
設定例はクライアントから繋ぐにまとめてある。