Skip to main content
Glama

scopus-mcp

npm version Node.js License: MIT

An MCP server for the Elsevier Scopus API. Runs over stdio with npx and keeps the API's parameter names and JSON responses.

Quick start

Requires Node.js 22.22.0 or newer, npm, and an MCP client with stdio support. Get an API key from the Elsevier Developer Portal and add this server to your client's configuration:

{
  "mcpServers": {
    "scopus": {
      "command": "npx",
      "args": ["-y", "scopus-mcp"],
      "env": {
        "ELSEVIER_API_KEY": "your-elsevier-api-key"
      }
    }
  }
}

Reload the client to connect. To pin a release, use scopus-mcp@<version> in args.

Related MCP server: PubMed MCP Server

Configuration

Environment variable

Description

ELSEVIER_API_KEY

Required for all tools except subject_classifications.

ELSEVIER_INST_TOKEN

Institutional token, if provided by your institution.

Set credentials in the client's env object. The server does not load .env files. Access to data and views depends on your Elsevier subscription and institutional access.

The server reports its version in MCP serverInfo and the startup log on stderr.

Tools

Tool

Description

scopus_search

Find publications.

author_search

Find authors and co-authors.

affiliation_search

Find institutions.

author_retrieval

Get author profiles by ID, EID, or ORCID.

affiliation_retrieval

Get an institution profile by ID or EID.

citation_overview

Get yearly citation counts and summaries.

plumx_metrics

Get publication metrics by identifier.

subject_classifications

Look up subject codes; no API key needed.

Each call makes one API request. For additional pages, use the tool's pagination parameters. Requests support cancellation and a 30-second timeout; retries and redirects are not automatic.

Responses and errors

Results follow each tool's outputSchema. The original API JSON is returned in both structuredContent and a text content block, without reshaping fields or converting values.

Available quota headers are returned as strings in _meta["scopus-mcp/headers"]: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and Retry-After.

API failures return isError: true and a JSON text error with code, message, and, when available, an HTTP status. Credentials are redacted. Invalid arguments are rejected before an API request.

Error

What to check

MISSING_API_KEY

Set ELSEVIER_API_KEY in the server's environment.

HTTP 401 or 403

Check your key, subscription, institutional network, and token.

HTTP 429

Check quota headers and Retry-After before retrying.

TIMEOUT or NETWORK_ERROR

Check connectivity to api.elsevier.com.

INVALID_RESPONSE

Elsevier returned invalid JSON or an unexpected response shape.

API documentation

Development

See Contributing for local setup and changes, and Releases for publishing.

License

MIT © 2026 Andrii Baran. Independent project, not affiliated with Elsevier.

Available Tools

8 tools
affiliation_retrievalAffiliation RetrievalA
Read-onlyIdempotent

Retrieve a Scopus institution profile by affiliation_id or eid. Returns the original Elsevier JSON, including profile data or one page of related documents/authors when requested through view. Access depends on entitlements; no linked records or additional pages are fetched automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
eidNoOne affiliation electronic ID (EID). Use instead of affiliation_id; comma-separated lists are not supported.
verNoElsevier resource version.
viewNoResponse view (API default: LIGHT). DOCUMENTS and AUTHORS return related records. Availability depends on entitlements.
fieldNoComma-separated response fields to include; unavailable with DOCUMENTS and AUTHORS views.
reqIdNoCaller-supplied request identifier for Elsevier support.
refcountNoNumber of related documents or authors to return; API limits depend on service level.
startrefNoZero-based result offset for related documents or authors. No additional pages are fetched automatically.
affiliation_idNoOne Scopus affiliation ID. Provide exactly one of affiliation_id or eid; comma-separated lists are not supported.

Output Schema

