orcid-mcp-server について
ORCIDの公開レジストリを検索し、研究者の業績、所属、助成金、査読記録をまとめるMCPサーバーです。著者の識別や外部識別子を使った追加調査にも対応します。
主な機能
- 01条件指定による研究者検索
- 02公開プロフィールの取得
- 03業績一覧と詳細の取得
- 04所属・助成金記録の取得
- 05査読・研究リソースの取得
- 06ORCID iD候補の順位付け
活用シーン
- 01氏名や所属から研究者を検索
- 02研究者プロフィールの作成
- 03外部識別子を使った出版物の追跡
MCP 対応
MCPツールでORCIDレジストリの検索と研究者記録の取得を提供し、プロフィールと業績のリソースも公開します。STDIOまたはStreamable HTTPで利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://orcid.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-orcid https://orcid.caseyjhand.com/mcp{"mcpServers":{"cyanheads-orcid":{"type":"http","url":"https://orcid.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-orcid":{"type":"http","url":"https://orcid.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-orcid":{"type":"http","url":"https://orcid.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-orcid":{"serverUrl":"https://orcid.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
9| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| orcid_id | string | はい | ORCID iD。値のみ(0000-0001-2345-6789)、または orcid.org URI(https://orcid.org/0000-0001-2345-6789)を指定します。チェックディジットは X または x の場合があります。 |
詳細
@cyanheads/orcid-mcp-server
MCP を介して ORCID レジストリから研究者のプロフィール、業績、所属、研究助成、査読記録を検索・取得します。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://orcid.caseyjhand.com/mcp
概要
ORCID レジストリの研究者識別情報を扱います。著者を検索して同定し、プロフィール、業績、所属、研究助成、査読記録から研究者の詳細情報をまとめ、外部識別子をたどって Crossref、PubMed、arXiv の情報と連携できます。
ツール
| ツール | 説明 |
|---|---|
orcid_search_researchers | 構造化フィールドのパラメーター(氏名、所属、キーワード、ROR ID、DOI、PMID、助成番号)を使って ORCID レジストリを検索します |
orcid_get_profile | 研究者の公開プロフィール(氏名、別名、略歴、キーワード、研究者 URL、外部識別子)を取得します |
orcid_get_works | 研究者の業績(出版物、データセット、ソフトウェア、プレプリント)をページネーション形式で取得します |
orcid_get_work_detail | 最大 1,000 個の put-code を受け取り、重複を除いた最初の 100 件の業績を取得し、続きの取得に使用するコードを返します |
orcid_get_affiliations | 雇用、教育、会員資格などの所属記録を取得します |
orcid_get_funding | グループ化された研究助成の概要を一覧表示するか、1 件の助成を選択して登録済みの説明、金額、助成元を取得します |
orcid_get_peer_reviews | 会合組織、査読者の役割、査読の種類などの査読活動を取得します |
orcid_get_research_resources | 計算資源の割り当て、機器の利用、研究施設などの研究リソースを一覧表示します |
orcid_resolve_researcher | 曖昧な著者名を、検証済み ORCID iD 候補の順位付きリストに照合して特定します |
リソース
| リソース | 説明 |
|---|---|
orcid://researcher/{orcid_id}/profile | 研究者プロフィール(人物セクション)— 氏名、別名、略歴、キーワード、外部 ID |
orcid://researcher/{orcid_id}/works | 研究者の業績一覧 — 最初の 25 件と合計件数 |
すべてのリソースデータにはツールからもアクセスできます。プロンプトに安定した研究者コンテキストを挿入する場合はリソースを使用し、結果のフィルタリングや処理が必要な場合はツールを使用してください。
機能リファレンス
orcid_search_researchers tool
- 構造化パラメーター —
given_name、family_name、affiliation、keyword、ror_id、doi、pmid、grant_number— は自動的に AND で結合されます。queryは Solr の生構文を追加します。これだけが指定された場合は入力どおりに送信され、それ以外の場合は 1 つの括弧付きグループとして AND 結合されるため、トップレベルのORは選択肢を維持します(-keyword:xのような除外のみのクエリは、除外だけのグループには ORCID が一致しないため、括弧で囲まずに AND 結合されます) - 空白以外のパラメーターを 1 つ以上指定する必要があります。空または空白のみの検索は、レジストリ全体を対象に実行されず、拒否されます
given_nameはフレーズ一致します。ただし、値がイニシャルのみ(J.、J. A.)の場合は、各文字で始まる名に一致しますdoiとpmidはdoi-self/pmid-selfフィールドクエリに対応し、該当する研究者の ORCID レコードにリンクされた特定の業績を検索します。URL 形式やラベル形式(https://doi.org/…、doi:…、https://pubmed.ncbi.nlm.nih.gov/…/、PMID:…)も受け付け、識別子本体に変換されます。その際、大文字と小文字は保持されます。空白以外の値には、完全な DOI(10.に続いて数字、/、空白以外の接尾辞を含むもの)または数字のみの PMID を指定する必要があります。不正な値やプレフィックスのみの値は、リクエストの前にエラーになります。省略されたフィールドや実際に空のフィールドは未設定のままになりますror_idは ROR ID のみ(00f54p054)またはror.orgURL(https://ror.org/…、ror.org/…、www.ホスト、末尾のスラッシュ付き)で指定できます。大文字と小文字は問いません。ORCID がインデックス化するhttps://ror.org/<小文字の ID>形式に変換されます。ROR ID ではない値やチェックディジットが一致しない値は、検索の実行前に拒否されますgrant_numberは、研究者の資金提供項目に記載された助成金番号と大文字・小文字を区別せずにフレーズ一致します。ハイフンやスラッシュなどの区切り文字の間の部分が対象です。5F31MH010500は5F31MH010500-03にも一致しますが、途中で切れた番号には一致しません。一致した各項目を確認するにはorcid_get_fundingと組み合わせてくださいrows:1~10,000 件を指定できます(デフォルトは 20 件)。取得前に 1,000 件が上限として適用されます。両方の画面で、要求された件数と実際の上限を示す通知が表示されます。start:0~10,000 のオフセットページネーション(未認証リクエストに対する ORCID Public API の上限)- 構造化出力またはテキストが 64,000 バイトを超える前に、ページの取得が停止します。そのため、返される
rowsは要求件数を下回る場合があります。nextStartは、除外された最初の結果から続行します - 氏名と所属機関のデータを含む、拡張検索結果を返します。基本的な検索のためにプロフィールを追加取得する必要はありません
- フィールドを指定した正確な検索にはこれを使用し、曖昧な氏名を順位付けして判別する必要がある場合は
orcid_resolve_researcherを使用してください
orcid_get_profile tool
- ORCID iD(
0000-0001-2345-6789)のみ、またはorcid.org URI(https://orcid.org/…、orcid.org/…、www.ホスト、末尾のスラッシュ付き)を受け付けます。小文字のxのチェックディジットはXに正規化されます。orcid_idを受け取るすべてのツールで同じ形式を使用できます。orcid://researcher/{orcid_id}/…リソースでは、iDのみを指定します - 氏名、その他の名前(旧姓、翻字、イニシャル形式)、経歴、キーワード、研究者のURL、外部識別子(Scopus Author ID、ResearcherID、Loopなど)、メールアドレス、国コードを1回のレスポンスで返します
- 公開されているフィールドのみが返されます。フィールドごとの公開範囲は研究者が設定します。公開データのない各セクション(例:「公開メールアドレスまたは国情報なし」)は
noticeに記載されます。セクションが空でも、データがないのではなく非公開の場合があります - 著作物や所属情報を取得する前に研究者の資料を作成するための入口となります
orcid_get_works tool
- デフォルトでは先頭の50件の著作物を返します(
limitは1~10,000を指定できますが、実効上限は1,000で、両方の出力に通知が表示されます)。offsetと返されたnextOffsetを使ってページを取得します。利用可能な合計数はworkCountで示されます - 構造化出力またはテキストが64,000バイトを超える前にもページの取得を停止するため、
returnedCountがlimitより小さくなることがあります。いずれの場合も、truncatedとnextOffsetで続きの取得方法を示します include_external_idsをfalseに設定すると、DOI/PMID/arXiv/ISBNの識別子リストを省略し、ペイロードを軽量化できます- ORCIDの著作物グループごとに1件のレコードを返します。識別子はグループ全体のものです。優先バージョンに属するものに加え、Crossref DOIに付随するPMIDなど、別のソースが保持する識別子も含まれます
- 外部識別子は、Crossref、PubMed、arXivへの連鎖に使える形式に整えられています
- 要約のみを返します。抄録や貢献者リストを取得するには、著作物の
putCodeをorcid_get_work_detailに渡してください - 各著作物には
sourcesが記載されます。ソースには研究者、またはCrossrefや大学システムなどの会員組織が含まれます。研究者自身が申告した情報にはselfAssertedが付与されます。リストが空でも、出版物がないことを意味するわけではありません
orcid_get_work_detail tool
put_codes:1回の呼び出しにつき、orcid_get_worksから取得したコードを1~1,000件指定できます。取得前に初出順で重複を除き、1回のリクエストで先頭の異なる100件を処理します。入力上限が適用された場合は、通知にその上限が記載されます- 抄録、CRediTの役割を含む貢献者、レコードの外部ID、引用情報メタデータ(BibTeXなどの登録形式)、雑誌名、URLを返します
- 貢献者が100名を超えるレコードでは、先頭の100名と、ORCID iDで照合した研究者本人のエントリーを保持します。切り捨ては
contributorCountとcontributorsTruncatedで示されます。引用情報が8,192バイトを超える場合は省略され、citationOmittedで示されます。これにより、大規模な共同研究論文も他のレコードと一緒に収まります - put-codeごとに、著作物のあるソースのバージョンが1つ指定されるため、その識別子の数は
orcid_get_worksが著作物グループに対して示す数より少ない場合があります。そのソースはsourcesに記載されます - put-codeごとのエラー(未検出またはアクセス不可)は
errorsのエントリーとして返され、バッチ内の残りは引き続き処理されます - 構造化出力またはテキストが64,000バイトを超える前にレコードを追加し、継続情報と通知のための領域をすべて確保します。
deferredPutCodesには、処理対象の著作物または特定済みエラーがない、リクエストされた異なるコードがすべてリクエスト順に含まれます。入力上限を超えるコードや、上流レスポンスにないコードも含まれます。別の呼び出しでput_codesとして渡してください。通知では各原因を区別します - 上流のレート制限は
RateLimitedエラーとして示されます。ORCIDからretryAfterが送信されている場合は、その値も含まれます
orcid_get_affiliations tool
typesは返すセクションを絞り込みます。employment、education、invited-positions、distinctions、memberships、qualifications、services、またはallを指定できます。デフォルトは employment と education です。明示的な空のリストは拒否されます- 要求するタイプの数にかかわらず、上流への呼び出しは1回です
- 各レコードについて、組織名、曖昧さを解消したID(ROR/GRID/Ringgold)、部署、役職、期間を返します
- 各レコードの
sourcesには、研究者本人、または大学の研究情報システムなどの会員組織のうち、誰が情報を追加したかが記載されます。結果が空でも、所属先がないことを意味するわけではありません
orcid_get_funding tool
put_codeを指定しない場合、view: summaryを使って、グループ化された助成金の全リストを1回のリクエストで返します。各優先サマリーには、任意のputCodeが含まれます- 助成金の種類(grant、contract、award、salary-award)、資金提供者名と曖昧さを解消したID(Crossref Funder ID/ROR)、助成金番号、助成期間を返します
- ORCIDの助成金グループごとに1レコードを返し、その優先バージョンを使います。同じ助成金が2回登録されていても、
fundingCountでは1件として数えます。同じ助成金番号での更新など、グループ内のバージョンに異なる受賞期間が記録されている場合、periodsに各期間が列挙されます view: detailで取得するには、サマリーのputCodeをput_codeとして指定します。この場合、該当する登録情報のみを取得し、その登録情報固有のソースと、任意の説明、URL、amount: { value?, currency? }を返します。小数の文字列表記はそのまま保持されます。金額や通貨がない場合は、その項目も含まれませんdescription_offset(デフォルトは 0、put_codeが必須)を指定すると、登録された説明をページ分割して取得できます。オフセットは Unicode コードポイント単位です。説明がある場合、各助成金レコードにはdescriptionOffsetと完全なdescriptionLengthが含まれ、テキストが残っている間はnextDescriptionOffsetも含まれます。次のオフセットを指定して、同じセレクターを繰り返してください。受賞情報は各ページに繰り返し含まれます。テキスト部分では説明が JSON 文字列で表現されるため、元の CRLF 改行が維持されます- どちらの詳細出力も、メタデータと続きの情報を含めて 64,000 バイト以内に収まります。
budgetOverflowは、メタデータまたは単一のコードポイントによる例外を明示します。ページサイズが上限を超えても、ページ送りは進みます。説明が存在しない場合、空の場合、または指定位置を超えている場合は、続きの情報はありません。別々のリクエストではその時点の登録情報が読み取られるため、ページ間で登録情報が変更されると、固定されたスナップショットにはなりません - 選択した登録情報を取得できない場合は
funding_not_found、公開アクセスが拒否された場合はfunding_inaccessible、セレクターを指定せずにページ分割を要求した場合はdetail_requiredを返します。各エラーには復旧方法の説明が含まれます - 助成金情報は研究者本人、または会員組織(資金提供者、機関、検索・リンクツール)から提供され、各レコードの
sourcesにはどちらが提供したかが記載されます。実際に助成金を受けている研究者の多くは、ここに情報を登録していません。情報がないことは、助成金を受けていないことを意味しません
orcid_get_peer_reviews tool
- 上流の順序で履歴をページ分割して取得します。
offset(デフォルトは 0)とlimit(デフォルトは 50、指定可能な最大値は 10,000、実効上限は 1,000)を指定できます。両方の出力形式で、上限が引き下げられた場合は通知されます reviewCountは返されたレビュー数、totalCountは履歴全体の件数を示します。truncatedが true の場合は、nextOffsetを使って続きの取得を行います。空のページや末尾を超えたページにも合計件数は含まれますが、続きの情報はありません- 通知と続きの情報を含め、どちらの出力形式も 64,000 バイト以内に収まります。分割できないほど大きなレビューが1件ある場合は、明示的な例外通知を付けてそのレビューのみを返し、続きの取得位置はそのレビューの次に進みます
- 各レコードについて、査読者の役割(
reviewer、editor、chairなど)、レビューの種類、完了日、ISSNをキーとするグループ識別子、招集組織のORCIDを返します - 招集組織は、ジャーナルではなく、レビューを取り込んだサービス(Publons、Clarivate など)であることがよくあります。ORCIDはジャーナル名を返さないため、ISSNがジャーナルのキーとなり、ISSNがあるレビューでは各レビューの先頭に表示されます
- レビューは研究者本人、またはレビューを取り込む会員組織から提供され、各レコードの
sourcesにはどちらが提供したかが記載されます。収録状況は研究者によって大きく異なります
orcid_get_research_resources ツール
- 計算資源の割り当て、機器の利用、研究施設、データリソース、臨床研究の登録を対象とします
- ORCID内の比較的新しく、登録件数の少ないセクションです。研究者の大半にはエントリーがなく、エントリーがないからといって該当するものが存在しないとは限りません
- エントリーは通常、研究者が追加するのではなく、資源割り当てシステム(例:ACCESS、XSEDE)によって登録されます
- 資源のタイトル、ホスティング組織(曖昧さを解消したID付き)、外部識別子(多くの場合、ポータルのURI)、利用期間、および登録元の
sourcesを返します - デフォルトの
view: summaryではプロポーザルを一覧表示します。proposalHostsにはすべてのプロポーザルホストが含まれ、hostOrganizationには互換性のため最初のホストが保持されます - プロポーザルの
putCodeをput_codeとして指定すると、view: detailが利用できます。各項目には、その名前、種類、hostsに含まれるすべての運営者、外部識別子、URLが含まれます。プロポーザルの来歴はリソースレコードに保持されます - 詳細ページでは
item_offset(デフォルトは0)とitem_limit(デフォルトは50、有効な最大値は100、指定可能な最大値は10,000)を使用します。どちらもput_codeが必要です。ページの情報はitemCount、returnedItemCount、itemOffset、itemsTruncated、nextItemOffsetで示されます。トップレベルのtruncatedはitemsTruncatedと同じ値になり、itemLimitNoticeはどちらの表示形式でも上限が引き下げられたことを通知します - どちらの詳細表示形式も、プロポーザルのメタデータと継続情報を含めて64,000バイト以内です。
nextItemOffsetから再開してください。分割できないサイズ超過の項目はbudgetOverflowとともに単独で返されます。分割できないプロポーザルのメタデータにも明示的な例外が適用されます。空のページと範囲を超えたページには継続情報がありません
orcid_resolve_researcher ツール
- 透明性のある識別シグナルを伴う候補を順位付きで返します(
rowsのデフォルトは5、指定可能な範囲は1~10,000、各検索段階での有効な最大値は20)。識別シグナルには、名前の一致タイプ(exact/partial/other-name/none)、所属機関の重複フラグ、アンカータイプ(doi/pmid/none)が含まれます。上限に達した場合は、要求された件数と有効な件数を通知するとともに、結果が空の場合のガイダンスも示します - 名前と所属機関の比較では大文字・小文字とアクセントを区別しません。
José BaselgaとJose Baselgaは、同じ候補として同一に分類されます doiまたはpmidが指定された場合(URL形式、または単体形式)、アンカーとしてdoi-selfまたはpmid-selfを使用します。その研究成果をORCIDレコードに関連付けている研究者は、ほぼ確実に一致します- フルネーム(
Jennifer Doudna)、イニシャルを含む著者名表記(J. Doudna、Jennifer A. Doudna)、またはFamily, Given形式(Doudna, Jennifer。Jennifer Doudnaとして解釈)を受け付けます。候補者の最初の名がイニシャルで始まる場合、そのイニシャルはpartial一致としてカウントされます - まず名前の完全なフレーズを検索するため、入力どおりの名前が一致すればクエリは1回だけ実行されます。それ以降の各段階は、それ以前のすべての段階で結果が見つからなかった場合にのみ実行されます。所属機関を指定したイニシャルの著者名表記、次に所属機関を指定しない名前のフレーズと著者名表記、次にORCIDレコードに記載された別名、最後に指定された各アンカー単独の順で検索します
- 合成スコアはありません。生のシグナルフィールドのみを返すため、呼び出し側で独自の順位付けロジックを適用できます
orcid://researcher/{orcid_id}/profile リソース
- 名前、別名、略歴、キーワード、研究者のURL、外部識別子を
application/json形式で返します {orcid_id}はXまたはxのチェックデジットを含むID単体です。URIのセグメントにはhttps://orcid.org/形式を指定できません- ツールと同様に、型付きの
data.reasonと復旧のヒントを伴って失敗します。チェックサムが無効なIDにはinvalid_orcid_id(上流への呼び出し前にローカルで拒否)、ORCIDが認識していないID、または公開名のないレコードにはprofile_not_foundが返されます - レスポンスを条件分岐のロジックに渡す必要がある場合は、
orcid_get_profileツールを優先してください
orcid://researcher/{orcid_id}/works リソース
- 先頭の25件の業績と
workCount(利用可能な総件数)をapplication/jsonとして返します {orcid_id}は、チェックディジットがXまたはxの、iDのみの値ですinvalid_orcid_id(チェックサムエラー。上流への呼び出し前に検出)またはprofile_not_found(不明なiD。data.orcidIdを含む)で失敗し、いずれの場合も復旧のヒントを示します- このリソースではカーソルによるページネーションはできません。全件をページ分割して取得するか、結果をフィルタリングするには、
orcid_get_worksツールを使用してください - レスポンス内のDOIとPMIDは、CrossrefまたはPubMedとの連携にそのまま利用できます
機能
@cyanheads/mcp-ts-coreを基盤とし、stdioおよびStreamable HTTPトランスポート、切り替え可能な認証(none/jwt/oauth)、差し替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションのOpenTelemetryトレーシングに対応した構造化ログを提供します。
ORCID 固有の機能:
- ORCID Public API v3.0(
https://pub.orcid.org/v3.0)を使用します。公開読み取りエンドポイントにAPIキーは不要です - 主な検索バックエンドとして
expanded-searchを使用し、ORCID iD、氏名、所属機関のデータをインラインで返すことで、N+1件のプロフィール取得を排除します - 所属機関のクエリでは単一の
/activities呼び出しをクライアント側でフィルタリングするため、セクションごとに取得する場合と比べて、上流への並列呼び出しを最大7回削減します - 外部識別子(DOI、PMID、arXiv ID)を、Crossref、PubMed、arXivとのサーバー間連携にそのまま使える形式で業績レスポンスに含めます
- 登録システムによって業績のタイトル、抄録、資金提供および研究リソースのタイトルに残されたインラインマークアップ(
<i>、<sup>、<h4>)をプレーンテキストに変換し、登録された引用はそのまま転送します
エージェントが利用しやすい出力:
- 出典情報 —
orcid_resolve_researcherは、合成された信頼度スコアではなく、生の識別シグナル(氏名の一致タイプ、所属機関の重複、アンカータイプ)を返します - 各項目の登録者 — 6つのアクティビティツールが返すすべてのレコードに
sourcesが含まれます。これには、項目を追加した個人または会員組織(大学システム、資金提供者、Crossref、Web of Science)と、研究者自身が申告したかどうか(selfAsserted)が記録されます。グループ化された業績と資金提供には、グループ内のすべての出典が記載されます - 切り詰めの把握 —
orcid_search_researchersは、ORCID Public APIのオフセット上限10,000件に対するnumFoundとtruncatedフラグを報告し、レスポンスを64,000バイトの上限に合わせて切り詰め、続きの取得に使うnextStartを返します。orcid_get_worksは、独自のページサイズと64,000バイトのレスポンス上限に対するworkCountとtruncatedを報告します - 部分的な失敗の分離 —
orcid_get_work_detailは、バッチ全体を失敗させず、正常に解決した業績とともにput-codeごとのエラーを返し、レスポンス上限のために取得を保留したput-codeも示します - 空の結果に関する案内 —
orcid_get_works、orcid_get_affiliations、orcid_get_funding、orcid_get_peer_reviews、orcid_get_research_resourcesは、結果が空の場合に通知を返します。これは、研究者も会員組織も項目を追加していない場合や、公開範囲の設定によって非表示になっている場合を示す可能性があり、項目が存在しないと確定したことを意味するわけではないと説明します。orcid_get_profileは、公開データのないセクションをそれぞれ示します - レコードのテキストをデータとして明示 — テキスト出力では、略歴と抄録を引用ブロックとして表示し、氏名、タイトル、組織名を1行に収めます。また、登録された引用は閉じることのできないコードフェンスに入れるため、研究者や登録システムが書いたテキストがサーバー独自の見出しやラベルとして解釈されません。
structuredContentにはすべての値がそのまま格納されます
はじめに
公開ホストインスタンス
公開インスタンス(https://orcid.caseyjhand.com/mcp)を利用できます。インストールは不要です。Streamable HTTPで提供され、クライアントごとに設定形式が異なります。
Claude Codeの場合:
claude mcp add --transport http orcid-mcp-server https://orcid.caseyjhand.com/mcp
Clineの場合(cline_mcp_settings.json):
{
"mcpServers": {
"orcid-mcp-server": {
"type": "streamableHttp",
"url": "https://orcid.caseyjhand.com/mcp"
}
}
}
Cursorの場合(mcp.json):
{
"mcpServers": {
"orcid-mcp-server": {
"url": "https://orcid.caseyjhand.com/mcp"
}
}
}
Claude Desktopでは、Settings → Connectorsからリモートサーバーを追加します。
セルフホスト/ローカル
MCP クライアントの設定ファイルに以下を追加してください。API キーは不要です。ORCID Public API は一般向けの読み取りアクセスが可能です。
{
"mcpServers": {
"orcid-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/orcid-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、npx を使う方法(Bun は不要です):
{
"mcpServers": {
"orcid-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/orcid-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、Docker を使う方法:
{
"mcpServers": {
"orcid-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/orcid-mcp-server:latest"
]
}
}
}
Streamable HTTP を使う場合は、トランスポートを設定してサーバーを起動してください:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24+)。
- API キーは不要です。ORCID Public API は一般向けの読み取りアクセスが可能です。ORCID Public API ToS §2 に基づき、非営利目的でのみご利用いただけます。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/orcid-mcp-server.git
- ディレクトリに移動します:
cd orcid-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env if needed — no required vars
設定
すべての設定は、src/config/server-config.ts の Zod スキーマを使って起動時に検証されます。主な環境変数:
| 変数 | 説明 | デフォルト |
|---|---|---|
ORCID_API_BASE_URL | ORCID API のベース URL を上書きします。サンドボックス(https://pub.sandbox.orcid.org/v3.0/)を指定する場合に便利です。 | https://pub.orcid.org/v3.0 |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP エンドポイントのパス | /mcp |
MCP_SESSION_MODE | HTTP セッションモード:auto、stateful、または stateless。このサーバーは createApp() で stateless を宣言します。ハンドラーの実行中に呼び出し元へ入力を求めるツールはありません。設定値が指定されている場合は、そちらが優先されます。 | stateless |
MCP_PUBLIC_URL | TLS 終端リバースプロキシ構成でのパブリックオリジン | なし |
MCP_AUTH_MODE | 認証:none、jwt、または oauth | none |
MCP_LOG_LEVEL | ログレベル(debug、info、warning、error など) | info |
MCP_GC_PRESSURE_INTERVAL_MS | Bun 専用の強制 GC 負荷ループ(オプトイン、ミリ秒)。HTTP 負荷が継続する状況でヒープの増加が見られる場合は、60000 をお試しください。 | 0(無効) |
LOGS_DIR | ログファイルのディレクトリ(Node.js のみ) | <project-root>/logs |
STORAGE_PROVIDER_TYPE | ストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1 | in-memory |
OTEL_ENABLED | OpenTelemetry を有効にします | false |
任意の上書き設定の一覧については、.env.example を参照してください。
サーバーの実行
ローカル開発
-
ビルドして実行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t orcid-mcp-server .
docker run --rm -p 3010:3010 orcid-mcp-server
Dockerfile では、HTTP トランスポート、ステートレスセッションモードをデフォルトとし、ログを /var/log/orcid-mcp-server に出力します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツールとリソースを登録し、サービスを初期化します。 |
src/config | サーバー固有の環境変数を解析し、Zod で検証します。 |
src/mcp-server/tools | ツール定義(*.tool.ts)。検索、曖昧性解消、プロフィール、業績、業績の詳細、所属、資金提供、査読、研究リソースに関する 9 つのツールがあります。 |
src/mcp-server/resources | リソース定義(*.resource.ts)。プロフィールと業績のリソースがあります。 |
src/services/orcid | ORCID Public API v3.0 のサービスレイヤーです。検索、レコードセクションの取得、リトライ/バックオフを行います。 |
tests/ | src/ に対応する単体テストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は以下のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックで
try/catchを使わないでください。 - リクエストスコープのログには
ctx.log、テナントスコープのストレージにはctx.stateを使います。 - 新しいツールとリソースは、
createApp()の配列に登録します。 - ORCID API の呼び出しは、未加工のレスポンスを検証してドメイン型に正規化し、出力スキーマを返すようにラップします。不足しているフィールドを決して捏造しないでください。
コントリビューション
問題の報告を歓迎します。提出前にチェックとテストを実行してください:
bun run devcheck
bun run test
License
Apache-2.0 — see LICENSE for details.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。