Skip to main content
Glama
MohamedElashri

InspireHEP MCP Server

InspireHEP MCP Server

An MCP server that integrates InspireHEP high-energy physics literature with LLMs. Search papers, explore citations, retrieve author metrics, and generate formatted references.

Installation

# Using pip
pip install inspirehep-mcp

# Or run directly with uvx (no install needed)
uvx inspirehep-mcp
git clone https://github.com/MohamedElashri/inspirehep-mcp.git
cd inspirehep-mcp
uv sync
uv run inspirehep-mcp

Related MCP server: Crossref Academic MCP Server

Remote endpoint deployment

The installed command remains a stdio server by default, so existing desktop configurations continue to work. To run it natively as a remote MCP endpoint, select the Streamable HTTP transport:

INSPIREHEP_ALLOWED_HOSTS="mcp.example.org" \
  INSPIREHEP_HTTP_RATE_LIMIT=60 \
  inspirehep-mcp --transport streamable-http --host 0.0.0.0 --port 8000

The MCP endpoint is http://localhost:8000/mcp and the unauthenticated health probe is http://localhost:8000/health. PORT is also honored when a hosting platform injects it. Put the service behind HTTPS for internet deployment.

Docker

Release tags publish a container to the GitHub Container Registry. The image uses Streamable HTTP by default:

docker run --rm -p 8000:8000 \
  ghcr.io/mohamedelashri/inspirehep-mcp:latest

For a public hostname, add it to the host allowlist:

docker run --rm -p 8000:8000 \
  -e INSPIREHEP_ALLOWED_HOSTS="mcp.example.org" \
  -e INSPIREHEP_HTTP_RATE_LIMIT=60 \
  ghcr.io/mohamedelashri/inspirehep-mcp:latest

The image runs as a non-root user, has a built-in health check, and uses stateless JSON responses so replicas do not need shared MCP session state.

Docker Compose

The included docker-compose.yml can build the current checkout or run the published image:

# Local deployment
docker compose up --build -d

# Add the public hostname when deploying behind a domain
INSPIREHEP_ALLOWED_HOSTS="mcp.example.org" docker compose up -d

The Compose service is read-only, drops Linux capabilities, enables no-new-privileges, and retains the image health check.

Inbound rate limiting

Streamable HTTP requests are limited per client IP with a token bucket. The default is 60 requests per minute with a burst of 20; /health is exempt. Set INSPIREHEP_HTTP_RATE_LIMIT=0 to disable it.

Requests to /mcp are limited to 256 KiB. The native server also accepts at most 100 concurrent connections or tasks, closes idle keep-alive connections after 5 seconds, and admits at most 32 pending INSPIRE API cache misses. Excess upstream work fails fast instead of accumulating in memory.

By default, the limiter uses the direct peer address and ignores forwarded headers. Only enable INSPIREHEP_TRUST_PROXY_HEADERS when a trusted reverse proxy overwrites X-Forwarded-For; otherwise clients can choose their own rate-limit identity. The limiter is in-memory and per process, so multi-replica deployments should also enforce a shared limit at the proxy or gateway.

IMPORTANT

Read-only tools avoid mutation risk, but a public endpoint can still be used to consume your compute and upstream API allowance. This server does not add authentication. Use an authenticating reverse proxy if the endpoint should not be open to everyone, and retain an edge rate limit for distributed deployments. Keep DNS-rebinding protection enabled and setINSPIREHEP_ALLOWED_ORIGINS for clients that send an Origin header.

Integration

Claude Desktop / Cursor

Add to your MCP client config:

{
  "mcpServers": {
    "inspirehep": {
      "command": "uvx",
      "args": ["inspirehep-mcp"]
    }
  }
}

Claude Code

Option A: Using the CLI

# Global scope (available across all projects)
claude mcp add --scope user inspirehep -- uvx inspirehep-mcp

# Project scope (shared via .mcp.json, checked into source control)
claude mcp add --scope project inspirehep -- uvx inspirehep-mcp

Option B: Manual configuration

For global scope, add to ~/.claude.json:

{
  "mcpServers": {
    "inspirehep": {
      "command": "uvx",
      "args": ["inspirehep-mcp"]
    }
  }
}

For project scope, create .mcp.json in your project root:

{
  "mcpServers": {
    "inspirehep": {
      "command": "uvx",
      "args": ["inspirehep-mcp"]
    }
  }
}

Antigravity CLI