ParametersJSON Schema
NameRequiredDescription
affiliation-retrieval-responseYesAffiliation response in Elsevier’s native object, array, or null representation. May contain a profile or related documents/authors according to view; unrecognized fields are preserved.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish read-only, idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds real value: returns raw Elsevier JSON, entitlement-gated access, and that no linked records or additional pages are fetched automatically—non-obvious operational constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the core action and identifier, followed by return format and constraints. Every sentence carries information; only minor tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return details need not be restated, yet the description still characterizes the response. Combined with the entitlement caveat and the no-auto-pagination note, this is nearly complete for a retrieval tool with a rich conditional schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema itself documents all 8 parameters, making 3 the baseline. The description reinforces that 'view' controls one page of related documents/authors and that no additional pages are fetched, but adds no syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieve a Scopus institution profile') and pins the identifiers ('by affiliation_id or eid'), which cleanly separates it from the sibling affiliation_search. An agent can select this over affiliation_search/author_retrieval without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage via the identifier and view parameters, and notes that DOCUMENTS/AUTHORS views pull related records, but it never explicitly says when to choose this tool over affiliation_search or which view to pick for which intent. Guidance is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

author_retrievalAuthor RetrievalA
Read-onlyIdempotent

Retrieve Scopus author profiles by author_id, eid, or orcid. Comma-separated author_id or eid values use one native batch request. Returns the original Elsevier JSON; view access depends on entitlements. Pagination and superseded-profile resolution are explicit.

ParametersJSON Schema
NameRequiredDescriptionDefault
eidNoAuthor electronic ID (EID), or comma-separated EIDs for one native batch request. Use instead of author_id or orcid.
verNoElsevier resource version.
viewNoResponse view (API default: LIGHT). DOCUMENTS requires a single identifier. Access depends on entitlements.
aliasNoSingle profiles only: false requests a superseded profile instead of its replacement (API default: true).
fieldNoComma-separated response fields to include.
orcidNoOne ORCID identifier; comma-separated lists are not accepted. Returns the Scopus author profile. Use instead of author_id or eid.
reqIdNoCaller-supplied request identifier for Elsevier support.
refcountNoSingle profiles only: number of related documents to return; API limits depend on service level.
startrefNoSingle profiles only: zero-based offset for related documents. No additional pages are fetched automatically.
author_idNoScopus author ID, or comma-separated IDs for one native batch request. Provide exactly one of author_id, eid, orcid.

Output Schema

ParametersJSON Schema
NameRequiredDescription
author-retrieval-responseNoAuthor profile or profiles in Elsevier’s native object, array, or null representation. View-specific and unrecognized fields are preserved.
author-retrieval-response-listNoNative batch response envelope. Inspect each profile’s @status for individual outcomes; HTTP success does not imply every author was found.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe read-only, idempotent, open-world profile, so the bar is lower, and the description still adds real behavioral context: comma-separated author_id/eid collapse into one native batch request, the response is raw Elsevier JSON, and availability is gated by entitlements. The closing clause about pagination and superseded-profile resolution is useful but terse ('are explicit' does not say what actually happens).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the identifiers and batch behavior before the caveats. Slight deduction because 'Pagination and superseded-profile resolution are explicit' is a vague signpost rather than an informative statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the annotations carry the safety profile. The description still covers the essentials an agent needs for a 10-parameter retrieval call: accepted identifier forms, batching, entitlement gating, and the existence of explicit pagination/alias controls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (view, alias, startref, refcount, field, ver, reqId) is already documented in the schema; the baseline of 3 applies. The description adds only the batch semantics of comma-separated IDs and the entitlement caveat, not new per-parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieve Scopus author profiles') plus the three lookup keys (author_id, eid, orcid), which implicitly separates it from the sibling author_search. However, it never names author_search or otherwise explicitly contrasts the two, so the differentiation is left to inference rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the presence of specific identifiers suggests when this tool applies, and 'view access depends on entitlements' hints at a prerequisite. There is no explicit when-to-use/when-not guidance and no pointer to author_search when only a name is known, which is the key routing decision an agent faces with these siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

citation_overviewCitation OverviewA
Read-onlyIdempotent

