mcpField
S
Semantic Scholar MCP Server

Semantic Scholar MCP Server

ローカル
github.com/smaniches検索232 日前に更新

Semantic Scholar MCP Server について

Semantic Scholar MCP Serverは、Semantic Scholarを使って論文検索、引用追跡、著者情報の取得、推薦を行う学術研究者向けツールです。バルク操作、論文ID検証、整形済み出力も備えています。

主な機能

  1. 01検索・取得用の14ツール
  2. 02引用と参考文献の追跡
  3. 03論文・著者の一括取得
  4. 04文脈付きスニペット検索
  5. 057形式の論文IDに対応
  6. 06MarkdownまたはJSON出力

活用シーン

  1. 01研究テーマに関する論文の検索
  2. 02論文の引用と参考文献の追跡
  3. 03複数の論文や著者情報の一括取得
  4. 04文脈付きの該当箇所の検索

MCP 対応

Semantic Scholarの検索、論文・著者情報の取得、引用追跡、推薦などを14個のツールとしてMCPクライアントに公開します。stdioとStreamable HTTPに対応しています。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"smaniches-semantic-scholar": {
"command": "uvx",
"args": [
"s2-mcp-server"
],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "<SEMANTIC_SCHOLAR_API_KEY>",
"SEMANTIC_SCHOLAR_MIN_SECONDS_BETWEEN_REQUESTS": "<SEMANTIC_SCHOLAR_MIN_SECONDS_BETWEEN_REQUESTS>"
}
}
}
}
起動コマンドuvx s2-mcp-server
設定が必要な環境変数
SEMANTIC_SCHOLAR_API_KEYシークレットSemantic Scholar API key; introductory keys are currently assigned 1 request/second across all endpoints
SEMANTIC_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypis2-mcp-server1.7.12

ツール

14

掲載時のツール一覧 · 1 日前に更新

パラメーター型必須説明
paramsanyはい

詳細

Semantic Scholar MCP サーバー

CI codecov PyPI version PyPI downloads/30d DOI Provenance: SLSA + SBOM Docker GitHub Release License: MIT MCP Python 3.10+ Glama score Awesome MCP Servers