Open the interactive MCP manager with /mcp, or configure the server manually. Antigravity reads global MCP servers from ~/.gemini/config/mcp_config.json and workspace-local servers from .agents/mcp_config.json:

{
  "mcpServers": {
    "inspirehep": {
      "command": "uvx",
      "args": ["inspirehep-mcp"]
    }
  }
}

Tools

Tool

Description

search_papers

Search papers by topic, author, collaboration, or free text

get_paper_details

Get full metadata for a paper by Inspire ID, arXiv ID, or DOI

get_author_papers

Retrieve an author's publications and citation metrics

get_citations

Explore citation graph — who cites a paper, or what it cites

search_by_collaboration

Find publications from ATLAS, CMS, LHCb, etc.

get_paper_figures

Retrieve figures and download URLs for a paper

get_references

Generate BibTeX, LaTeX, or JSON reference lists

get_bibtex

Retrieve BibTeX citation entry by DOI, arXiv ID, or Inspire ID

Configuration

All settings via environment variables (prefix INSPIREHEP_):

Variable

Default

Description

INSPIREHEP_REQUESTS_PER_SECOND

1.5

API rate limit

INSPIREHEP_UPSTREAM_MAX_PENDING

32

Maximum admitted INSPIRE API cache misses

INSPIREHEP_CACHE_TTL

86400

Cache TTL in seconds (24h)

INSPIREHEP_CACHE_MAX_SIZE

512

Max cached entries

INSPIREHEP_CACHE_PERSISTENT

false

Enable SQLite persistent cache

INSPIREHEP_CACHE_DB_PATH

inspirehep_cache.db

SQLite cache file path

INSPIREHEP_API_TIMEOUT

30

HTTP request timeout (seconds)

INSPIREHEP_TRANSPORT

stdio

stdio or streamable-http

INSPIREHEP_HOST

127.0.0.1

HTTP bind address

INSPIREHEP_PORT

8000

HTTP port; falls back to PORT

INSPIREHEP_HTTP_PATH

/mcp

Streamable HTTP endpoint path

INSPIREHEP_HTTP_STATELESS

true

Disable server-side MCP session state

INSPIREHEP_HTTP_JSON_RESPONSE

true

Prefer JSON responses over SSE streams

INSPIREHEP_HTTP_RATE_LIMIT

60

Inbound requests per minute per client; 0 disables

INSPIREHEP_HTTP_RATE_LIMIT_BURST

20

Maximum immediate requests per client

INSPIREHEP_HTTP_RATE_LIMIT_MAX_CLIENTS

10000

Maximum in-memory client buckets

INSPIREHEP_HTTP_MAX_BODY_SIZE

262144

Maximum /mcp request body bytes; 0 disables

INSPIREHEP_HTTP_MAX_CONCURRENCY

100

Maximum concurrent HTTP connections or tasks

INSPIREHEP_HTTP_KEEP_ALIVE_TIMEOUT

5

Idle HTTP keep-alive timeout in seconds

INSPIREHEP_TRUST_PROXY_HEADERS

false

Trust the first X-Forwarded-For address

INSPIREHEP_MAX_INPUT_LENGTH

2048

Maximum general text input characters

INSPIREHEP_MAX_IDENTIFIER_LENGTH

512

Maximum identifier input characters

INSPIREHEP_MAX_RESPONSE_BYTES

1048576

Maximum serialized tool-result bytes

INSPIREHEP_MAX_REFERENCES

250

Maximum references returned per tool call

INSPIREHEP_MAX_FIGURES

100

Maximum figures returned per tool call

INSPIREHEP_ALLOWED_HOSTS

127.0.0.1:*,localhost:*

Comma-separated valid HTTP Host headers

INSPIREHEP_ALLOWED_ORIGINS

empty

Comma-separated valid browser origins

INSPIREHEP_DNS_REBINDING_PROTECTION

true

Validate Host and Origin headers

INSPIREHEP_LOG_LEVEL

INFO

Logging level

Development

# Run tests
uv run pytest tests/ -v

# Run with coverage
uv run pytest tests/ --cov=inspirehep_mcp --cov-report=term-missing

# Unit tests only (no network)
uv run pytest tests/test_utils.py tests/test_cache.py tests/test_errors.py \
  tests/test_config.py tests/test_rate_limit.py tests/test_server.py \
  tests/test_api_client_safety.py tests/test_tools_safety.py

LICENCE

This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.

Available Tools

9 tools
get_author_papersGet Author PapersA
Read-onlyIdempotent

Retrieve publication history and citation metrics for an author.