Retrieve yearly citation counts and summaries for Scopus documents. Supply one native document identifier type, with comma-separated values for multiple documents. Returns the original Elsevier JSON in one request. Citation Overview access must be enabled for your API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
doiNoOne or more comma-separated DOIs. Supply exactly one document identifier type.
piiNoOne or more comma-separated publication item identifiers. Supply exactly one document identifier type.
verNoRequested Elsevier resource version.
dateNoYear or inclusive year range for citation counts, e.g. 2024 or 2020-2024.
sortNoOne sort field: sort-year or rowTotal. Prefix with + for ascending or - for descending; no prefix means ascending.
viewNoCitation Overview supports only the STANDARD view.
countNoMaximum number of results. Elsevier determines the default and maximum from your API service level.
fieldNoComma-separated native response fields to include. Omit to use the full STANDARD view.
reqIdNoCaller-supplied request identifier for tracing this request with Elsevier support.
startNoZero-based result offset; Elsevier defaults to zero when omitted.
citationNoExclude self-citations or book citations; Elsevier includes all citations when omitted.
author_idNoComma-separated author IDs whose citations should be excluded. Ignored when citation is exclude-books.
pubmed_idNoOne or more comma-separated PubMed IDs. Supply exactly one document identifier type.
scopus_idNoOne or more comma-separated Scopus document IDs. Supply exactly one document identifier type.

Output Schema

ParametersJSON Schema
NameRequiredDescription
abstract-citations-responseYesNative Elsevier Citation Overview response. Counts and years remain strings; requested fields may be omitted or null.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds genuinely useful context beyond that: it is a read that returns the original Elsevier JSON in a single request, and it requires an access entitlement on the API key.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose, input convention, and prerequisite/return note. The core purpose is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover safety. The description adds the entitlement prerequisite and identifier rule, leaving only minor gaps (pagination/sorting behavior) that the schema itself fully documents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 14 parameters (including sort, citation, date, count, start) are already documented in the schema. The description only restates the one-identifier-type constraint and comma-separated convention that the schema already carries, adding no new parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (retrieve) plus specific resource (yearly citation counts and summaries for Scopus documents). It is clearly distinguishable from the metric-adjacent sibling plumx_metrics and the search/retrieval siblings, which operate on authors, affiliations, and search results rather than citation counts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the input convention (one native identifier type, comma-separated for multiples) and a real prerequisite (Citation Overview access must be enabled for the API key). However, it never says when to prefer this over plumx_metrics or any sibling, and offers no exclusions or failure-mode guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plumx_metricsPlumX MetricsA
Read-onlyIdempotent

Retrieve native PlumX metrics for one publication or artifact by identifier. Returns the original Elsevier JSON, including metric categories, count types and sources. Requires active Scopus access. HTTP 404 can mean that no metrics are available or that the identifier is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
reqIdNoCaller-supplied request identifier for tracing this request with Elsevier support.
idTypeYesIdentifier namespace used to locate the publication or artifact in PlumX.
idValueYesIdentifier in the selected namespace, e.g. 10.1103/physrevlett.116.061102 for doi. Supply the original value without URL encoding; a lone . or .. is not allowed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
id_typeYesIdentifier namespace returned by PlumX.
id_valueYesIdentifier value returned by PlumX.
count_categoriesNoAvailable PlumX metric categories and their counts; may be absent or null.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so the description is not required to restate safety. It adds genuinely useful behavior beyond them: the Scopus entitlement requirement and the ambiguous HTTP 404 semantics (no metrics vs unknown identifier), which the agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and resource, then entitlement and error semantics, in four tight sentences with no filler. The sentence enumerating returned JSON fields is mildly redundant given an output schema exists, but the rest all earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no prose; parameters are fully documented in the schema; and the description supplies the two things the schema cannot — the Scopus entitlement requirement and the meaning of a 404. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter (reqId, idType, idValue) is documented in the schema, including the namespace enum values and the no-URL-encoding rule. The description adds only the vague phrase 'by identifier', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (retrieve) and a distinctive resource (native PlumX metrics) scoped to a single publication or artifact located by identifier. The unique resource name separates it implicitly from siblings like citation_overview, but no sibling is named explicitly, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the lookup pattern (by identifier) and a hard prerequisite (active Scopus access), which implies when the tool is usable. However it never states when to prefer this over citation_overview or other metric-bearing siblings, and gives no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subject_classificationsScopus Subject ClassificationsA
Read-onlyIdempotent