学術研究のワークフロー向け、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.pyFastMCP インスタンス、14 個の @mcp.tool 登録、ライフサイクル、main() エントリーポイント。後方互換性のため、ヘルパー機能も再エクスポートします。
transport.pyStreamable 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.pySemanticScholarError の例外階層:AuthenticationError、RateLimitError、NotFoundError、ValidationError、ServerError。
logging_config.pystderr に 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 つの方法で指定できます。

  1. 環境変数(継続的な使用に推奨):

    export SEMANTIC_SCHOLAR_API_KEY="your-api-key-here"
    
  2. リクエストごとの HTTP ヘッダー(Streamable HTTP トランスポートのみ):各リクエストに x-api-key: your-key を指定してください。詳しくは リモートアクセス(Streamable HTTP)を参照してください。

  3. リクエストごとのパラメーター(環境変数より優先):

    {
      "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
フラグと環境変数
フラグ環境変数デフォルト意味
--transportMCP_TRANSPORTstdiostdio、http(別名:streamable-http)
--hostMCP_HOST127.0.0.1バインドアドレス(Docker イメージでは 0.0.0.0)
--portMCP_PORT、次に PORT8000バインドポート(ホスティングプラットフォームでは PORT が使用されます)
--pathMCP_PATH/mcpMCP エンドポイントの 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_HTTPtrueリクエストごとに独立したサーバー対話を 1 回行います(推奨)
—MCP_JSON_RESPONSEtrueSSE ストリームの代わりにプレーンな JSON レスポンスを返します

CLI フラグは環境変数より優先されます。サーバーはステートレスで、デフォルトで JSON を返します。これは、本番環境の Streamable HTTP デプロイに推奨される構成です。 どのツールもセッション、ストリーミング、サーバー起点のメッセージに依存しないため、 機能上のトレードオフはありません。

リクエストごとの API キー(独自のキーを使用)

HTTP 経由で提供する場合、各リクエストにそれぞれの Semantic Scholar API キーを 含めることができます。同時に利用するユーザー同士でキーが共有されたり、互いのキーが 見えたりすることはありません。優先順位の高い順に、次の方法で指定できます。

  1. x-api-key HTTP ヘッダー(推奨)
  2. SEMANTIC_SCHOLAR_API_KEY クエリパラメーター(Smithery セッション設定)
  3. api_key クエリパラメーター
  4. 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 ID40 文字の 16 進数649def34f8be52c8b66281af98ae884c09aef38b
DOIDOI:xxxDOI:10.1038/s41586-021-03819-2
ArXivARXIV:xxxARXIV:2106.15928 または ARXIV:2106.15928v2
PubMedPMID:xxxPMID:32908142
Corpus IDCorpusId:xxxCorpusId:215416146
ACLACL:xxxACL:P19-1285
URLURL:xxxURL:https://arxiv.org/abs/2106.15928

ツールリファレンス

1. semantic_scholar_search_papers

高度なフィルターを使用して学術論文を検索します。

パラメーター:

パラメーター型必須説明
querystringはい変更せずに送信するプレーンテキストの検索クエリ(このエンドポイントには特別な構文が文書化されていません。ブール演算子やフレーズ構文を使う場合は semantic_scholar_bulk_search を使用してください)
yearstringいいえ年のフィルター:"2024"、"2020-2024"、または "2020-"
fields_of_studystring[]いいえ分野でフィルター:["Computer Science", "Biology"]
publication_typesstring[]いいえ種類でフィルター:["Review", "JournalArticle"]
open_access_onlybooleanいいえオープンアクセス論文のみを返します(デフォルト:false)
min_citation_countintegerいいえ最小引用数
limitintegerいいえ最大結果数:1~100(デフォルト:10)
offsetintegerいいえページネーションのオフセット(デフォルト:0)
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の 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_idstringはいサポートされている形式のいずれかによる論文 ID
include_citationsbooleanいいえ引用している論文を含めます(デフォルト:false)
include_referencesbooleanいいえ参照している論文を含めます(デフォルト:false)
citations_limitintegerいいえ1 ページあたりの引用論文の最大数、1~100(デフォルト:10)
citations_offsetintegerいいえ引用論文のオフセット(デフォルト:0)
references_limitintegerいいえ1 ページあたりの参照論文の最大数、1~100(デフォルト:10)
references_offsetintegerいいえ参照論文のオフセット(デフォルト:0)
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の 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

名前で学術著者を検索します。

パラメーター:

パラメーター型必須説明
querystringはい検索する著者名
limitintegerいいえ結果の最大数、1~100(デフォルト:10)
offsetintegerいいえページネーションのオフセット(デフォルト:0)
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の API キーを上書きします

例:

Find author "Yoshua Bengio"

JSON の例:

{
  "query": "Yoshua Bengio",
  "limit": 5
}

4. semantic_scholar_get_author

著者のプロフィールと出版物を取得します。

パラメーター:

パラメーター型必須説明
author_idstringはいSemantic Scholar の著者 ID
include_papersbooleanいいえ出版物を含めます(デフォルト:true)
papers_limitintegerいいえ返す論文の最大数、1~100(デフォルト:20)
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の 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_idstringはいサポートされている形式のいずれかによるシード論文 ID
from_poolstringいいえおすすめの候補プール:"recent"(デフォルト)または "all-cs"
limitintegerいいえおすすめの最大数、1~100(デフォルト:10)
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の API キーを上書きします

例:

Get recommendations based on paper 649def34f8be52c8b66281af98ae884c09aef38b

JSON の例:

{
  "paper_id": "ARXIV:1706.03762",
  "limit": 15
}

6. semantic_scholar_bulk_papers

1 回のリクエストで複数の論文を取得します(最大 500 件)。

パラメーター:

パラメーター型必須説明
paper_idsstring[]はい論文 ID のリスト(最大 500 件)
response_formatstringいいえ"markdown" または "json"(デフォルト:json)
api_keystringいいえ環境変数の 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 を返します。

パラメーター:

パラメーター型必須説明
querystringはい検索クエリ。+(AND)、|(OR)、-(NOT)、"phrase"、* プレフィックス、( ) によるグループ化に対応
sortstringいいえソート順。例:"citationCount:desc"、"publicationDate:asc"
tokenstringいいえ以前の bulk_search レスポンスから取得した継続トークン
yearstringいいえ年のフィルター:"2024"、"2020-2024"、"2020-"
fields_of_studystring[]いいえ分野によるフィルター:["Computer Science"]
publication_typesstring[]いいえ種類によるフィルター:["Review", "JournalArticle"]
min_citation_countintegerいいえ最小引用数
limitintegerいいえ要求するページサイズ(1~1000、デフォルト:100)。転送されますが、観測された API はこれを無視し、ページごとに最大1000件の論文を返します。ページ全体とその token は変更されずに返されます
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の API キーを上書き

JSON の例:

{
  "query": "graph neural networks",
  "sort": "citationCount:desc",
  "year": "2020-2024",
  "limit": 100
}

戻り値: 結果の総数、論文のページ、および(続きの結果がある場合)次のページ用の token です。


8. semantic_scholar_export_citation

論文の引用情報を BibTeX 形式でエクスポートします。

パラメーター:

パラメーター型必須説明
paper_idstringはいサポートされている任意の形式の論文 ID
formatstringいいえ引用形式(現在は "bibtex" のみ)
api_keystringいいえ環境変数の API キーを上書き

JSON の例:

{
  "paper_id": "DOI:10.1038/s41586-021-03819-2",
  "format": "bibtex"
}

戻り値: 指定した論文の BibTeX 文字列です。


9. semantic_scholar_match_paper

タイトル文字列に最もよく一致する論文を1件検索します。一致した論文とともに数値の matchScore を返します。

パラメーター:

パラメーター型必須説明
querystringはい一致させる論文のタイトル(1~500文字)
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の API キーを上書き

JSON の例:

{
  "query": "Attention Is All You Need"
}

戻り値: 最もよく一致した論文とその matchScore。一致する論文がない場合は「一致する 論文が見つかりません。」を返します。


10. semantic_scholar_paper_authors

論文の著者の詳細なプロフィールを取得します(get_paper が返す簡略化された著者リストよりも詳細です)。

パラメーター:

パラメーター型必須説明
paper_idstringはいサポートされている任意の形式の論文 ID
limitintegerいいえ取得する著者の最大数(1~1000、デフォルト:100)
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の API キーを上書き

JSON の例:

{
  "paper_id": "ARXIV:1706.03762",
  "limit": 25
}

戻り値: 論文の著者に関する詳細なレコードのリストです。


11. semantic_scholar_author_batch

1回のリクエストで複数の著者を取得します(最大1000件)。

パラメーター:

パラメーター型必須説明
author_idsstring[]はい著者 ID のリスト(1~1000件)
response_formatstringいいえ"markdown" または "json"(デフォルト:json)
api_keystringいいえ環境変数の API キーを上書き

JSON の例:

{
  "author_ids": ["1741101", "40348417", "144749327"]
}

戻り値: requested / retrieved の件数、取得した著者レコード、および API から返されなかった ID の not_found リストです。


12. semantic_scholar_multi_recommend

複数の肯定例論文(および任意の否定例論文)を使用して、おすすめを取得します。

パラメーター:

パラメーター型必須説明
positive_paper_idsstring[]はい類似する結果を探す論文(1~100件)
negative_paper_idsstring[]いいえおすすめから遠ざける論文(0~100件)
limitintegerいいえおすすめの最大件数(1~500件、デフォルト:10)
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の 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 キーがない場合は、レート制限が非常に厳しくなります。

パラメーター:

パラメーター型必須説明
querystringはい論文テキストの検索クエリ(1~500 文字)
paper_idsstring[]いいえ特定の論文に検索対象を限定します(最大100件)
yearstringいいえ年のフィルター:"2024"、"2020-2024"、"2020-"
fields_of_studystring[]いいえ分野で絞り込みます:["Computer Science"]
min_citation_countintegerいいえ最小引用数
limitintegerいいえ結果の最大件数(1~100件、デフォルト:10)
response_formatstringいいえ"markdown" または "json"(デフォルト:markdown)
api_keystringいいえ環境変数の 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


貢献

貢献を歓迎します!貢献ガイドラインをお読みください。


サポート


TOPOLOGICA LLC が開発

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。