Provide either author_name or author_id:

  • author_name: "Weinberg, Steven" (Last, First format)

  • author_id: "S.Weinberg.1" (InspireHEP BAI)

Returns a list of papers plus aggregate metrics including total citations, h-index, and average citations per paper.

Args: author_name: Author name in "Last, First" format. author_id: InspireHEP author identifier (BAI). sort: Sort order — "mostrecent" or "mostcited". size: Number of papers to return (1-100, default 20).

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo
sortNomostrecent
author_idNo
author_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already indicate readOnly and idempotent behavior, and the description is consistent with that. It adds useful behavioral details such as returning aggregate metrics (total citations, h-index, average citations) and the paper list, while not contradicting the annotations.

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?

The description is well-structured with an intro and an Args block, but it repeats author_name and author_id details in prose and again in the Args list. This minor redundancy is not harmful but prevents a perfect conciseness score.

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?

With all parameters described and return values summarized, the description is sufficient for typical usage. It does not specify behavior when both author_name and author_id are omitted or both provided, but this is a minor gap given the clear parameter guidance.

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

Parameters5/5

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

Although the input schema has no per-parameter descriptions, the tool description explains all four parameters: author_name (format), author_id (BAI format), sort (allowed values), and size (range and default). This fully compensates for the schema's lack of descriptions.

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?

The description clearly states a specific action ('Retrieve publication history and citation metrics for an author') and identifies the resource (an author). This distinguishes it from sibling tools like search_papers or get_paper_details, which have different scopes.

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?

The description provides clear context for when to use the tool: retrieving papers and metrics for a specific author. It also explains how to supply the author (either by name or BAI) and includes sort/size options. It does not explicitly compare against sibling tools, but the usage context is clear.

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

get_bibtexGet BibTeXA
Read-onlyIdempotent

Retrieve the BibTeX citation entry for a paper.

Accepts any common identifier format:

  • Inspire ID: "3456"

  • arXiv ID: "arxiv:2301.12345", "arxiv:hep-ph/0123456", or full URL

  • DOI: "10.1103/PhysRevLett.123.456789" or full URL

Args: identifier: A DOI, arXiv ID, or InspireHEP record ID.

Returns the BibTeX entry along with paper title, texkey, and the resolved Inspire record ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds behavioral context by specifying the return payload (BibTeX, paper title, texkey, resolved Inspire record ID) and clarifying accepted identifier formats. It does not contradict annotations and provides useful detail beyond them.

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?

The description is well-organized: a one-sentence purpose statement, a bulleted list of accepted formats, and a separate Args section. It is front-loaded with the core function and avoids verbosity. Every sentence contributes value, and the format is scannable for an agent.

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?

The tool is simple with a single required parameter, and an output schema exists (as indicated by context signals). The description covers the input formats and the return contents, leaving nothing essential missing. The presence of an output schema means return values don't need further elaboration.

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

Parameters5/5

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

The input schema provides only a bare 'identifier' string with no description, leaving 0% schema coverage. The description fully compensates by detailing the three accepted identifier formats and giving concrete examples for each. This adds meaning that the schema lacks entirely.

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?

The description clearly states the tool's purpose: 'Retrieve the BibTeX citation entry for a paper.' It specifies a concrete verb and resource, and the accepted identifier formats (Inspire ID, arXiv ID, DOI) make it distinct from sibling tools like search_papers or get_paper_details. No ambiguity about what it does.

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 implies usage—when you need a BibTeX entry—but it does not explicitly compare itself to alternatives or state when not to use it. It does not mention that get_citations or get_paper_details might be better for other needs. The guidance is functional but not explicit about selection criteria.

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

get_citationsGet CitationsA
Read-onlyIdempotent

Retrieve citation graph data for a paper.

Args: inspire_id: InspireHEP record ID (numeric). direction: "citing" (papers that cite this) or "cited_by" (papers this cites). size: Number of results to return (1–250, default 50).

Returns citation list with metadata, total count, and a year-by-year citation timeline.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo
directionNociting
inspire_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

The annotations already declare read-only and idempotent behavior, which the description does not contradict. The description adds a brief note about the return format (citation list, metadata, count, timeline), but this is more about output than behavioral traits. With the annotations covering safety, the description adds only marginal behavioral context.

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?

The description is well-structured with an 'Args' section and a 'Returns' section, front-loading the core purpose. It is concise without unnecessary fluff, and each sentence serves a clear informative purpose.

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?

The tool is simple with three parameters, and the description explains all of them along with the return shape. Since an output schema exists, the summary of the return is sufficient context. No critical usage information is missing.

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

