cern-inspire-mcp-server について
cern-inspire-mcp-serverは、高エネルギー物理の研究者向けにINSPIRE-HEPの文献とHEPDataレコードを検索します。論文、著者、実験、引用指標の照会やBibTeX/LaTeX出力に対応し、研究タスクをつなぎやすい構造化データを返します。
主な機能
- 01条件指定とページ分割による論文検索
- 02著者と実験の検索
- 03引用数とh-indexの集計
- 04BibTeXまたはLaTeX形式での引用出力
- 05HEPData測定レコードの検索
活用シーン
- 01テーマや期間を指定した論文の検索
- 02著者の引用指標の確認
- 03文献検索結果の引用情報の出力
- 04論文に対応するHEPDataレコードの特定
MCP 対応
MCPクライアントに8つのツール、文献リソーステンプレート、エージェントスキルを提供します。STDIOとStreamable HTTPに対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://cern-inspire.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-cern-inspire https://cern-inspire.caseyjhand.com/mcp{"mcpServers":{"cyanheads-cern-inspire":{"type":"http","url":"https://cern-inspire.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-cern-inspire":{"type":"http","url":"https://cern-inspire.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-cern-inspire":{"type":"http","url":"https://cern-inspire.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-cern-inspire":{"serverUrl":"https://cern-inspire.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
8| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | integer | いいえ | ページ番号(1から開始)。page × size は 10,000 以下である必要があります。 |
| size | integer | いいえ | 1ページあたりの論文数(1–100、デフォルトは 10)。 |
| sort | enum | いいえ | 結果の順序:relevance(デフォルト)、mostrecent、または mostcited。relevance | mostrecent | mostcited |
| query | string | はい | INSPIRE のクエリ構文またはフリーテキスト。一般的な演算子:"a Jane.Doe.1" または "a Doe, J"(著者)、"t higgs boson"(タイトル内の語)、"cn atlas" または "collaboration:atlas"(コラボレーション)、"date > 2015"、"topcite 500+"(500回以上引用)、"refersto:recid:451647"(あるレコードを引用する論文)、"citedby:recid:451647"(そのレコードが引用する論文)、"j Phys.Rev.Lett."(ジャーナル)、"eprint 1207.7214"。and/or/not で組み合わせられます。単独の語はすべてのフィールドを検索します。"a:" など、認識された空のフィールド句は無効です。それ以外の構文は完全な文法検証を行わずに INSPIRE に渡されます。cern_inspire_list_reference の search_syntax トピックを参照してください。 |
| year_to | integer | いいえ | 含める最新年(1900–2100、両端を含む)。INSPIRE が論文に記録した最も早い日付で照合します。指定しない場合、上限はありません。 |
| subjects | array | いいえ | INSPIRE の分野カテゴリに限定します(最大4件)。複数の値を指定した場合はすべてに一致する必要があり、いずれか一つではありません。値:Astrophysics、Phenomenology-HEP、Theory-HEP、Quantum Physics、Unknown、Gravitation and Cosmology、Experiment-HEP、Theory-Nucl、Accelerators、Instrumentation、General Physics、Experiment-Nucl、Math and Math Physics、Condensed Matter、Computing、Lattice、Other、Data Analysis and Statistics。 |
| year_from | integer | いいえ | 含める最も早い年(1900–2100、両端を含む)。INSPIRE が論文に記録した最も早い日付で照合します。指定しない場合、下限はありません。 |
| document_types | array | いいえ | INSPIRE の文書タイプに限定します(最大4件)。複数の値を指定した場合はすべてに一致する必要があり(published + review = published reviews)、いずれか一つではありません。値:article、published、conference paper、thesis、review、note、proceedings、lectures、book chapter、book、introductory、activity report、report。 |
詳細
@cyanheads/cern-inspire-mcp-server
MCP を介して、INSPIRE-HEP の論文、著者、実験、HEPData レコードを検索し、引用指標と BibTeX を取得できます。STDIO または Streamable HTTP に対応しています。
公開ホスト型サーバー: https://cern-inspire.caseyjhand.com/mcp
概要
INSPIRE-HEP の高エネルギー物理学文献と、その基盤となる HEPData の表を扱います。論文、著者、実験を検索し、引用の概要や h 指数を算出して、BibTeX または LaTeX 形式でエクスポートできます。また、論文の数値データを含むレコードも検索できます。
ツール
| ツール | 説明 |
|---|---|
cern_inspire_search_literature | INSPIRE のクエリ構文またはフリーテキストで論文を検索します。文書種別、分野、年で絞り込めます |
cern_inspire_get_paper | recid、arXiv ID、または DOI を指定して論文の完全なレコードを取得し、HEPData の有無も確認できます |
cern_inspire_export_citations | クエリで選択した論文について、INSPIRE の BibTeX または LaTeX \bibitem エントリーをエクスポートします |
cern_inspire_search_authors | 名前、BAI、ORCID、INSPIRE ID、または著者 recid で物理学者のプロフィールを検索します |
cern_inspire_get_citation_summary | 1 人の著者または任意の文献クエリについて、h 指数、引用総数、引用数の区分、年ごとの引用数を取得します |
cern_inspire_search_experiments | 実験、共同研究グループ、施設を検索し、関連論文を選択するクエリも指定できます |
cern_inspire_search_hepdata | 反応過程、観測量、エネルギー、共同研究グループで HEPData の測定レコードを検索します |
cern_inspire_list_reference | クエリ構文、識別子の形式、フィルター値、引用数の区分、HEPData DOI を確認できます |
リソース
| リソース | 説明 |
|---|---|
inspire://literature/{recid} | JSON 形式の cern_inspire_get_paper の詳細情報としての文献レコード |
リソースを表示できないクライアントでは、同じレコードを cern_inspire_get_paper から取得できます。
エージェントスキル
cern-inspire-guide では、識別子の振り分け、クエリ構文、研究ワークフローについて説明しています。プラグインのインストール、npm、Docker、Claude Desktop バンドルに含まれています。MCP クライアントは skills/list から検出するか、resources/list から skill://cern-inspire-guide/SKILL.md を読み取れます。
機能リファレンス
cern_inspire_search_literature ツール
- INSPIRE クエリ構文またはフリーテキストを指定します。
sort(relevance、mostrecent、mostcited)、document_types、subjects(それぞれ最大 4 件、すべての条件に一致する必要があります)、およびyear_from/year_toを指定できます。正の整数size(デフォルトは 10、最大 100)を指定し、pageでページを切り替えます - クエリの最初の 10,000 件の結果のみ取得できます。それを超える
page × effective sizeはbeyond_result_windowエラーになります。年の範囲を逆に指定するとinvalid_year_rangeエラーになります - 各検索結果には、
recid、タイトル、第一著者、日付、引用数、arXiv ID、DOI、出版物、300 文字の概要スニペットが含まれます。ページにはtotalCount、nextPage、appliedFiltersも含まれ、100,000 件を超えるレコードに一致するクエリにはnoticeが示されます
cern_inspire_get_paper ツール
paperには recid、arXiv ID、DOI、inspirehep.net の文献 URL、または HEPData のins<recid>/ hepdata.net のrecord/ins<recid>URL を指定します。一致した形式はresolvedAsで示され、見つからない場合はpaper_not_foundエラーになります。統合済み recid の場合は統合後のレコードが返され、指定した recid はmergedFromで示されます- 寄稿者をページ分割するには、
max_authors(デフォルトは 25、最大 500)とauthor_offset(デフォルトは 0)を指定します。続きの取得にはnextAuthorOffsetを渡します。各項目には、記録されているroles(編集者、指導教員など)が保持されます。役割が記録されていない場合は不明のままです。authorCountには INSPIRE の件数が保持され、取得できる寄稿者リストの件数にフォールバックします documentsには、記録されたファイル名、説明、資料種別、全文のステータスとともに、公開されている添付文書の URL が一覧表示されます。非公開の項目と URL がない項目は省略されます。ファイルはダウンロードされません。外部のurlsは別に保持されます。citingQueryとreferencesQueryはcern_inspire_search_literatureに渡すクエリですhepdata.statusはavailable、none、lookup_failedのいずれかです。利用可能な場合はrecordDoi、latestVersion、tableCount、hepdataUrlが含まれます。追加の HEPData レコードはhepdata.otherRecordsに表示されます
cern_inspire_export_citations ツール
- 文献クエリを指定します(論文を指定する場合は
recid:451647 or arxiv:1207.7214)。検索と同じdocument_types、subjects、year_from、year_to、sortを使用します。年の範囲を逆に指定するとinvalid_year_rangeエラーになります formatはbibtex(デフォルト)、latex-eu、latex-usのいずれかです。正の整数size(デフォルトは 10、最大 50)を指定し、最初の 10,000 件の一致結果の範囲内でpageによるページ分割を行います。それを超えるとbeyond_result_windowエラーになります- 各項目は INSPIRE からそのまま返され、
texkeyが含まれます。さらに結果がある場合はtruncatedとnextPageで示され、appliedFiltersに選択内容が反映されます
cern_inspire_search_authors ツール
- 名前または識別子を 1 つ指定します(BAI、ORCID、INSPIRE ID、著者 recid)。正の整数
limit(デフォルトは 5、最大 25)を指定できます matchedAsは、完全一致の場合はorcid、inspire_id、bai、recidのいずれか、自由形式のテキスト検索で候補をランキング順に返す場合はnameとなります- プロフィールには、
recid、bai、ORCID、役職(所属機関の論文を検索するためにinstitutionRecidをaffid:Nに指定します)、指導教員、arXiv カテゴリ、受賞歴、および本人の論文を選択するliteratureQueryが含まれます
cern_inspire_get_citation_summary tool
author(BAI、ORCID、INSPIRE ID、または著者 recid)またはquery(機関の論文を検索するaffid:902725など、任意の文献クエリ)のいずれか一方のみを指定します。それ以外の場合はmissing_targetとなり、authorに名前を渡すとauthor_not_identifierで失敗しますdocument_types、subjects、year_from、year_to、exclude_self_citationsで絞り込みます- h-index、引用数の合計と平均、
0、1–9、10–49、50–99、100–249、250–499、500+の各区分の論文数を返します。それぞれ、引用可能な論文全体と出版済み論文について集計されます year_from、year_to、exclude_self_citationsのいずれかが設定されている場合、INSPIRE が値を返さない場合、またはクエリに約150,000件を超えるレコードが一致する場合、citationsByYearは通知とともに省略されます
cern_inspire_search_experiments tool
- 実験、コラボレーション、加速器、施設の名前、INSPIRE の旧形式の名前(
CERN-LHC-CMS)、または実験 recid(数字のみ)を指定します。limitは正の整数(デフォルトは5、最大25)です - レコードには、加速器、ホスト機関、コラボレーション、ライフサイクルの日付、
ongoing(INSPIRE のレコードにどちらの状態も記録されていない場合は省略)、INSPIRE の論文数、およびcern_inspire_search_literatureまたはcern_inspire_get_citation_summary用のliteratureQueryが含まれます
cern_inspire_search_hepdata tool
- HEPData の投稿に対する自由テキストまたは INSPIRE 構文(
collaborations.value:LHCb、literature.control_number:<recid>)を指定します。sortはrelevanceまたはmostrecent、sizeは正の整数(デフォルトは10、最大50)で、検索可能な範囲は同じ10,000件までです - レコードには、
paperRecids、コラボレーション、キーワード(反応、観測量、重心系エネルギー)、recordDoi、latestVersion、tableCount、およびhepdataUrl(各レコード固有の hepdata.net ページ)が含まれます。表の値は返されません
cern_inspire_list_reference tool
topic:search_syntax、identifiers、document_types、subjects、citation_buckets、またはhepdata- 静的な
term/meaning/exampleの項目です。上流への呼び出しはありません
inspire://literature/{recid} resource
application/json形式のcern_inspire_get_paper詳細情報です。最初の25人の寄稿者、記録された役割、公開されている添付文書のリンクが含まれます- recid のみを指定します。arXiv ID、DOI、またはそれ以降の寄稿者ページにはツールを使用してください。統合済み recid には存続レコードが使用され、
mergedFromが含まれます
機能
@cyanheads/mcp-ts-core 上に構築されています。stdio および Streamable HTTP トランスポート、差し替え可能な認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレース機能を備えた構造化ロギングに対応しています。
INSPIRE 固有の機能:
- リクエストを 5 秒あたり 12 件に調整し、INSPIRE の上限である 15 件を下回るようにします。429 の発生後にはクールダウンを設けます。時間内に開始できない呼び出しは、
retryAfterを伴うpacer_shedとして失敗します - 各ツール呼び出しの予算は 55 秒です。キューでの待機時間と最大 2 回の再試行を含みます
- リクエストでは、ツールが返すフィールドのみを選択します。著者のメールアドレスはリクエストしません
- 柔軟な入力に対応しています。論文識別子には
arXiv:/doi:プレフィックス、バージョンサフィックス、arxiv.org、doi.org、inspirehep.net の URL を指定できます。著者識別子には orcid.org の URL を指定できます
エージェントに適した出力:
- 上限を超える正の整数の結果件数を指定しても、要求値と有効値を示す通知とともに成功します。文献は 100 件、HEPData と引用エクスポートは 50 件、著者検索と実験検索は 25 件です。デフォルト値は変わりません。ゼロ、負の数、小数の件数を指定すると失敗します。ページングと 10,000 件の結果ウィンドウには有効値が使われます
- 連鎖可能な識別子:検索結果には
recid、著者プロフィールと実験にはそのまま使えるliteratureQuery、cern_inspire_get_paperにはcitingQueryとreferencesQueryが含まれます - クエリのエコーとページング状態:
totalCount、truncated/shown/cap、nextPage、appliedFilters、effectiveQueryを含みます。さらに、結果が空の場合、上限に達した場合、または範囲が疑わしいほど広い場合は、次の手順を示すnoticeが含まれます - 判別可能なフィールド:
hepdata.status、resolvedAs、matchedAs、target.kindにより、呼び出し側はデータに応じた分岐ができます。型付きの失敗理由(paper_not_found、author_not_found、beyond_result_window、inspire_rate_limited)には、それぞれ復旧方法のヒントが含まれます - 捏造しません。INSPIRE に存在しないフィールドは欠落したままになり、「利用できません」または「記録されていません」と表示されます
- タイトルと要旨はテキストとして返します。出版社の HTML、JATS、MathML はプレーンテキストになります(
σ_γ、^{23}Na(n,γ))。LaTeX は公開時のままで、引用エクスポートの項目も一字一句そのままです
データとライセンス
- INSPIRE-HEP のメタデータは、ほとんどが CC0 です。再利用する場合は、INSPIRE の利用規約に従い、INSPIRE をクレジットしてください。
- HEPData のレコードは CC0 です。データを再利用する場合は、HEPData レコードの DOI(
recordDoi)を引用してください。 - これは独立したプロジェクトであり、INSPIRE-HEP、HEPData、CERN との提携や、これらからの推奨を受けていません。
既知の制限事項
- HEPData の表の値は取得できません。 hepdata.net のボットチャレンジがサーバーの User-Agent を拒否するため、サーバーは hepdata.net を呼び出しません。
cern_inspire_get_paperとcern_inspire_search_hepdataは、レコード DOI と、値を確認できる hepdata.net のページを返します。 - 不正な INSPIRE 構文の多くはエラーになりません。 文献検索、引用の要約、引用エクスポートでは、認識可能なフィールド句が空の場合(
a:、a: not、a:""、空白文字だけを含む引用値を含む)にinvalid_queryを返します。各フィールドに値を指定してください(a Witten)。それ以外の場合、解析されない演算子によって一致範囲が広がったり、結果が空になったりします。結果が 0 件、またはtotalCountが非常に大きい場合は、通常、構文の誤りを示しています(cern_inspire_list_referenceのトピックsearch_syntax)。 - 選択結果の検証には追加のリクエストが必要です。 文献検索では、フィルター適用後の選択結果と後続ページを検証します。エクスポートでは、フィルター適用後の最初のページと、すべての後続ページを検証します。これにより、INSPIRE の参照フォールバックがフィルターを迂回したり、取得済みの結果を繰り返したりするのを防ぎます。必須の検証に失敗すると呼び出し全体が失敗します。フィルターなしの最初のページでは、リクエストは 1 回のままです
- 結果ウィンドウは 10,000 件です。 クエリの最初の 10,000 件のみ取得できます。残りの結果を取得するには、クエリを絞り込んでください。
- リクエストキューを共有します。 1 つのサーバープロセスへのすべての呼び出し元は、アドレスごとの INSPIRE の上限である 5 秒あたり 15 件に従う単一のキューを共有します。そのため、リクエストが集中すると、再試行可能なレート制限エラーが発生し、ほかの呼び出しが遅延したり、破棄されたりすることがあります。
はじめに
インストール不要で、ホストされているインスタンスに接続できます。
claude mcp add --transport http cern-inspire-mcp-server https://cern-inspire.caseyjhand.com/mcp
ホストされているインスタンスを呼び出すすべてのクライアントで、5 秒あたり 12 回のリクエスト開始という INSPIRE のリクエスト予算を共有します。継続的に使用する場合は、独自のインスタンスを実行してください。
claude mcp add cern-inspire-mcp-server -- npx -y @cyanheads/cern-inspire-mcp-server
その他のクライアントでは、MCP 設定ファイルに次の内容を追加してください。
{
"mcpServers": {
"cern-inspire-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/cern-inspire-mcp-server"]
}
}
}
API キーは不要です。Docker またはソースからのビルドについては、サーバーの実行を参照してください。
設定
このサーバー独自の設定はありません。INSPIRE にキーは不要で、リクエストの間隔調整はコード内で固定されています。ほとんどのデプロイでは、次のフレームワーク変数で対応できます。
| 変数 | 説明 | デフォルト |
|---|---|---|
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモード:stateless、stateful、または auto。.env.example と Docker イメージでは stateless に設定されています。 | auto |
MCP_AUTH_MODE | 認証:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(debug、info、notice、warning、error など)。Docker イメージでは info に設定されています。 | debug |
LOGS_DIR | ログファイル用のディレクトリ(Node.js のみ)。 | <app-root>/logs |
STORAGE_PROVIDER_TYPE | ストレージバックエンド:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。 | in-memory |
OTEL_ENABLED | OpenTelemetryを有効にします。 | false |
フレームワークのオーバーライドの全一覧は、.env.exampleを参照してください。
サーバーの実行
ローカル開発
Bun v1.4.0 以降(または Node.js v24 以降)が必要です。INSPIRE-HEP の API は公開されており、キーは不要です。
git clone https://github.com/cyanheads/cern-inspire-mcp-server.git
cd cern-inspire-mcp-server && bun install
cp .env.example .env
# Optional: change transport, logging, or session settings in .env
-
本番バージョンをビルドして実行する:
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
チェックとテストを実行する:
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
Docker
docker run --rm -p 3010:3010 ghcr.io/cyanheads/cern-inspire-mcp-server:latest
イメージのデフォルトは HTTP トランスポート、ステートレスセッション、/var/log/cern-inspire-mcp-server へのログ出力です。stdio を使用する MCP クライアントでは、"command": "docker" と "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/cern-inspire-mcp-server:latest"] を指定してください。docker build -t cern-inspire-mcp-server . でローカルにビルドできます。OpenTelemetry のピア依存関係を省略するには、--build-arg OTEL_ENABLED=false を追加してください。
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/index.ts | createApp() のエントリーポイント:ツールとリソースを登録し、サーバーの指示を設定して、INSPIRE サービスを起動・破棄します。 |
src/mcp-server/tools | ツールの定義(*.tool.ts)と共有入力スキーマ(inputs.ts)。 |
src/mcp-server/resources | 文献レコードのリソース。 |
src/services/inspire | INSPIRE サービス:ペーサー、呼び出しごとの予算、リトライ、識別子のルーティング、正規化、統制語彙。 |
src/services/http | 制限付きフェッチ:試行ごとのタイムアウトとレスポンスのバイト数上限。 |
src/utils | ツール出力とエラーメッセージ内の上流テキストをエスケープします(render.ts)。 |
skills/ | サーバーを呼び出すエージェント向けに公開されている cern-inspire-guide。 |
tests/ | INSPIRE レスポンスのフィクスチャを含む Vitest のテストスイート。 |
docs/design.md | ツールの仕様、検証済みの INSPIRE の動作、設計上の決定事項、および延期された HEPData 直接利用ツール。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.mdを参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックに
try/catchは使用しません - すべての INSPIRE リクエストは
InspireServiceを経由し、beginCall(ctx)で呼び出しを開始します。ハンドラーから直接fetchを呼び出すことはありません - 新しいツールとリソースは、
src/mcp-server/tools/definitions/index.tsとsrc/mcp-server/resources/definitions/index.tsのバレルファイルに登録します - 外部 API 呼び出しはラップします:生データを検証 → ドメイン型に正規化 → 出力スキーマに沿って返却。欠落しているフィールドを捏造してはいけません
コントリビューション
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
このプロジェクトは Apache 2.0 License の下でライセンスされています。詳細は LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。