Scopus MCP Server
Scopus MCP Server
Elsevier Scopus API をラップする MCP サーバーで、MCP クライアント(Claude Desktop、Claude Code、その他の MCP ホスト)が査読済みの学術記事を検索・取得できるようにします。実際の査読済みソースに基づいた引用検証や文体分析に役立ちます。
Tools
Tool | Input | What it returns |
|
| 最大 |
|
| 1件の記事の完全なメタデータ:上記のすべてに加え、著者キーワード、主題分野、オープンアクセスフラグ、集約タイプ |
|
| 1件の記事の抄録テキストのみ。Scopus に抄録がない場合は |
すべてのレスポンスは構造化された JSON です(下記の レスポンス形式 を参照)。各ツールは、Scopus API が到達不能、レート制限、または不正な ID が指定された場合に例外を投げる代わりに、親しみやすい構造化エラーを返します(エラーハンドリング を参照)。
内部では、サーバーは2つの Elsevier API を呼び出します:
Scopus Search API(
GET /content/search/scopus)—search_scopusで使用。Abstract Retrieval API(
GET /content/abstract/scopus_id/{id})—get_article_detailsとget_article_abstractで使用。Search API は完全な抄録、被引用数、キーワードを確実に返さないためです。
Related MCP server: MCP-scopus
Project layout
mcp-server/
├── src/
│ ├── index.ts # stdio entry point (for local MCP clients)
│ ├── httpServer.ts # Streamable HTTP entry point (for remote deployment)
│ ├── registerTools.ts # tool definitions, shared by both entry points
│ ├── scopusClient.ts # Elsevier API client: requests, normalization, error mapping
│ ├── types.ts # TypeScript types for raw Scopus responses + normalized output
│ └── logger.ts # structured logger → stderr + logs/scopus-mcp.log
├── test/
│ └── test-connection.ts # standalone connectivity test (bypasses the MCP protocol)
├── logs/ # log file written here at runtime (gitignored)
├── .env.example
├── package.json
└── tsconfig.jsonPrerequisites
Node.js 18 以降(組み込みのグローバル
fetchを使用)。node -vで確認してください。Scopus API キー。 Elsevier Developer Portal で無料キーを登録してください。Elsevier はフルテキスト/抄録へのアクセスを IP 範囲(機関購読)または Institutional Token で制限していることに注意してください。キーだけでも接続テストと基本的な検索には十分ですが、一部のフィールドは権限によって制限される場合があります。
Setup
cd mcp-server
npm install
cp .env.example .env.env を編集してキーを設定してください:
SCOPUS_API_KEY=your_real_key_hereSCOPUS_API_KEY は起動時に環境から読み取られます(src/scopusClient.ts)。ハードコードされることはなく、.env は gitignore されているため、誤ってコミットされることはありません。
Environment variables
Variable | Required | Default | Purpose |
| ✅ | — | あなたの Elsevier Scopus API キー |
| 任意 | — | 機関トークン。キーがキャンパス外アクセスに必要とする場合 |
| 任意 |
| プロキシ/モックに対するテスト用の上書き |
| 任意 |
| リクエストごとのタイムアウト |
| 任意 |
|
|
| HTTP モードのみ |
|
|
| HTTP モードのみ |
|
|
| HTTP モード、強く推奨 | — | 設定すると、 |
| HTTP モード、任意 | — | カンマ区切りの |
Test connectivity first
サーバーを MCP クライアントに接続する前に、Scopus API キーとネットワーク経路が機能することを確認してください:
npm run test:connectionこれは test/test-connection.ts を実行し、ツールが使用するのと同じクライアント関数を、MCP プロトコルを介さずに直接、サンプルクエリ "farmland abandonment Nepal" に対して呼び出します。代わりに独自のクエリを渡すこともできます:
npm run test:connection -- "AUTH(Smith J) AND TITLE(remote sensing)"3つのツールすべてを順番に(検索 → 詳細 → 最初の結果の抄録)実行し、各ステップで ✅/❌ を表示します。また、logs/scopus-mcp.log に完全なリクエスト/レスポンスログを出力します(ロギング を参照)。終了コードが 0 になるのは、すべてのステップが成功した場合のみです。
Running locally (stdio, for a local MCP client)
npm run dev # runs src/index.ts directly via tsx, no build step
# or
npm run build && npm start # compiles to dist/ then runs the compiled serverサーバーは stdio で通信するため、ターミナルで直接実行すると、stdin で JSON-RPC を待ち続けるだけです。これは想定どおりです。MCP クライアントによって起動されることを意図しています。
Connect it to Claude Code
claude mcp add scopus --env SCOPUS_API_KEY=your_real_key_here -- node /absolute/path/to/mcp-server/dist/index.js(最初に npm run build を実行して dist/index.js を生成してください)、またはプロジェクトの .mcp.json に追加します:
{
"mcpServers": {
"scopus": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"],
"env": { "SCOPUS_API_KEY": "your_real_key_here" }
}
}
}Connect it to Claude Desktop
同じブロックを claude_desktop_config.json に追加します(Windows では %APPDATA%\Claude\claude_desktop_config.json、macOS では ~/Library/Application Support/Claude/claude_desktop_config.json)。その後、Claude Desktop を再起動します:
{
"mcpServers": {
"scopus": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"],
"env": { "SCOPUS_API_KEY": "your_real_key_here" }
}
}
}Response shape
search_scopus の例(省略):
{
"query": "farmland abandonment Nepal",
"totalResults": 42,
"returnedResults": 10,
"articles": [
{
"scopusId": "85123456789",
"eid": "2-s2.0-85123456789",
"title": "Drivers of farmland abandonment in the mid-hills of Nepal",
"authors": ["Sharma B.", "Poudel K."],
"publicationYear": 2021,
"sourceTitle": "Land Use Policy",
"doi": "10.1016/j.landusepol.2021.105123",
"doiUrl": "https://doi.org/10.1016/j.landusepol.2021.105123",
"scopusUrl": "https://www.scopus.com/inward/record.uri?...",
"citedByCount": 17,
"abstract": null,
"documentType": "Article"
}
]
}get_article_details は同じフィールドに加えて keywords、subjectAreas、openAccess、aggregationType を追加します。get_article_abstract は { scopusId, title, abstract, hasAbstract } を返します。
Scopus が特定のレコードに持っていないフィールドは、省略される代わりに null(リストフィールドの場合は []、または hasAbstract: false)として返されます。バグによる欠落と判断する前に、null/false を確認してください。
Error handling
各ツールはエラーを内部でキャッチし、MCP 接続をクラッシュさせる代わりに、構造化された JSON ボディとともに isError: true を返します:
{
"error": true,
"kind": "rate_limited",
"message": "Scopus API rate limit exceeded (HTTP 429) for search_scopus(...). Retry after 30s.",
"status": 429,
"retryAfterSeconds": 30
}kind は次のいずれかです:unauthorized(API キーが不正/欠落)、rate_limited(HTTP 429)、not_found(不正な Scopus ID / HTTP 404)、bad_request(空のクエリ、不正な入力)、network_error(DNS/接続失敗)、timeout(SCOPUS_REQUEST_TIMEOUT_MS を超過)、または unknown。成功したが一致するものがなかった検索はエラーではありません。totalResults: 0 と、クエリを広げる方法を提案する人間が読める message を返します。
Logging
デバッグ用にすべての API 呼び出しとレスポンスがログに記録されます:
送信前に、各リクエストの URL(API キーは伏せ字)をログに記録します。
各レスポンスのステータスコード、経過時間、500文字のボディプレビューをログに記録します。
ログは stderr に単一行の JSON として出力されます(stdout は決して使用しません。stdout は stdio トランスポートでの MCP プロトコル用に予約されています)。また、
logs/scopus-mcp.logにも追記されます。詳細が必要な場合は
LOG_LEVEL=debugを、静かにしたい場合はLOG_LEVEL=errorを設定してください。
Deploying to a remote/serverless platform (Render, Railway, etc.)
stdio トランスポート(src/index.ts)は、ローカルプロセスを起動できる MCP クライアントでのみ機能します。ネットワーク経由では到達できません。このサーバーをリモートでホストするには、代わりに Streamable HTTP エントリポイント(src/httpServer.ts)を使用してください。同じ3つのツールを POST /mcp で提供し、プラットフォームのヘルスチェック用に GET /healthz エンドポイントを追加します。
Render も Railway も真の「サーバーレス」ではありません(リクエスト途中のスケールゼロのコールドスタートはありません)。どちらも通常の永続的な Node プロセスとして実行されます。これは MCP のようなステートフルなプロトコルに必要なものです。ここでの「サーバーレスプラットフォーム」は「マネージド Node ホスティング」とお考えください。
Render
このリポジトリ(または
mcp-server/フォルダのみ)を GitHub にプッシュします。Render ダッシュボードで:New → Web Service を選択し、リポジトリを接続し、大きなリポジトリのサブフォルダの場合は root directory を
mcp-serverに設定します。Build command:
npm install && npm run buildStart command:
npm run start:httpEnvironment で以下を追加します:
SCOPUS_API_KEY= あなたのキー(シークレットとしてマーク)MCP_HTTP_AUTH_TOKEN= 生成した長いランダム文字列(例:openssl rand -hex 32)オプションで
MCP_ALLOWED_HOSTS= あなたの Render ホスト名(例:scopus-mcp.onrender.com)
Render は
PORTを自動設定します。httpServer.tsがそれを読み取るため、操作は不要です。デプロイします。ヘルスチェックパス:
/healthz。
Railway
New Project → Deploy from GitHub repo を選択し、必要に応じてサービスルートを
mcp-serverに設定します。Railway は Node を自動検出します。正しいコマンドが実行されない場合は、以下を設定します:
Build command:
npm install && npm run buildStart command:
npm run start:http
Variables に、上記の
SCOPUS_API_KEYとMCP_HTTP_AUTH_TOKENを追加します。Railway は
PORTを自動的に注入します。デプロイ後、MCP エンドポイントは
https://<your-app>.up.railway.app/mcpになります。
Connecting an MCP client to the hosted server
claude mcp add --transport http scopus https://<your-app>/mcp \
--header "Authorization: Bearer <your MCP_HTTP_AUTH_TOKEN>"Security notes for HTTP deployment
常に
MCP_HTTP_AUTH_TOKENを設定してください。 これがないと、URL を知っている誰でもツールを呼び出して Scopus API クォータを消費できます。未設定の場合、サーバーは起動時に警告をログに記録します。サーバーは
localhost/127.0.0.1に対して DNS リバインディング保護を自動的にバインドします。実際の0.0.0.0デプロイでは、MCP_ALLOWED_HOSTSをプラットフォームのホスト名に設定してください。SCOPUS_API_KEYとMCP_HTTP_AUTH_TOKENは、プラットフォームのシークレットマネージャーを介してローテーションしてください。リポジトリにコミットしてローテーションすることは絶対に避けてください。パブリックデプロイでは、Elsevier のキーごとのレート制限に加えて、プラットフォーム独自のレート制限/リバースプロキシを前面に配置することを検討してください。
Troubleshooting
Symptom | Likely cause |
|
|
| キーが無効、またはキーに Scopus Search の権限がない、またはキャンパス外アクセス用の |
| Elsevier のキーごとのレート/クォータ制限に達した — バックオフして |
|
|
| このマシン/ホストからインターネットにアクセスできない、企業プロキシが |
Tool calls silently do nothing in a stdio client | 何かが stdout に書き込んだ — 余分な |
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides access to the Elsevier Scopus API, enabling AI assistants to search for academic papers, retrieve detailed abstracts, and look up author profiles. It facilitates bibliometric research and scholarly data analysis through natural language commands.538MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to search and retrieve real academic papers from Scopus, preventing citation hallucination by providing accurate paper metadata, author info, and citation analysis.3MIT
- FlicenseAqualityDmaintenanceEnables searching and retrieving academic papers, authors, citations, and recommendations from Semantic Scholar via MCP.9
- AlicenseAqualityBmaintenanceEnables AI agents to search and retrieve academic papers, author profiles, and citation data from the Scopus database via MCP tools.7MIT
Related MCP Connectors
Academic research MCP server for paper search, citation checks, graphs, and deep research.
Academic paper search, scientific literature, citation analysis, arXiv & semantic related-work.
Scholarly search: OpenAlex, Crossref, arXiv, OpenCitations and PubMed in one endpoint.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Pratik-Pou/scopus-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server