Parameters5/5

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

The description adds substantial meaning to each parameter beyond the raw schema. It explains that inspire_id is a numeric record ID, defines the two valid values for 'direction', and clarifies that size is a result count with a range and default. This greatly aids correct invocation.

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?

The description clearly states the tool's purpose with a specific verb ('Retrieve') and resource ('citation graph data for a paper'). It is distinct from sibling tools like 'get_references' or 'get_paper_details' by focusing on citation graphs, making its purpose unambiguous.

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?

The description provides clear context on what the tool does and explains the parameters, especially the 'direction' option (citing vs cited_by). However, it does not explicitly mention when to use it instead of related tools like 'get_references', so it lacks explicit alternative guidance.

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

get_paper_detailsGet Paper DetailsA
Read-onlyIdempotent

Retrieve detailed metadata for a specific paper.

Provide at least one identifier. Accepts multiple formats:

  • inspire_id: "3456"

  • arxiv_id: "arxiv:2301.12345", "arxiv:hep-ph/0123456", or full URL

  • doi: "10.1103/PhysRevLett.123.456789" or full URL

Returns title, authors, abstract, citations, references count, publication info, keywords, URLs, and more.

ParametersJSON Schema
NameRequiredDescriptionDefault
doiNo
arxiv_idNo
inspire_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The readOnlyHint and idempotentHint annotations already disclose the safe, non-mutating nature, and the description adds what data is returned (title, authors, abstract, citations, references count, publication info, keywords, URLs). It does not describe error behavior or rate limits, but annotations cover the key behavioral safety aspects.

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?

The description is well-structured and concise, using a short introductory sentence, a clear bulleted list of identifier formats, and a brief enumeration of return fields. It avoids unnecessary jargon or redundant details while remaining informative.

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?

Given the output schema exists and the description lists key return fields, the core usage context is complete. It could mention behavior when multiple identifiers are provided or when no identifier resolves, but for a metadata retrieval tool with clear identifier requirements, it is adequately complete.

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

Parameters5/5

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

Despite the schema having no descriptions, the description fully explains each parameter's expected format: inspire_id, arxiv_id (including variations and URLs), and doi (including full URLs). It also conveys the 'at least one' constraint, which is meaningful context beyond the optional schema fields.

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?

The description clearly states the tool's verb ('Retrieve') and resource ('detailed metadata for a specific paper'), making the primary purpose unmistakable. It also differentiates itself from siblings like search_papers by focusing on a single paper via identifiers.

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?

The description explicitly instructs to 'provide at least one identifier' and details the accepted formats for each parameter. It does not name sibling alternatives or conditions for choosing this tool over them, but the identifier-focused usage is clear and actionable.

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

get_paper_figuresGet Paper FiguresA
Read-onlyIdempotent

Retrieve figures for a specific paper.

Provide at least one identifier. Accepts multiple formats:

  • inspire_id: "3456"

  • arxiv_id: "arxiv:2301.12345", "arxiv:hep-ph/0123456", or full URL

  • doi: "10.1103/PhysRevLett.123.456789" or full URL

Returns title, inspire url, and a list of figures with their captions, descriptions and direct download URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
doiNo
arxiv_idNo
inspire_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

The readOnlyHint and idempotentHint annotations already cover side-effect expectations. The description adds useful behavioral context by specifying the required identifier condition and the shape of the returned data, though it does not discuss error cases if no identifier is provided.

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?

The description is concise, well-structured, and free of unnecessary detail. The identifier formats are presented as a clear bullet list, and the return value summary is direct.

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?

The description is complete enough for a low-complexity tool. It covers all three parameters, explains the identifier requirement, and describes the output despite the presence of an output schema. No critical usage context is missing.

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

Parameters5/5

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

The input schema provides no descriptions for the parameters, but the description compensates fully by explaining the accepted formats for doi, arxiv_id, and inspire_id, including concrete examples and the requirement to provide at least one identifier.

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?

The description clearly states that the tool retrieves figures for a specific paper and lists the returned data (title, INSPIRE URL, figures with captions/descriptions/download URLs). This is specific enough to distinguish it from sibling tools like get_paper_details or search_papers.

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 gives good input guidance by explaining identifier formats and requiring at least one identifier, but it does not explicitly say when to prefer this tool over alternatives or when not to use it. The usage is implied rather than directly contrasted with sibling tools.

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

get_referencesGet ReferencesA
Read-onlyIdempotent

