Semantic Scholar MCP Server について
Semantic Scholar MCP Serverは、Semantic Scholarを使って論文検索、引用追跡、著者情報の取得、推薦を行う学術研究者向けツールです。バルク操作、論文ID検証、整形済み出力も備えています。
主な機能
- 01検索・取得用の14ツール
- 02引用と参考文献の追跡
- 03論文・著者の一括取得
- 04文脈付きスニペット検索
- 057形式の論文IDに対応
- 06MarkdownまたはJSON出力
活用シーン
- 01研究テーマに関する論文の検索
- 02論文の引用と参考文献の追跡
- 03複数の論文や著者情報の一括取得
- 04文脈付きの該当箇所の検索
MCP 対応
Semantic Scholarの検索、論文・著者情報の取得、引用追跡、推薦などを14個のツールとしてMCPクライアントに公開します。stdioとStreamable HTTPに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx s2-mcp-serverSEMANTIC_SCHOLAR_API_KEYシークレットSemantic Scholar API key; introductory keys are currently assigned 1 request/second across all endpointsSEMANTIC_SCHOLAR_MIN_SECONDS_BETWEEN_REQUESTSMinimum seconds between authenticated requests. Default 1.1; lower only when Semantic Scholar has explicitly assigned the key a higher quota.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
14掲載時のツール一覧 · 1 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| params | any | はい |
詳細
Semantic Scholar MCP サーバー
学術研究のワークフロー向け、14 個のツールを備えた Semantic Scholar MCP サーバーです。 Model Context Protocol クライアント(Claude Desktop、Claude Code、Cursor、Cline、Continue など)から、Semantic Scholar の 2 億件以上の論文に直接アクセスできます。論文検索、引用ネットワークのたどり、著者プロフィール、推薦機能を利用できます。
すべてのリリースには、検証可能なサプライチェーンの来歴情報が含まれています。wheel、sdist、コンテナイメージに対する Sigstore 署名付き SLSA ビルド来歴証明、PyPI アップロードに対する PEP 740 証明、そして CycloneDX SBOM が提供されるため、インストールしたアーティファクトがこのリポジトリからビルドされたことを証明できます。来歴情報とサプライチェーンをご覧ください。
作者:Santiago Maniches · ORCID 0009-0005-6480-1987 · TOPOLOGICA LLC
研究の著者について: Santiago Maniches はこのプロジェクトを独立して指揮・保守しており、研究上の貢献に関する唯一の科学的著者です。AI 支援ツールはコーディング、ドキュメント作成、内部レビューを支援していますが、科学的な共著者や独立した検証者には該当しません。Semantic Scholar のコンテンツ、および再利用したソフトウェアと手法は、それぞれの出典を明記しています。
クイックスタート
uvx s2-mcp-server # run instantly, no install
claude mcp add semantic-scholar -- uvx s2-mcp-server # or register it in Claude Code
API キーなしで利用を開始できます。割り当てられた Semantic Scholar の利用枠を使い、認証なしの共有プールを避けるには、SEMANTIC_SCHOLAR_API_KEY を設定してください。現在、Semantic Scholar は導入用 API キーに、すべてのエンドポイントを通じて毎秒 1 リクエストの制限を設けています。Claude Desktop、Docker、pip、およびリモート(Streamable HTTP)のセットアップについては、インストールをご覧ください。
来歴とサプライチェーン
調査ツールの信頼性は、ソースから実行するバイナリまでのチェーンの信頼性に左右されます。このサーバーの各リリースには、暗号学的に検証可能なサプライチェーンの証拠が含まれており、すべてタグ付けされたコミットから CI で生成されます。
| 保証 | 証明される内容 | 生成場所 |
|---|---|---|
| SLSA ビルド来歴(wheel + sdist) | 公開された配布物が手動でアップロードされたものではなく、リリースタグからこのリポジトリの publish.yml によってビルドされたこと | publish.yml — actions/attest-build-provenance(build ジョブ) |
| SLSA ビルド来歴(コンテナイメージ) | ghcr.io イメージのダイジェストが、このリポジトリの docker.yml によってビルドされたこと | docker.yml — actions/attest-build-provenance、push-to-registry(141–147 行目) |
| PEP 740 アテステーション | PyPI へのアップロード自体に、Trusted Publishing のもとで Sigstore によるアテステーションが付与されていること | publish.yml — attestations: true(publish-pypi ジョブ) |
| CycloneDX SBOM | 正確な wheel の静的に解決された依存関係メタデータ(wheel のみを対象とし、実行は一切しません)から、権限のないジョブで生成され、その wheel に SHA-256 で紐付けられたうえで、wheel のみに対してアテステーションされた機械可読な部品表であること | publish.yml — cyclonedx-py + scripts/release_sbom.py(sbom ジョブ)+ actions/attest-sbom(attest-sbom ジョブ) |
| SHA 固定された Actions | すべての CI アクションがコミット SHA に固定されているため、リリースパイプライン自体が気付かないうちに変更されないこと | .github/workflows/ 内のすべてのジョブ(例:publish.yml、docker.yml) |
wheel とコンテナイメージがアテステーションに適合することを、GitHub CLI で検証できます。
# Wheel / sdist (download from the PyPI project or the release assets first)
gh attestation verify s2_mcp_server-*.whl --repo smaniches/semantic-scholar-mcp
# Container image
gh attestation verify oci://ghcr.io/smaniches/semantic-scholar-mcp:latest \
--repo smaniches/semantic-scholar-mcp
既知の制限事項の一覧を含むサプライチェーン対策の全容は、SECURITY.md に記載されています。これはリリース時の来歴(アーティファクトのビルド方法を証明するもの)であり、サーバーは現在、個々の API 結果にレスポンスごとの証明書を添付しません。
比較
公開されている Semantic Scholar MCP 標準は存在しないため、最も有用な比較対象は、エージェントからSemantic Scholar REST APIを直接呼び出すという明白な代替手段です。右側の列にある内容はすべて、このサーバーがすでに担っている処理であり、利用者が自前で再実装する必要があるものです。
| このサーバー | エージェントから直接呼び出す S2 REST API | |
|---|---|---|
| ツールの種類 | 型付けされた 14 個の MCP ツール(検索、取得、おすすめ、ステータス) | 利用者が生の HTTP リクエストを組み立てる |
| 引用グラフ | get_paper で両方向(引用と参考文献)に対応 | 2 つのエンドポイントを手動でページネーション |
| 一括操作 | 1 回の呼び出しで論文(≤500)と著者(≤1000)を処理 | 利用者がバッチ処理とページネーションを実装 |
| 全文スニペット検索 | 周辺のコンテキストを含む snippet_search | 別のエンドポイントを利用者が組み立てる |
| 論文 ID の解決 | 7 種類の形式 — Semantic Scholar ID、DOI、ArXiv、PubMed、Corpus ID、ACL、URL — を事前検証(validators.py) | 利用者が ID を正規化して検証 |
| レート制限 | S2 に準拠する保守的な認証済みデフォルト値と、割り当てられたクォータを設定できるクライアント側リミッター(client.py) | 利用者が手動でスロットリング |
| 再試行/バックオフ | 429/502/503/タイムアウト時に、上限付きのジッター付き再試行を行い、Retry-After を尊重(client.py) | 利用者が再試行を実装 |
| エラー | 利用者が分岐処理できる、型付きの例外階層(errors.py) | HTTP ステータス文字列を解析 |
| 出力 | 呼び出しごとにチャット向けの Markdown または JSON(formatters.py) | 生の JSON |
| サプライチェーンの来歴 | リリースごとに SLSA + PEP 740 + CycloneDX SBOM(上記を参照) | 該当なし |
| 引用可能性 | 発行済みの Zenodo DOI、MIT ライセンス | 該当なし |
インストール
オプション 1:ワンラインインストール(推奨)
# No cloning needed — runs directly from PyPI
uvx s2-mcp-server
オプション 2:Claude Code
claude mcp add semantic-scholar -- uvx s2-mcp-server
オプション 3:Claude Desktop(Windows)
%APPDATA%\Claude\claude_desktop_config.json に追加します:
{
"mcpServers": {
"semantic-scholar": {
"command": "uvx",
"args": ["s2-mcp-server"],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "your-key-here"
}
}
}
}
オプション 4:Claude Desktop(macOS)
~/Library/Application Support/Claude/claude_desktop_config.json に追加します:
{
"mcpServers": {
"semantic-scholar": {
"command": "uvx",
"args": ["s2-mcp-server"],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "your-key-here"
}
}
}
}
オプション 5:pip / ソースから
pip install s2-mcp-server
# or
git clone https://github.com/smaniches/semantic-scholar-mcp.git
cd semantic-scholar-mcp && pip install -e .
オプション 6:Docker
docker pull ghcr.io/smaniches/semantic-scholar-mcp:latest
docker run -e SEMANTIC_SCHOLAR_API_KEY=your-key ghcr.io/smaniches/semantic-scholar-mcp
オプション 7:リモートサーバー(Streamable HTTP)— ≥ 1.5.0 が必要です
# Serve MCP over HTTP at http://127.0.0.1:8000/mcp instead of stdio
# (--from pins the floor: uvx may otherwise reuse a cached older version)
uvx --from "s2-mcp-server>=1.5.0" s2-mcp-server --transport http
クライアントの設定、リクエストごとの API キー、デプロイ方法については、リモートアクセス(Streamable HTTP) を参照してください。
注: ほとんどの公開 Semantic Scholar エンドポイントでは、API キーは任意です。このサーバーでは、キーなしのリクエストを保守的に約 1 秒に 1 回に制限していますが、匿名ユーザーは上流のプールを共有します。このサーバーがローカルの間隔を守っていても、Semantic Scholar が HTTP 429 を返す場合があります。安定して継続的な調査ワークフローを実現するには、割り当てられた API キーを設定してください。既知の制限事項 を参照してください。
アーキテクチャ
flowchart LR
Client["MCP client<br/>(Claude Desktop, Claude Code,<br/>Cursor, Cline, Continue, …)"]
subgraph Server ["s2-mcp-server (this package)"]
direction TB
FastMCP["FastMCP runtime<br/>(stdio / Streamable HTTP, lifespan)"]
Tools["14 @mcp.tool functions<br/>(server.py)"]
Models["Pydantic input models<br/>+ field sets (models.py)"]
Validators["Paper-ID validator<br/>(validators.py)"]
Cache["TTL cache<br/>(cache.py)"]
Fmt["Markdown formatters<br/>(formatters.py)"]
HTTP["httpx client<br/>+ rate limit + retry/backoff<br/>(client.py)"]
Errors["Typed exceptions<br/>(errors.py)"]
Log["Structured JSON logger<br/>(logging_config.py)"]
end
S2Graph["Semantic Scholar<br/>Graph API"]
S2Recs["Semantic Scholar<br/>Recommendations API"]
Client <-- "stdio or Streamable HTTP<br/>(JSON-RPC)" --> FastMCP
FastMCP --> Tools
Tools --> Models
Tools --> Validators
Tools --> Cache
Tools --> HTTP
Tools --> Fmt
HTTP --> Errors
HTTP --> Log
HTTP -- "GET / POST<br/>x-api-key" --> S2Graph
HTTP -- "GET / POST<br/>x-api-key" --> S2Recs
モジュールの役割(src/semantic_scholar_mcp/):
| モジュール | 役割 |
|---|---|
server.py | FastMCP インスタンス、14 個の @mcp.tool 登録、ライフサイクル、main() エントリーポイント。後方互換性のため、ヘルパー機能も再エクスポートします。 |
transport.py | Streamable HTTP トランスポート:CLI/環境変数の解析(--transport http)、uvicorn の接続設定、リクエストごとの API キーの抽出(ヘッダー/クエリパラメーター/Smithery 設定)を行い、リクエストスコープの contextvar に格納します。 |
client.py | 共有 httpx.AsyncClient シングルトン、クライアント側のレートリミッター(公開用は 1.0 秒、認証済みのデフォルトは 1.1 秒。割り当てられたクォータに合わせて設定可能)、429/502/503/タイムアウト時の指数バックオフ+ジッターによる再試行ループ、HTTP から型付き例外へのマッピング。 |
models.py | ツールごとの Pydantic 入力モデル、ResponseFormat 列挙型、階層化された論文フィールドセット定数(PAPER_SEARCH_FIELDS、…_LITE、PAPER_BULK_SEARCH_FIELDS、PAPER_DETAIL_FIELDS)、および AUTHOR_FIELDS。 |
validators.py | 事前の論文 ID 検証。NUL バイト、?、#、パストラバーサルを拒否し、正規の 7 種類の ID 形式を受け入れます。 |
cache.py | セッション内での論文/著者の検索に使用するインメモリ TTL キャッシュ(5 分、200 件、古い順に削除)。 |
formatters.py | チャット画面での読みやすさを考慮した、論文および著者の辞書向け Markdown レンダラー。 |
errors.py | SemanticScholarError の例外階層:AuthenticationError、RateLimitError、NotFoundError、ValidationError、ServerError。 |
logging_config.py | stderr に 1 行 1 JSON 形式で出力する StructuredFormatter。あらゆるログアグリゲーターで安全に利用できます。 |
知っておくとよい設計上の選択
- プロセスごとに
httpx.AsyncClientを 1 つだけ使用します。 遅延生成し、FastMCP のライフサイクル終了時に閉じます。接続設定を使い回し、キープアライブの上限を守ります。ライフサイクルは参照カウント方式です。Streamable HTTP トランスポートでは SDK がリクエストごとにライフサイクルへ入るため、最後の利用者が終了したときにのみ終了処理が実行されます。 - レート制限は API ではなくクライアントで適用されます。 セマフォと最後のリクエスト時刻を組み合わせ、MCP ホストがツール呼び出しを並列実行しても、ティアごとの間隔を超えないようにします。
- 再試行は上限付きで、ジッターを加えます。
MAX_RETRIES = 3まで再試行し、基本待機時間は 1 秒、上限は 30 秒です。Retry-Afterがある場合はその値を尊重します。 - エラーには型が付いています。 ステータスコードを小規模な例外階層にマッピングするため、呼び出し側は文字列を解析するのではなく、
AuthenticationError、RateLimitError、NotFoundErrorなどで処理を分岐できます。 - 入力検証は事前に行います。 論文 ID は外部へのリクエストを送る前に検証されるため、不正な ID がネットワークに送信されることはありません。
- バージョン情報の管理元は 1 つです。
__version__はimportlib.metadata.version("s2-mcp-server")から取得されるため、pyproject.tomlの更新だけで十分です。release-please は各リリースでマニフェスト、server.json(2 つのパス)、CITATION.cff、.zenodo.jsonのバージョンを一括更新します。
設定
API キーのオプション
API キーは、次の 3 つの方法で指定できます。
-
環境変数(継続的な使用に推奨):
export SEMANTIC_SCHOLAR_API_KEY="your-api-key-here" -
リクエストごとの HTTP ヘッダー(Streamable HTTP トランスポートのみ):各リクエストに
x-api-key: your-keyを指定してください。詳しくは リモートアクセス(Streamable HTTP)を参照してください。 -
リクエストごとのパラメーター(環境変数より優先):
{ "api_key": "your-api-key-here" }非推奨: リクエストごとの
api_keyは非推奨であり、v2.0.0 で削除される予定です。 ツール呼び出しの引数は、MCP のトランスクリプト、クライアントの ログ、LLM のツール呼び出し履歴に表示される場合があります。代わりにSEMANTIC_SCHOLAR_API_KEY環境変数を使用してください。詳しくは SECURITY.mdを参照してください。
無料の API キーは https://www.semanticscholar.org/product/api で取得できます。
Claude Desktop のセットアップ
Claude Desktop の設定ファイルに追加してください。
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"semantic-scholar": {
"command": "python",
"args": ["-m", "semantic_scholar_mcp"],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "your-api-key-here"
}
}
}
}
その後、Claude Desktop を再起動してください。
リモートアクセス(Streamable HTTP)
stdio が引き続きデフォルトのトランスポートです。--transport http を指定すると、同じ 14 個の
ツールを MCP Streamable HTTP トランスポートで提供します。
claude.ai のカスタムコネクター、Smithery の掲載情報、
mcp-remote ブリッジなどのリモートクライアントは、このトランスポートに接続します。
s2-mcp-server≥ 1.5.0 が必要です。 それ以前のリリース(≤ 1.4.0)は CLI フラグを解析しません。--transport httpを黙って無視して stdio サーバーを起動するため、ポートは開きません。
# Local HTTP endpoint at http://127.0.0.1:8000/mcp
# (--from pins the floor: uvx may otherwise reuse a cached older version)
uvx --from "s2-mcp-server>=1.5.0" s2-mcp-server --transport http
# Bind a public interface and custom port (only behind a TLS proxy — see Security).
# The DNS-rebinding guard only admits localhost Host headers by default, so
# also allow the public hostname clients will use (":*" matches any port).
uvx --from "s2-mcp-server>=1.7.1" s2-mcp-server --transport http --host 0.0.0.0 --port 8080 \
--allowed-host "mcp.example.org:*"
# Docker
docker run -p 8000:8000 ghcr.io/smaniches/semantic-scholar-mcp --transport http
フラグと環境変数
| フラグ | 環境変数 | デフォルト | 意味 |
|---|---|---|---|
--transport | MCP_TRANSPORT | stdio | stdio、http(別名:streamable-http) |
--host | MCP_HOST | 127.0.0.1 | バインドアドレス(Docker イメージでは 0.0.0.0) |
--port | MCP_PORT、次に PORT | 8000 | バインドポート(ホスティングプラットフォームでは PORT が使用されます) |
--path | MCP_PATH | /mcp | MCP エンドポイントの URL パス |
--allowed-host(繰り返し指定可) | MCP_ALLOWED_HOSTS(カンマ区切り) | localhost のみ | DNS リバインディングガードが許可する追加の Host ヘッダー値。例:mcp.example.org:*(≥ 1.7.1) |
--allowed-origin(繰り返し指定可) | MCP_ALLOWED_ORIGINS(カンマ区切り) | localhost のみ | DNS リバインディングガードが許可する追加の Origin ヘッダー値。例:https://mcp.example.org(≥ 1.7.1) |
--version | — | — | パッケージのバージョンを表示して終了します |
| — | MCP_STATELESS_HTTP | true | リクエストごとに独立したサーバー対話を 1 回行います(推奨) |
| — | MCP_JSON_RESPONSE | true | SSE ストリームの代わりにプレーンな JSON レスポンスを返します |
CLI フラグは環境変数より優先されます。サーバーはステートレスで、デフォルトで JSON を返します。これは、本番環境の Streamable HTTP デプロイに推奨される構成です。 どのツールもセッション、ストリーミング、サーバー起点のメッセージに依存しないため、 機能上のトレードオフはありません。
リクエストごとの API キー(独自のキーを使用)
HTTP 経由で提供する場合、各リクエストにそれぞれの Semantic Scholar API キーを 含めることができます。同時に利用するユーザー同士でキーが共有されたり、互いのキーが 見えたりすることはありません。優先順位の高い順に、次の方法で指定できます。
x-api-keyHTTP ヘッダー(推奨)SEMANTIC_SCHOLAR_API_KEYクエリパラメーター(Smithery セッション設定)api_keyクエリパラメーター- Base64 エンコードされた旧式の
?config=パラメーター(以前の Smithery デプロイ)
キーを含まないリクエストでは、サーバーの SEMANTIC_SCHOLAR_API_KEY
環境変数にフォールバックします。環境変数が設定されていない場合は、キーなしの
パブリックティアアクセスを使用します。
クライアント設定
Claude Code
claude mcp add --transport http semantic-scholar http://127.0.0.1:8000/mcp \
--header "x-api-key: your-key-here"
JSON 設定(urlを受け付けるクライアント)
{
"mcpServers": {
"semantic-scholar": {
"type": "http",
"url": "http://127.0.0.1:8000/mcp",
"headers": { "x-api-key": "your-key-here" }
}
}
}
claude.ai のカスタムコネクターには公開 HTTPS URL が必要で、認証なしのサーバーまたは OAuth を利用できます。claude.ai では、コネクター URL に API キーを含める方法はサポートされていません。サーバー側で指定したキー(SEMANTIC_SCHOLAR_API_KEY 環境変数)を使ってサーバーをホストし、公開 /mcp URL をコネクターとして登録してください。
Smitheryでは、URL を指定してリモートサーバーを登録します(smithery mcp publish <url>)。上記のリクエストごとのキー抽出は、Smithery のセッション設定とそのまま連携できます。
セキュリティに関する注意
- HTTP トランスポートでは、受信した呼び出し元の認証は行われません。デフォルトのバインド先はループバック(
127.0.0.1)です。公開する場合は、TLS を終端するリバースプロキシの背後に配置し、クエリパラメーターよりもx-api-keyヘッダーを優先してください(URL はアクセスログに記録される可能性があります)。 - API キーはリクエストごとに使用され、サーバー自体がキーをログに記録することはありません。(上記のとおり、URL のクエリパラメーターに指定したキーはアクセスログに記録される可能性があります。
x-api-keyヘッダーを優先してください。) - プロジェクト全体の脅威モデルについては、SECURITY.md を参照してください。
対応する ID 形式
サーバーは以下の論文識別子形式を受け付けます。
| 形式 | パターン | 例 |
|---|---|---|
| Semantic Scholar ID | 40 文字の 16 進数 | 649def34f8be52c8b66281af98ae884c09aef38b |
| DOI | DOI:xxx | DOI:10.1038/s41586-021-03819-2 |
| ArXiv | ARXIV:xxx | ARXIV:2106.15928 または ARXIV:2106.15928v2 |
| PubMed | PMID:xxx | PMID:32908142 |
| Corpus ID | CorpusId:xxx | CorpusId:215416146 |
| ACL | ACL:xxx | ACL:P19-1285 |
| URL | URL:xxx | URL:https://arxiv.org/abs/2106.15928 |
ツールリファレンス
1. semantic_scholar_search_papers
高度なフィルターを使用して学術論文を検索します。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
query | string | はい | 変更せずに送信するプレーンテキストの検索クエリ(このエンドポイントには特別な構文が文書化されていません。ブール演算子やフレーズ構文を使う場合は semantic_scholar_bulk_search を使用してください) |
year | string | いいえ | 年のフィルター:"2024"、"2020-2024"、または "2020-" |
fields_of_study | string[] | いいえ | 分野でフィルター:["Computer Science", "Biology"] |
publication_types | string[] | いいえ | 種類でフィルター:["Review", "JournalArticle"] |
open_access_only | boolean | いいえ | オープンアクセス論文のみを返します(デフォルト:false) |
min_citation_count | integer | いいえ | 最小引用数 |
limit | integer | いいえ | 最大結果数:1~100(デフォルト:10) |
offset | integer | いいえ | ページネーションのオフセット(デフォルト:0) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書き |
例:
Search for "transformer attention mechanism" papers from 2023 with at least 100 citations
JSON の例:
{
"query": "transformer attention mechanism",
"year": "2023",
"min_citation_count": 100,
"fields_of_study": ["Computer Science"],
"limit": 20
}
2. semantic_scholar_get_paper
特定の論文の詳細情報を取得します。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
paper_id | string | はい | サポートされている形式のいずれかによる論文 ID |
include_citations | boolean | いいえ | 引用している論文を含めます(デフォルト:false) |
include_references | boolean | いいえ | 参照している論文を含めます(デフォルト:false) |
citations_limit | integer | いいえ | 1 ページあたりの引用論文の最大数、1~100(デフォルト:10) |
citations_offset | integer | いいえ | 引用論文のオフセット(デフォルト:0) |
references_limit | integer | いいえ | 1 ページあたりの参照論文の最大数、1~100(デフォルト:10) |
references_offset | integer | いいえ | 参照論文のオフセット(デフォルト:0) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書きします |
例:
Get details for DOI:10.1038/s41586-021-03819-2 including its top 20 citations
JSON の例:
{
"paper_id": "DOI:10.1038/s41586-021-03819-2",
"include_citations": true,
"citations_limit": 20,
"citations_offset": 0,
"response_format": "json"
}
引用と参照のページは独立しています。JSON モードでは、要求した方向について既存の citations/references 配列に加えて、offset と next を含む citations_page/references_page メタデータが返されます。
next が null でない場合は、同じ論文 ID と上限値を指定した次の呼び出しで、その方向の *_offset として使用してください。next が null の場合、Semantic Scholar から継続情報が提示されていないことを意味します。Markdown モードでは、継続情報が利用可能な場合にヒントが表示されます。最初のページを引用グラフ全体として扱わないでください。
3. semantic_scholar_search_authors
名前で学術著者を検索します。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
query | string | はい | 検索する著者名 |
limit | integer | いいえ | 結果の最大数、1~100(デフォルト:10) |
offset | integer | いいえ | ページネーションのオフセット(デフォルト:0) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書きします |
例:
Find author "Yoshua Bengio"
JSON の例:
{
"query": "Yoshua Bengio",
"limit": 5
}
4. semantic_scholar_get_author
著者のプロフィールと出版物を取得します。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
author_id | string | はい | Semantic Scholar の著者 ID |
include_papers | boolean | いいえ | 出版物を含めます(デフォルト:true) |
papers_limit | integer | いいえ | 返す論文の最大数、1~100(デフォルト:20) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書きします |
例:
Get author profile for author ID 1741101 with their top 50 publications
JSON の例:
{
"author_id": "1741101",
"include_papers": true,
"papers_limit": 50
}
5. semantic_scholar_recommendations
シード論文に基づいて、AI を活用した論文のおすすめを取得します。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
paper_id | string | はい | サポートされている形式のいずれかによるシード論文 ID |
from_pool | string | いいえ | おすすめの候補プール:"recent"(デフォルト)または "all-cs" |
limit | integer | いいえ | おすすめの最大数、1~100(デフォルト:10) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書きします |
例:
Get recommendations based on paper 649def34f8be52c8b66281af98ae884c09aef38b
JSON の例:
{
"paper_id": "ARXIV:1706.03762",
"limit": 15
}
6. semantic_scholar_bulk_papers
1 回のリクエストで複数の論文を取得します(最大 500 件)。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
paper_ids | string[] | はい | 論文 ID のリスト(最大 500 件) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:json) |
api_key | string | いいえ | 環境変数の API キーを上書きします |
例:
Retrieve these papers: DOI:10.1038/nature12373, ARXIV:2106.15928, PMID:32908142
JSON の例:
{
"paper_ids": [
"DOI:10.1038/nature12373",
"ARXIV:2106.15928",
"PMID:32908142"
]
}
7. semantic_scholar_bulk_search
大量の検索結果に対応する、ソートとカーソルベースのページネーション機能を備えた論文検索です。
search_papers とは異なり、sort 順を指定でき、すべての結果をページごとに取得するための
token を返します。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
query | string | はい | 検索クエリ。+(AND)、|(OR)、-(NOT)、"phrase"、* プレフィックス、( ) によるグループ化に対応 |
sort | string | いいえ | ソート順。例:"citationCount:desc"、"publicationDate:asc" |
token | string | いいえ | 以前の bulk_search レスポンスから取得した継続トークン |
year | string | いいえ | 年のフィルター:"2024"、"2020-2024"、"2020-" |
fields_of_study | string[] | いいえ | 分野によるフィルター:["Computer Science"] |
publication_types | string[] | いいえ | 種類によるフィルター:["Review", "JournalArticle"] |
min_citation_count | integer | いいえ | 最小引用数 |
limit | integer | いいえ | 要求するページサイズ(1~1000、デフォルト:100)。転送されますが、観測された API はこれを無視し、ページごとに最大1000件の論文を返します。ページ全体とその token は変更されずに返されます |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書き |
JSON の例:
{
"query": "graph neural networks",
"sort": "citationCount:desc",
"year": "2020-2024",
"limit": 100
}
戻り値: 結果の総数、論文のページ、および(続きの結果がある場合)次のページ用の
token です。
8. semantic_scholar_export_citation
論文の引用情報を BibTeX 形式でエクスポートします。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
paper_id | string | はい | サポートされている任意の形式の論文 ID |
format | string | いいえ | 引用形式(現在は "bibtex" のみ) |
api_key | string | いいえ | 環境変数の API キーを上書き |
JSON の例:
{
"paper_id": "DOI:10.1038/s41586-021-03819-2",
"format": "bibtex"
}
戻り値: 指定した論文の BibTeX 文字列です。
9. semantic_scholar_match_paper
タイトル文字列に最もよく一致する論文を1件検索します。一致した論文とともに数値の
matchScore を返します。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
query | string | はい | 一致させる論文のタイトル(1~500文字) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書き |
JSON の例:
{
"query": "Attention Is All You Need"
}
戻り値: 最もよく一致した論文とその matchScore。一致する論文がない場合は「一致する
論文が見つかりません。」を返します。
10. semantic_scholar_paper_authors
論文の著者の詳細なプロフィールを取得します(get_paper が返す簡略化された著者リストよりも詳細です)。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
paper_id | string | はい | サポートされている任意の形式の論文 ID |
limit | integer | いいえ | 取得する著者の最大数(1~1000、デフォルト:100) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書き |
JSON の例:
{
"paper_id": "ARXIV:1706.03762",
"limit": 25
}
戻り値: 論文の著者に関する詳細なレコードのリストです。
11. semantic_scholar_author_batch
1回のリクエストで複数の著者を取得します(最大1000件)。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
author_ids | string[] | はい | 著者 ID のリスト(1~1000件) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:json) |
api_key | string | いいえ | 環境変数の API キーを上書き |
JSON の例:
{
"author_ids": ["1741101", "40348417", "144749327"]
}
戻り値: requested / retrieved の件数、取得した著者レコード、および API から返されなかった ID の not_found リストです。
12. semantic_scholar_multi_recommend
複数の肯定例論文(および任意の否定例論文)を使用して、おすすめを取得します。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
positive_paper_ids | string[] | はい | 類似する結果を探す論文(1~100件) |
negative_paper_ids | string[] | いいえ | おすすめから遠ざける論文(0~100件) |
limit | integer | いいえ | おすすめの最大件数(1~500件、デフォルト:10) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書きします |
JSON の例:
{
"positive_paper_ids": ["ARXIV:1706.03762", "ARXIV:1810.04805"],
"negative_paper_ids": ["DOI:10.1038/nature14539"],
"limit": 20
}
戻り値: おすすめの論文と、使用した肯定・否定のシードのエコーです。
13. semantic_scholar_snippet_search
論文の全文から検索し、前後の文脈を含むテキストスニペットを返します。API キーがない場合は、レート制限が非常に厳しくなります。
パラメーター:
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
query | string | はい | 論文テキストの検索クエリ(1~500 文字) |
paper_ids | string[] | いいえ | 特定の論文に検索対象を限定します(最大100件) |
year | string | いいえ | 年のフィルター:"2024"、"2020-2024"、"2020-" |
fields_of_study | string[] | いいえ | 分野で絞り込みます:["Computer Science"] |
min_citation_count | integer | いいえ | 最小引用数 |
limit | integer | いいえ | 結果の最大件数(1~100件、デフォルト:10) |
response_format | string | いいえ | "markdown" または "json"(デフォルト:markdown) |
api_key | string | いいえ | 環境変数の API キーを上書きします |
JSON の例:
{
"query": "scaling laws for language models",
"year": "2022-2024",
"limit": 20
}
戻り値: 一致するスニペットです。それぞれに、出典となる論文のタイトル、セクション、短い抜粋が含まれます。
14. semantic_scholar_status
サーバーの稼働状態と API 接続の状態を確認します。
パラメーター: なし
例:
Check Semantic Scholar API status
応答:
{
"server": "semantic-scholar-mcp",
"version": "<current package version>",
"api_key_configured": true,
"rate_tier": "authenticated",
"configuration_valid": true,
"min_seconds_between_requests": 1.1,
"effective_client_max_requests_per_second": 0.909091,
"timestamp": "2026-04-06T12:00:00.000000+00:00",
"api_reachable": true,
"rate_limited": false,
"retry_after": null
}
レート制限
Semantic Scholar の現在の API ガイダンスによると、導入用 API キーではすべてのエンドポイントを合わせて毎秒1リクエストが許可されます。審査後に、より高いレートが許可されるキーもあります。認証されていないリクエストは共有の上流キャパシティを使用するため、利用が集中するとスロットリングされる場合があります。
そのため、サーバーではクライアント側のデフォルト値として、次の保守的な値を使用します。
| アクセス | クライアントの最小間隔 | クライアントの実効最大レート |
|---|---|---|
| API キーなし | 1.0 秒 | 1 リクエスト/秒 |
| API キーあり | 1.1 秒 | 約0.91 リクエスト/秒 |
Semantic Scholar がキーに別のクォータを明示的に割り当てている場合は、SEMANTIC_SCHOLAR_MIN_SECONDS_BETWEEN_REQUESTS をその上限を下回る間隔に設定してください。たとえば、審査により 10 RPS のクォータが許可されている場合、すべての API キーでそのレートが使用できると想定せず、0.1 秒よりわずかに長い間隔を設定してください。この設定はプロセス全体に適用されるため、ユーザー提供の複数のキーを受け付けるリモート環境では、受け付けるクォータのうち最も低いものに合わせて設定してください。
サーバーは、次の方法でレート制限を自動的に処理します。
- 最小間隔を守るためのリクエストの直列化
- 429(レート制限)、502(不正なゲートウェイ)、503(サービス利用不可)エラーに対する指数バックオフによる再試行
- ジッターを伴う最大3回の再試行
開発
# Clone
git clone https://github.com/smaniches/semantic-scholar-mcp.git
cd semantic-scholar-mcp
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run tests with coverage
pytest --cov=src/semantic_scholar_mcp --cov-report=term-missing
# Type checking
mypy src/
セキュリティ
サーバーが API キーをディスクに保存することはありません。サーバーが認証済みリクエストを送信する際、キーは HTTPS 経由で api.semanticscholar.org に対してのみ、x-api-key ヘッダーとして送信されます。第三者にテレメトリーが送信されることはありません。デフォルトの stdio トランスポートでは、サーバーはお使いのマシン上でローカルに実行されます。Streamable HTTP を使用してリモートホスト型のインスタンスに接続する場合、リクエストごとのキーは Semantic Scholar に転送される前に、そのエンドポイントの運用者にも渡ります。信頼できるリモートエンドポイントにのみ、HTTPS 経由でキーを送信してください。
リクエストごとの api_key ツールパラメーターより、SEMANTIC_SCHOLAR_API_KEY 環境変数を優先してください。リクエストごとのパラメーターは、ツール呼び出しの引数が MCP のトランスクリプトやクライアントのログに表示される可能性があるため、非推奨です(v2.0.0 で削除予定)。脆弱性の報告方法と既知の制限事項については、SECURITY.md をご覧ください。
同じ作者による関連 MCP サーバー
alphafold-sovereign-mcp— AlphaFold DB およびその他の公開バイオ医療データソース向けの Model Context Protocol サーバー。ローカルの SQLite ナレッジグラフを備えています(pip install alphafold-sovereign-mcp)。uniprot-mcp— UniProt Swiss-Prot および TrEMBL 向けの Model Context Protocol サーバー(pip install uniprot-mcp-server)。
ライセンス
MIT License — LICENSE ファイルをご覧ください。
作者
Santiago Maniches
- 創業者兼 CEO、TOPOLOGICA LLC
- ORCID: 0009-0005-6480-1987
- LinkedIn: santiago-maniches
- ウェブサイト: topologica.ai
貢献
貢献を歓迎します!貢献ガイドラインをお読みください。
サポート
- 課題: GitHub Issues
- お問い合わせ: [email protected]
TOPOLOGICA LLC が開発
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。