Retrieve or filter Scopus subject classifications. Returns the original Elsevier JSON, including subject codes, descriptions, details, and abbreviations. Omit filters to list all classifications. This public endpoint does not require an API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoExact subject classification code, e.g. 1106.
fieldNoComma-separated response fields: code, abbrev, detail, description. Use exact names without spaces; omit to return all fields.
abbrevNoCase-insensitive exact subject abbreviation, e.g. AGRI.
detailNoCase-insensitive partial match on the subject detail, e.g. food.
descriptionNoCase-insensitive partial match on the primary subject description, e.g. biological.

Output Schema

ParametersJSON Schema
NameRequiredDescription
subject-classificationsYesNative Elsevier subject classification response, including any no-results message.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, open-world, non-destructive behavior, so safety is covered. The description adds genuinely useful context beyond that: it returns raw Elsevier JSON and that the endpoint is public and needs no API key, which affects how the agent should call it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with purpose, then return format, usage, and auth note; no filler. The return-content sentence slightly overlaps the output schema, but it still conveys the raw JSON format, so only minor redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and rich annotations, the description only needs to establish purpose, filtering behavior, and auth expectations, all of which it does. Nothing an agent needs for correct invocation is missing for this simple, zero-required-parameter lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the five optional filter parameters is already documented with examples and matching semantics. The description adds no parameter-level detail (syntax, matching rules) beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Retrieve or filter Scopus subject classifications') and the resource is unique among the siblings, which are search/retrieval tools for other entity types. An agent can immediately tell this is the taxonomy lookup endpoint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Omit filters to list all classifications,' which tells the agent how to get the full list versus a filtered subset. There are no overlapping siblings to route against and no exclusion cases are needed, so context is clear even without naming alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.5.1
    • Addedaffiliation_retrieval
    • Addedaffiliation_search
    • Addedauthor_retrieval
    • Addedauthor_search
    • Addedcitation_overview
    • Addedplumx_metrics
    • Addedscopus_search
    • Addedsubject_classifications

TDQS

A4.1/5.0

Scored across 8 tools

Disambiguation5/5

Each tool pairs a distinct entity with a distinct action: author_search/author_retrieval and affiliation_search/affiliation_retrieval are cleanly separated by query-vs-id, and citation_overview, plumx_metrics, scopus_search, and subject_classifications each target unique resources. There is no meaningful overlap that would cause misselection.

Naming Consistency4/5

Most tools follow a predictable entity_action pattern (author_search, affiliation_retrieval, scopus_search, etc.), which is easy to parse. However, citation_overview, plumx_metrics, and subject_classifications are noun-only with no verb, a minor deviation from the dominant convention.

Tool Count5/5

Eight tools is well-scoped for a Scopus API wrapper, with two search/retrieve pairs for authors and affiliations plus publication search, citations, metrics, and classifications. Each tool earns its place without redundancy.

Completeness4/5

Coverage is broad: search and retrieval for authors and affiliations, publication search, citation overview, PlumX metrics, and subject classifications. The main gap is a document-level retrieval tool (e.g., fetch a specific publication by DOI/EID), which agents must currently work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Provides 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.
    5
    45
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables any MCP-compatible agent to query a local OpenRhyme activity timeline, search history, and issue control commands over stdio while keeping all data on-machine.
    5
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables MCP clients to connect to Agenzax's REST API over stdio, providing tools for messaging, session management, and review-mode oversight.
    18
    79 npm
    5
    MIT