Generate a formatted reference list for a paper.

Args: inspire_id: InspireHEP record ID (numeric). format: Output format — "bibtex", "json", "latex-us", or "latex-eu".

Returns the reference list in the requested format along with total reference count and paper title.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNobibtex
inspire_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

The readOnlyHint and idempotentHint annotations cover side effects, and the description adds what is returned (reference list, total count, paper title). It does not mention error behavior, but that is not required given annotations.

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?

The description is compact and front-loaded with the core purpose in the first sentence. The parameter explanations and return summary add necessary detail without padding.

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?

For a two-parameter read-only tool, the description covers inputs and return shape, and an output schema exists. It could slightly clarify how get_references differs from the sibling get_bibtex, but overall it is sufficiently complete.

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

Parameters5/5

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

Although schema descriptions are absent, the description fully explains inspire_id as a numeric InspireHEP record ID and format with all allowed output values. This provides more meaning than the bare schema.

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 action: generate a formatted reference list for a paper. It is distinct enough from siblings like get_paper_details and get_bibtex, although it does not explicitly say it returns the works cited by the paper.

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 implies when to use the tool based on the need for a paper's reference list, but it does not explicitly compare or exclude sibling tools such as get_bibtex. No explicit when-to-use/when-not-to-use guidance is provided.

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

pingPingA
Read-onlyIdempotent

Check that the InspireHEP MCP server is running.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

The readOnlyHint and idempotentHint annotations already establish that the tool is safe and side-effect-free. The description adds the behavior of checking server status but does not elaborate on the response format or potential errors. Since the annotations cover the primary behavioral transparency needs, a score of 3 is appropriate.

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?

The description is a single, concise sentence with no redundant words. It front-loads the action verb 'Check' and immediately names the resource, making it maximally efficient for an agent to parse.

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 the description need not detail return values. The description provides enough context (server readiness) for an agent to know the purpose and likely outcome. It is slightly incomplete in not mentioning the exact success/failure signal, but for a ping, the common convention suffices.

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?

There are no parameters, so schema coverage is trivially complete. The description adds no parameter-specific information because none exist. The baseline of 3 applies as there is nothing to clarify 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?

The description states a specific verb 'Check' and a specific resource 'InspireHEP MCP server', making its purpose unmistakable. It clearly stands apart from sibling tools that retrieve papers, authors, or citations, so an agent can easily select it for server health verification.

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?

The description implies use as a preliminary health check before calling data-fetching tools, and its contrast with siblings (all data retrieval) reinforces this. While not explicitly stating 'use this before other calls', the intent is clear from the verb 'Check' and the noun 'server running'.

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

search_by_collaborationSearch by CollaborationA
Read-onlyIdempotent

Find publications from a specific experimental collaboration.

Handles common name variations (e.g. "lhcb" → "LHCb").

Args: collaboration_name: Collaboration name (e.g. "ATLAS", "CMS", "LHCb", "Belle-II"). sort: Sort order — "mostrecent" or "mostcited". size: Number of results to return (1–100, default 20). year: Optional year filter (e.g. 2024).

Returns publication list, year distribution, total citations, and top-cited papers from the returned set.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo
sortNomostrecent
yearNo
collaboration_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

The readOnlyHint and idempotentHint already cover safety characteristics, and the description goes beyond by noting normalization behavior and the returned set (publication list, year distribution, total citations, top-cited papers). This gives the agent a good sense of what to expect without needing to infer from schema alone.

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?

The description is compact and front-loaded with the core purpose. The parameter list is concise, each line adding meaningful detail without unnecessary verbosity or restating obvious type information already in the schema.

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?

The description covers the primary input parameters and the expected return contents, which is sufficient for a read-only search tool. It does not mention error cases or pagination, but given the output schema is present and the operation is straightforward, this is a minor gap.

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

Parameters5/5

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

Since the schema has no parameter descriptions, the description compensates thoroughly by documenting all four parameters. It adds concrete examples for collaboration_name, valid sort values, the size range (1–100), and the optional nature of year, providing meaning well beyond the bare schema.

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?

The description clearly states 'Find publications from a specific experimental collaboration', identifying both the action and the resource scope. It does not explicitly name a sibling tool to contrast with, but the collaboration-specific scope distinguishes it from general search or author-based tools.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives like search_papers or get_author_papers. The normalization example ('lhcb' → 'LHCb') hints at one use case, but there is no clear when-to-use/when-not-to-use direction.

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

search_papersSearch PapersA
Read-onlyIdempotent

