Zotero API Skill
Zotero のローカル HTTP サーバー(localhost:23119)および REST API(api.zotero.org)経由で文献管理操作を行う。
前提条件
ローカル API(Zotero 起動中のみ)
Zotero が起動中で、以下の設定が有効であること:
- •Zotero > 環境設定 > 詳細 > 「Allow other applications on this computer to communicate with Zotero」にチェック
接続確認:
bash
curl -s http://localhost:23119/connector/ping
REST API(クラウド操作)
環境変数が設定されていること:
- •
ZOTERO_API_KEY: API キー(https://www.zotero.org/settings/keys で作成) - •
ZOTERO_USER_ID: ユーザー ID
接続確認:
bash
curl -s -H "Zotero-API-Key: $ZOTERO_API_KEY" "https://api.zotero.org/keys/current"
コマンド
1. DOI 一括インポート (/zotero import)
code
/zotero import <DOI1> <DOI2> ... /zotero import --file <doi_list.txt> /zotero import --collection "コレクション名"
インポートスクリプト:
bash
bash ~/.claude/skills/zotero/scripts/zotero_import.sh --dois "10.1038/xxx,10.2196/yyy" [--collection "名前"]
処理フロー:
- •Zotero 起動確認(
/connector/ping) - •対象コレクション特定(指定なければ現在選択中を使用)
- •各 DOI →
doi.orgから BibTeX 取得(失敗時 CrossRef フォールバック) - •
/connector/import?session=<unique_id>に POST - •結果サマリー表示
2. 手動 BibTeX インポート (/zotero bibtex)
DOI のない文献用。BibTeX ファイルを直接インポート:
bash
bash ~/.claude/skills/zotero/scripts/zotero_import.sh --bibtex /path/to/file.bib
DOI 不明時は CrossRef API で検索:
bash
curl -s "https://api.crossref.org/works?query.bibliographic=著者名+キーワード&rows=5"
3. コレクション一覧 (/zotero collections)
bash
curl -s http://localhost:23119/api/users/0/collections | python3 -c "
import json, sys
for c in json.load(sys.stdin):
d = c['data']
print(f\"{d['key']} {d['name']}\")"
4. アイテム一覧 (/zotero list)
code
/zotero list # 現在選択中コレクション /zotero list --collection "名前" # 指定コレクション
5. アイテム検索 (/zotero search)
code
/zotero search "AI psychosis"
REST API 操作
コレクション作成
bash
curl -s -X POST \
-H "Zotero-API-Key: $ZOTERO_API_KEY" \
-H "Content-Type: application/json" \
"https://api.zotero.org/users/$ZOTERO_USER_ID/collections" \
-d '[{"name": "コレクション名"}]'
コレクション更新
bash
curl -s -X PUT \
-H "Zotero-API-Key: $ZOTERO_API_KEY" \
-H "Content-Type: application/json" \
-H "If-Unmodified-Since-Version: $VERSION" \
"https://api.zotero.org/users/$ZOTERO_USER_ID/collections/COLLECTION_KEY" \
-d '{"name": "新しい名前"}'
アイテム作成(最大50件/リクエスト)
bash
curl -s -X POST \
-H "Zotero-API-Key: $ZOTERO_API_KEY" \
-H "Content-Type: application/json" \
"https://api.zotero.org/users/$ZOTERO_USER_ID/items" \
-d '[{
"itemType": "journalArticle",
"title": "タイトル",
"creators": [{"creatorType": "author", "firstName": "名", "lastName": "姓"}],
"collections": ["COLLECTION_KEY"],
"tags": [{"tag": "タグ名"}]
}]'
アイテム部分更新(PATCH)
bash
curl -s -X PATCH \
-H "Zotero-API-Key: $ZOTERO_API_KEY" \
-H "Content-Type: application/json" \
-H "If-Unmodified-Since-Version: $VERSION" \
"https://api.zotero.org/users/$ZOTERO_USER_ID/items/ITEM_KEY" \
-d '{"tags": [{"tag": "new-tag"}]}'
アイテム削除
bash
curl -s -X DELETE \ -H "Zotero-API-Key: $ZOTERO_API_KEY" \ -H "If-Unmodified-Since-Version: $VERSION" \ "https://api.zotero.org/users/$ZOTERO_USER_ID/items/ITEM_KEY"
タグ一括削除
bash
curl -s -X DELETE \ -H "Zotero-API-Key: $ZOTERO_API_KEY" \ -H "If-Unmodified-Since-Version: $VERSION" \ "https://api.zotero.org/users/$ZOTERO_USER_ID/tags?tag=tag1+||+tag2"
グループライブラリ
すべてのエンドポイントは /users/<userID> を /groups/<groupID> に置き換えるだけ。
bash
# 所属グループ一覧 curl -s -H "Zotero-API-Key: $ZOTERO_API_KEY" \ "https://api.zotero.org/users/$ZOTERO_USER_ID/groups"
検索(REST API)
bash
# キーワード検索 curl -s -H "Zotero-API-Key: $ZOTERO_API_KEY" \ "https://api.zotero.org/users/$ZOTERO_USER_ID/items?q=keyword&qmode=titleCreatorYear" # タグフィルタ(AND: 複数 tag、OR: || 区切り、NOT: - 接頭辞) curl -s -H "Zotero-API-Key: $ZOTERO_API_KEY" \ "https://api.zotero.org/users/$ZOTERO_USER_ID/items?tag=AI&tag=review"
API 概要
ローカル API
| エンドポイント | メソッド | 用途 |
|---|---|---|
/connector/ping | GET/POST | 起動確認 |
/connector/import?session=ID | POST | BibTeX/RIS インポート |
/connector/getSelectedCollection | POST | 選択中コレクション |
/api/users/0/collections | GET | コレクション一覧 |
/api/users/0/collections/:key/items | GET | アイテム一覧 |
/api/users/0/items | GET | 全アイテム |
REST API (api.zotero.org)
| エンドポイント | メソッド | 用途 |
|---|---|---|
/users/<id>/collections | GET/POST | コレクション一覧/作成 |
/users/<id>/collections/<key> | PUT/DELETE | コレクション更新/削除 |
/users/<id>/items | GET/POST | アイテム一覧/作成(最大50件) |
/users/<id>/items/<key> | PUT/PATCH/DELETE | アイテム更新/削除 |
/users/<id>/tags | GET | タグ一覧 |
/users/<id>/tags?tag=... | DELETE | タグ一括削除 |
/users/<id>/searches | GET/POST | 保存済み検索 |
/users/<id>/items/<key>/file | GET/POST/PATCH | 添付ファイル |
/users/<id>/groups | GET | グループ一覧 |
/groups/<id>/... | 各種 | グループ操作 |
詳細: references/api-endpoints.md
重要な注意点
ローカル API
- •Local API (
/api/...) は GET のみ(読み取り専用) - •Connector API (
/connector/...) は POST で読み書き可能 - •
/connector/importのsessionパラメータは毎回ユニークにする(重複で 409 エラー) - •BibTeX にシェル特殊文字がある場合は
--data-binary @file.bibでファイル経由送信 - •インポート先は Zotero UI で選択中のコレクション に保存される
REST API
- •認証:
Zotero-API-Key: <key>ヘッダー(推奨) - •更新/削除時は
If-Unmodified-Since-Version: <version>が必須(未指定 → 428) - •バッチ上限: 最大 50 件/リクエスト
- •レートリミット:
Backoff/429 + Retry-Afterベース - •重複送信防止:
Zotero-Write-Token: <token>ヘッダー