scopus-mcp
Integrates with the Elsevier Scopus API, with planned Scopus tools and structured response schemas. Currently an initial scaffold supporting MCP initialization and ping.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@scopus-mcpping the scopus-mcp server to verify it's running"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
scopus-mcp
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 |
| Required for all tools except |
| 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 |
Find publications. | |
Find authors and co-authors. | |
Find institutions. | |
Get author profiles by ID, EID, or ORCID. | |
Get an institution profile by ID or EID. | |
Get yearly citation counts and summaries. | |
Get publication metrics by identifier. | |
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 |
| Set |
HTTP 401 or 403 | Check your key, subscription, institutional network, and token. |
HTTP 429 | Check quota headers and |
| Check connectivity to |
| 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 toolsaffiliation_retrievalAffiliation RetrievalARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| eid | No | One affiliation electronic ID (EID). Use instead of affiliation_id; comma-separated lists are not supported. | |
| ver | No | Elsevier resource version. | |
| view | No | Response view (API default: LIGHT). DOCUMENTS and AUTHORS return related records. Availability depends on entitlements. | |
| field | No | Comma-separated response fields to include; unavailable with DOCUMENTS and AUTHORS views. | |
| reqId | No | Caller-supplied request identifier for Elsevier support. | |
| refcount | No | Number of related documents or authors to return; API limits depend on service level. | |
| startref | No | Zero-based result offset for related documents or authors. No additional pages are fetched automatically. | |
| affiliation_id | No | One Scopus affiliation ID. Provide exactly one of affiliation_id or eid; comma-separated lists are not supported. |
Output Schema
| Name | Required | Description |
|---|---|---|
| affiliation-retrieval-response | Yes | Affiliation 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
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.
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.
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.
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.
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.
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.
affiliation_searchAffiliation SearchARead-onlyIdempotent
Search Scopus institution profiles using native affiliation query syntax. Returns one page of native Elsevier JSON, including search-results and pagination. Example: AFFIL(university) AND AFFIL(London). Credentials come from the server environment. Access depends on your Scopus entitlements.
| Name | Required | Description | Default |
|---|---|---|---|
| ver | No | Resource version flags: facetexpand, allexpand, new; comma or semicolon separated. | |
| sort | No | Up to three comma-separated sort fields; + ascending, - descending, e.g. -document-count,+affiliation-name. | |
| view | No | Response view. STANDARD is the default and only supported view; overridden by field. | STANDARD |
| count | No | Maximum results in this page, from 0 to 200. Defaults to 25. | |
| field | No | Comma-separated response fields, e.g. identifier,affiliation-name. Overrides view; omitted fields remain absent in the response. | |
| query | Yes | Native affiliation query, e.g. AFFIL(university) AND AFFIL(London). | |
| reqId | No | Caller-supplied request identifier for Elsevier support. | |
| start | No | Zero-based result offset. The requested window start + count must not exceed 5000; omitted count means 25. | |
| facets | No | Native facet expression, e.g. affilcountry(count=10,sort=fd);affilcity. | |
| suppressNavLinks | No | Suppress top-level navigation links. Omitted values use the API default of false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| search-results | Yes | Native affiliation search response, including page metadata and entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds beyond that: it returns one page of native Elsevier JSON including pagination, and access is gated by Scopus entitlements — real behavioral context an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with purpose and response shape, then the query example, then the entitlement caveat. Every sentence carries information; only the example slightly duplicates the schema's query pattern.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 detailed, and the description correctly says only that one page of with pagination is returned. The pagination cap (start + count <= 5000) lives in the schema, and the entitlement precondition is stated, leaving little an agent needs beyond what's provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all 10 parameters, so the schema fully documents sort, count, start, facets, view, etc. The description only restates the query example (AFFIL(...) AND AFFIL(...)), which the schema already carries, so it earns the baseline 3 without adding parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) plus a specific resource (Scopus institution profiles) and the query dialect (native affiliation query syntax). An agent can distinguish it from siblings like author_search or affiliation_retrieval without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies an entitlement caveat ('Access depends on your Scopus entitlements') and notes credentials come from the environment, which is useful context, but never states when to prefer this over affiliation_retrieval or scopus_search. Usage is implied by the tool name rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
author_retrievalAuthor RetrievalARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| eid | No | Author electronic ID (EID), or comma-separated EIDs for one native batch request. Use instead of author_id or orcid. | |
| ver | No | Elsevier resource version. | |
| view | No | Response view (API default: LIGHT). DOCUMENTS requires a single identifier. Access depends on entitlements. | |
| alias | No | Single profiles only: false requests a superseded profile instead of its replacement (API default: true). | |
| field | No | Comma-separated response fields to include. | |
| orcid | No | One ORCID identifier; comma-separated lists are not accepted. Returns the Scopus author profile. Use instead of author_id or eid. | |
| reqId | No | Caller-supplied request identifier for Elsevier support. | |
| refcount | No | Single profiles only: number of related documents to return; API limits depend on service level. | |
| startref | No | Single profiles only: zero-based offset for related documents. No additional pages are fetched automatically. | |
| author_id | No | Scopus author ID, or comma-separated IDs for one native batch request. Provide exactly one of author_id, eid, orcid. |
Output Schema
| Name | Required | Description |
|---|---|---|
| author-retrieval-response | No | Author profile or profiles in Elsevier’s native object, array, or null representation. View-specific and unrecognized fields are preserved. |
| author-retrieval-response-list | No | Native batch response envelope. Inspect each profile’s @status for individual outcomes; HTTP success does not imply every author was found. |
TDQS
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.
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.
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.
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.
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.
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.
author_searchAuthor SearchARead-onlyIdempotent
Search Scopus author profiles using native queries, or supply co-author to find an author’s collaborators. Returns one page of native Elsevier JSON, including search-results and pagination. Example: AUTHLASTNAME(Smith) AND AUTHFIRST(John). Credentials come from the server environment. Access depends on your Scopus entitlements.
| Name | Required | Description | Default |
|---|---|---|---|
| ver | No | Resource version flags: facetexpand, subjexpand, allexpand, new; comma or semicolon separated. | |
| sort | No | Up to three comma-separated sort fields; + ascending, - descending, e.g. -document-count,+surname. | |
| view | No | Response view. STANDARD is the default and only supported view; overridden by field. | STANDARD |
| alias | No | Whether author-ID searches include superseding profiles. Omitted values use the API default of true. | |
| count | No | Maximum results in this page, from 0 to 200. Defaults to 25. | |
| field | No | Comma-separated response fields, e.g. identifier,preferred-name. Overrides view; omitted fields remain absent in the response. | |
| query | No | Native author query, e.g. AUTHLASTNAME(Smith) AND AUTHFIRST(John). Required unless co-author is supplied; Elsevier ignores query when both are present. | |
| reqId | No | Caller-supplied request identifier for Elsevier support. | |
| start | No | Zero-based result offset. The requested window start + count must not exceed 5000; omitted count means 25. | |
| facets | No | Native facet expression, e.g. affilcountry(count=10,sort=fd);active. | |
| co-author | No | One numeric Scopus author ID as a string. Returns associated co-authors and takes precedence over query. | |
| suppressNavLinks | No | Suppress top-level navigation links. Omitted values use the API default of false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| search-results | Yes | Native author search response, including page metadata and entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely useful context beyond that: one page of native Elsevier JSON with search-results and pagination, plus entitlement-gated access from server-side credentials.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and routing rule in the first sentence, then return shape and auth in two compact sentences. The inline query example is redundant with the schema parameter description, a minor wasted sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and rich annotations present, the description only needs to add routing rules and environment facts, which it does (precedence, credentials, entitlements, pagination). Nothing critical for correct invocation is missing, though the boundary with author_retrieval stays implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the description largely mirrors it (the AUTHLASTNAME/AUTHFIRST example appears verbatim in the query parameter). Precedence of co-author over query is restated from the schema rather than adding new meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search Scopus author profiles') plus the two input modes (native query or co-author). The search framing clearly separates it from the retrieval-oriented siblings, but no sibling is named explicitly, so an agent must infer the boundary with author_retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance: use a native query, or supply co-author to find collaborators, and states that credentials come from the server environment and access depends on Scopus entitlements. It does not name alternative tools (e.g. author_retrieval) or say when NOT to use this search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
citation_overviewCitation OverviewARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | No | One or more comma-separated DOIs. Supply exactly one document identifier type. | |
| pii | No | One or more comma-separated publication item identifiers. Supply exactly one document identifier type. | |
| ver | No | Requested Elsevier resource version. | |
| date | No | Year or inclusive year range for citation counts, e.g. 2024 or 2020-2024. | |
| sort | No | One sort field: sort-year or rowTotal. Prefix with + for ascending or - for descending; no prefix means ascending. | |
| view | No | Citation Overview supports only the STANDARD view. | |
| count | No | Maximum number of results. Elsevier determines the default and maximum from your API service level. | |
| field | No | Comma-separated native response fields to include. Omit to use the full STANDARD view. | |
| reqId | No | Caller-supplied request identifier for tracing this request with Elsevier support. | |
| start | No | Zero-based result offset; Elsevier defaults to zero when omitted. | |
| citation | No | Exclude self-citations or book citations; Elsevier includes all citations when omitted. | |
| author_id | No | Comma-separated author IDs whose citations should be excluded. Ignored when citation is exclude-books. | |
| pubmed_id | No | One or more comma-separated PubMed IDs. Supply exactly one document identifier type. | |
| scopus_id | No | One or more comma-separated Scopus document IDs. Supply exactly one document identifier type. |
Output Schema
| Name | Required | Description |
|---|---|---|
| abstract-citations-response | Yes | Native Elsevier Citation Overview response. Counts and years remain strings; requested fields may be omitted or null. |
TDQS
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.
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.
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.
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.
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.
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 MetricsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| reqId | No | Caller-supplied request identifier for tracing this request with Elsevier support. | |
| idType | Yes | Identifier namespace used to locate the publication or artifact in PlumX. | |
| idValue | Yes | Identifier 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
| Name | Required | Description |
|---|---|---|
| id_type | Yes | Identifier namespace returned by PlumX. |
| id_value | Yes | Identifier value returned by PlumX. |
| count_categories | No | Available PlumX metric categories and their counts; may be absent or null. |
TDQS
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.
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.
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.
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.
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.
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.
scopus_searchScopus SearchARead-onlyIdempotent
Search Scopus publications with its native query syntax. Returns one page of the original Elsevier JSON, including search-results, entry and pagination. Example: TITLE-ABS-KEY(machine learning) AND PUBYEAR > 2020. Credentials come from the server environment. Access to views and cursor pagination depends on your Scopus entitlements.
| Name | Required | Description | Default |
|---|---|---|---|
| ver | No | Resource version flags: facetexpand, allexpand, new; comma or semicolon separated. | |
| date | No | Publication year or inclusive year range, e.g. 2024 or 2020-2024. | |
| sort | No | Up to three comma-separated sort fields; + ascending, - descending, e.g. -coverDate,+creator. | |
| subj | No | Scopus subject area code to filter by, e.g. COMP. | |
| view | No | Response view. Defaults to STANDARD; COMPLETE and COMPONENT require the relevant Scopus entitlements. Overridden by field. | STANDARD |
| alias | No | Whether author-ID searches include superseded profiles. Omitted values use the API default of true. | |
| count | No | Maximum results in this page. Defaults to 25; up to 200 for STANDARD or 25 for COMPLETE/COMPONENT. With field, Elsevier determines the effective view and limit. | |
| field | No | Comma-separated response fields, e.g. identifier,title,doi. Overrides view; omitted fields remain absent in the response. | |
| query | Yes | Native Scopus publication query, e.g. TITLE-ABS-KEY(machine learning) AND PUBYEAR > 2020. | |
| reqId | No | Caller-supplied request identifier for Elsevier support. | |
| start | No | Zero-based result offset. Use instead of cursor. The requested window start + count must not exceed 5000; omitted count means 25. | |
| cursor | No | Use * for the first cursor page, then search-results.cursor["@next"] from the previous response. Use instead of start; keep the query and other options unchanged. | |
| facets | No | Native facet expression, e.g. pubyear;subjarea(count=10,sort=fd). | |
| content | No | Scopus content collection to search: all, core, or dummy. | |
| suppressNavLinks | No | Suppress top-level navigation links. Omitted values use the API default of false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| search-results | Yes | Native Scopus search response, including page metadata and entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds meaningfully beyond them: credentials come from the server environment (no auth handling by the caller), responses are one page of raw Elsevier JSON with pagination, and view/cursor availability is gated by entitlements. This is useful operational context, though it does not quantify entitlement tiers or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each carrying distinct information (purpose, return shape, example, credentials, entitlements), front-loaded with the purpose. Slightly dense, but no sentence is purely filler; the return-shape sentence is only partly redundant with the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter tool with an output schema and rich annotations, the description covers purpose, return model, auth source, and entitlement gating. The offset-pagination 5000 limit and view/count ceilings live in the schema, so little is missing, though the relationship to sibling search/retrieval tools could be spelled out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds cross-cutting semantics not obvious from individual params: the response is a single page, includes pagination metadata, and cursor/view behavior is entitlement-dependent. It does not enumerate the parameters themselves, which is fine given the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb and resource ('Search Scopus publications') with the query syntax being native Scopus. The publication focus implicitly separates it from sibling tools like author_search, affiliation_search and citation_overview, but no sibling is named explicitly, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example query and the note that view/cursor access depends on Scopus entitlements imply when this tool applies, but there is no explicit when-to-use guidance or routing against siblings such as author_search or citation_overview. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subject_classificationsScopus Subject ClassificationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Exact subject classification code, e.g. 1106. | |
| field | No | Comma-separated response fields: code, abbrev, detail, description. Use exact names without spaces; omit to return all fields. | |
| abbrev | No | Case-insensitive exact subject abbreviation, e.g. AGRI. | |
| detail | No | Case-insensitive partial match on the subject detail, e.g. food. | |
| description | No | Case-insensitive partial match on the primary subject description, e.g. biological. |
Output Schema
| Name | Required | Description |
|---|---|---|
| subject-classifications | Yes | Native Elsevier subject classification response, including any no-results message. |
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v0.5.1- Added
affiliation_retrieval - Added
affiliation_search - Added
author_retrieval - Added
author_search - Added
citation_overview - Added
plumx_metrics - Added
scopus_search - Added
subject_classifications
TDQS
Scored across 8 tools
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.
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.
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.
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
Related MCP Connectors
Query SEC EDGAR filings, XBRL financials, and company data through MCP. STDIO & Streamable HTTP.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Experimental MCP server for current empirical verification of explicit public HTTPS endpoint claims.
Related MCP Servers
- AlicenseAqualityFmaintenanceProvides 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.545MIT
- AlicenseAqualityDmaintenanceA local MCP server enabling PubMed, PMC, and iCite API access via stdio for tools like search, fetch, full text, and citation counts.1060 npm2MIT

openrhyme-mcpofficial
AlicenseAqualityBmaintenanceEnables 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.5MIT- AlicenseAqualityBmaintenanceEnables MCP clients to connect to Agenzax's REST API over stdio, providing tools for messaging, session management, and review-mode oversight.1879 npm5MIT