Search InspireHEP for papers matching a query.

Supports free-text and field-specific queries such as:

  • "dark matter direct detection"

  • "author:ellis title:higgs"

  • "collaboration:ATLAS supersymmetry"

  • "find a weinberg and t electroweak"

Args: query: Search query string. sort: Sort order — "bestmatch", "mostrecent", or "mostcited". size: Number of results to return (1-100, default 10).

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNo
sortNobestmatch
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

The annotations already declare readOnlyHint and idempotentHint, so the description does not need to restate those. The description adds no further behavioral details beyond the act of searching, which is consistent with the annotations. No contradictions exist.

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?

The description is concise and well structured: a clear opening sentence, illustrative query examples, and a straightforward argument list. It avoids unnecessary detail and stays focused on actionable information.

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?

The description provides all necessary information for calling the tool: query syntax, sort options, size limits, and defaults. Since an output schema is present, return-value details are not required. Minor omissions such as error behavior or empty-result handling are not significant for this simple search tool.

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

Parameters5/5

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

The input schema provides no descriptions, but the tool description fully compensates by explaining query, sort, and size, including allowed sort values, the size range, and defaults. The query examples additionally clarify expected syntax.

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?

The description clearly states the tool's function: 'Search InspireHEP for papers matching a query.' It provides concrete query examples and distinguishes this general search tool from more specific sibling tools like get_paper_details or get_author_papers.

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?

The description gives useful context by showing supported free-text and field-specific query formats, making it clear when this tool is appropriate. It does not explicitly contrast it with search_by_collaboration or other sibling tools, but the examples and general-purpose framing provide sufficient guidance.

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. 9 tool updatesv0.3.0
    • Changedget_author_papers4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"get_author_papersOutput"New value: +"get_author_papersDictOutput"
    • Changedget_bibtex4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"get_bibtexOutput"New value: +"get_bibtexDictOutput"
    • Changedget_citations4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"get_citationsOutput"New value: +"get_citationsDictOutput"
    • Changedget_paper_details4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"get_paper_detailsOutput"New value: +"get_paper_detailsDictOutput"
    • Changedget_paper_figures4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"get_paper_figuresOutput"New value: +"get_paper_figuresDictOutput"
    • Changedget_references4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"get_referencesOutput"New value: +"get_referencesDictOutput"
    • Changedsearch_by_collaboration4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"search_by_collaborationOutput"New value: +"search_by_collaborationDictOutput"
    • Changedsearch_papers4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"search_papersOutput"New value: +"search_papersDictOutput"
    • Removedserver_stats
  2. 10 tool updatesv0.1.4
    • First observedget_author_papers
    • First observedget_bibtex
    • First observedget_citations
    • First observedget_paper_details
    • First observedget_paper_figures
    • First observedget_references
    • First observedping
    • First observedsearch_by_collaboration
    • First observedsearch_papers
    • First observedserver_stats

TDQS

A4.2/5.0

Scored across 9 tools

Disambiguation4/5

Most tools are clearly distinct, targeting specific resources like papers, authors, figures, or citations. However, search_papers and search_by_collaboration both return publication lists and could be confused, though their scopes are described clearly enough to guide an agent.

Naming Consistency4/5

The majority of tools follow a consistent get_/search_ prefix pattern. Minor deviations include the standalone 'ping' and the prepositional 'search_by_collaboration', which break the otherwise uniform verb_noun convention without causing confusion.

Tool Count5/5

With 9 tools, the server is well-scoped for a literature database API. Each tool serves a meaningful purpose—searching, retrieving metadata, figures, citations, references, and BibTeX—without redundant bloat or excessive granularity.

Completeness5/5

The tool surface covers the core workflows for interacting with InspireHEP: general search, collaboration-filtered search, paper details, figures, author publication history, citation graphs, references, and BibTeX export. No significant gaps are apparent for a read-only literature search service.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A Python-based MCP server that enables searching for high-energy physics literature on INSPIRE-HEP by title, author, or full text. It provides optimized search results including citations, abstracts, and arXiv links while allowing filters for publication date and collaboration size.
    3
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server providing tools for high-energy physics: literature search (INSPIRE-HEP, arXiv), data access (HEPData), and statistical analysis (pyhf likelihoods) for reinterpreting LHC searches.
    10
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    Unified MCP server for scientific literature search and extraction, integrating databases like Scopus, OpenAlex, Semantic Scholar, and Unpaywall to enable AI agents to discover papers, track citations, and analyze content.
    27
    MIT