Skip to main content
Glama

Server Details

Search arXiv, fetch paper metadata, and read full-text content.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/arxiv-mcp-server
GitHub Stars
4
Server Listing
arxiv-mcp-server

Available Tools

4 tools
arxiv_get_metadataArxiv Get MetadataA
Read-only
Inspect

Get full metadata for one or more arXiv papers by ID. Use when you have known IDs from citations, prior search results, or memory.

ParametersJSON Schema
NameRequiredDescriptionDefault
paper_idsYesarXiv paper ID or array of up to 10 IDs. Format: "2401.12345" or "2401.12345v2" (with version). Also accepts legacy IDs like "hep-th/9901001".

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
papersNoPapers found. May be fewer than requested if some IDs are invalid.
not_foundNoPer-input explanations for inputs that could not be returned. Absent when nothing failed.
totalSucceededNoNumber of successful items in 'papers'

TDQS

A4/5.0
Behavior3/5

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

The annotation readOnlyHint=true already signals that the operation is read-only, so the description doesn't need to repeat safety. The description adds context about the input (known IDs) but doesn't disclose any additional behavioral traits, such as whether the tool returns partial results for invalid IDs, rate limiting, or error handling behavior. Given the annotation coverage, this is adequate but not rich.

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 two sentences with no waste. The primary purpose is front-loaded, and the usage guidance is compact and specific. Every sentence earns its place.

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 tool is simple (1 parameter, no nested objects), and it has an output schema that defines the return structure. The description covers the key input context (known IDs) and the output is handled by the schema. An agent has enough to call the tool correctly. Missing minor details like error cases, but these are not critical for simple tools with annotations.

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?

The schema covers 100% of parameter descriptions, including format examples and array constraints. The description itself does not add new semantic information beyond what's in the schema. Since the schema is exhaustive, the baseline score of 3 is appropriate.

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 verb ('Get') and resource ('full metadata for one or more arXiv papers by ID'). It distinguishes itself from sibling tools like arxiv_search (which finds papers) and arxiv_read_paper (which reads content) by focusing on metadata retrieval. The purpose is unambiguous and specific.

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 usage context: 'Use when you have known IDs from citations, prior search results, or memory.' This tells the agent when to use this tool versus searching. However, it does not explicitly mention when NOT to use it or mention alternative tools (like arxiv_search) by name, which would help further differentiate.

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

arxiv_list_categoriesArxiv List CategoriesA
Read-only
Inspect

List arXiv category codes and names. Useful for discovering valid category filters for arxiv_search. Lists subject classes only; arxiv_search also accepts a bare archive code (the part before the dot, e.g. "astro-ph" or "cs") to search a whole archive at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNoFilter by top-level group (e.g., "cs", "math", "physics"). Returns all categories if omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when the group filter returns no categories.
categoriesNoarXiv categories matching the filter.
totalCountNoTotal number of categories returned.

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses a meaningful behavioral constraint: it lists subject classes only, not full archive codes, and clarifies that arxiv_search accepts bare archive codes. This helps an agent understand the tool's output scope without needing to infer it.

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?

Two sentences with no filler. The core purpose is front-loaded, and the second sentence earns its place by clarifying the relationship between this tool and arxiv_search's archive-code behavior.

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?

For a single-optional-parameter catalog tool with full schema coverage, an output schema, and a readOnly annotation, the description is complete. It explains what is returned, why the tool is useful, and how it relates to the main sibling tool.

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

Parameters3/5

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

Schema description coverage is 100%, with the 'group' parameter fully documented including enum values and the default behavior when omitted. The description adds no parameter-level meaning, which is acceptable given the schema already carries the semantic weight.

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 begins with a specific verb and resource: 'List arXiv category codes and names.' It also explicitly differentiates the tool from arxiv_search by noting this lists subject classes only, giving an agent a clear basis to select it over siblings.

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 a clear use case ('discovering valid category filters for arxiv_search') and explains a relevant boundary: this tool lists subject classes only, while arxiv_search also accepts bare archive codes. It does not explicitly state 'do not use this when...' for other siblings, but the context is adequate.

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

arxiv_read_paperArxiv Read PaperA
Read-only
Inspect

Fetch the full text of an arXiv paper. Tries arxiv.org/html first, falls back to ar5iv.labs.arxiv.org, and falls back again to text extracted from the PDF when neither has an HTML render — check the source field to know which one answered. Page through long papers with start and max_characters, or pass max_characters null to get the entire body in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
startNoCharacter offset into the cleaned body to begin reading from. Defaults to 0. Use with max_characters to page through long papers — e.g., start=100000 with max_characters=100000 returns chars 100,000–199,999. The total length is reported as body_characters in the response.
paper_idYesarXiv paper ID (e.g., "2401.12345" or "2401.12345v2").
max_charactersNoMaximum characters of paper body to return, counted after boilerplate stripping. Defaults to 100,000; pass null to return the entire body in one call. Whole-paper reads can exceed a client tool-result size cap — math-heavy bodies run 300KB-1MB+ — so prefer the default plus start-based paging unless the full text is needed. When truncated, a notice and the total character count are included.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
startNoCharacter offset of the first character in content within the cleaned body.
titleNoPaper title (from metadata, not parsed from HTML).
sourceNoWhich upstream artifact the body was read from. arxiv_html and ar5iv are HTML renders; pdf_text is text extracted from the PDF, where prose is reliable but math, tables, and heading structure are flattened.
contentNoPaper body for the requested slice — cleaned HTML when source is arxiv_html or ar5iv, plain text when source is pdf_text. Empty when start is past body_characters.
pdf_urlNoDirect PDF download URL.
paper_idNoarXiv paper ID.
truncatedNoTrue when more body content exists past this slice (start + content.length < body_characters).
abstract_urlNoarXiv abstract page URL for attribution.
body_charactersNoCharacter count of the full cleaned body. Use with start and max_characters to page. Typically 3-4× smaller than total_characters for math-heavy HTML papers.
total_charactersNoCharacter count of the body before cleaning — the unprocessed HTML body for arxiv_html and ar5iv, and equal to body_characters for pdf_text, which needs no cleaning.

TDQS

A4.5/5.0
Behavior5/5

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

The readOnlyHint annotation already marks the operation as read-only; the description adds material context: the multi-source fallback order, the source field to identify which source answered, and the paging/truncation behavior. These details go well beyond what the annotation provides.

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

Conciseness5/5

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

Three sentences, front-loaded with the core purpose, then fallback behavior, then paging. Every sentence earns its place, and there is no filler or repetition.

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

Completeness5/5

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

With an output schema present and a readOnlyHint annotation, the description covers all essential behaviors: fallback sources, source field, and paging vs. whole-body options. Remaining details like parameter bounds are in the schema, so nothing critical is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description restates the paging semantics and the null option, but adds little beyond what the schema's start and max_characters descriptions already say.

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 opens with 'Fetch the full text of an arXiv paper,' naming a specific verb and resource. It clearly distinguishes itself from siblings by focusing on full-text retrieval with a concrete fallback chain, so an agent can tell it apart from search or metadata tools.

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?

It clearly frames its role—full-text fetching—and gives concrete guidance on paging with start and max_characters, and on requesting the entire body via max_characters=null. It does not explicitly contrast with sibling tools, but the purpose statement plus sibling names make the context clear enough.

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. Dates show when Glama detected each change.

  1. 4 tool updates
    • Changedarxiv_get_metadata6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "papers",
        +      "totalSucceeded"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_match`: None of the requested IDs returned data from arXiv. `version_unavailable`: Every requested ID pinned a version the local mirror does not hold, and live arXiv fallback is disabled. `rate_limited`: arXiv has throttled requests (HTTP 429 or \"Rate exceeded.\" body). `invalid_request`: arXiv rejected the request (HTTP 4xx other than 429), e.g. malformed ID syntax. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_match",
        +            "version_unavailable",
        +            "rate_limited",
        +            "invalid_request"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "papers",
        -  "totalSucceeded"
        -]
    • Changedarxiv_list_categories6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "categories",
        +      "totalCount"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode.",
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "categories",
        -  "totalCount"
        -]
    • Changedarxiv_read_paper6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "paper_id",
        +      "title",
        +      "content",
        +      "source",
        +      "truncated",
        +      "start",
        +      "total_characters",
        +      "body_characters",
        +      "pdf_url",
        +      "abstract_url"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `no_match`: Paper ID is not present in the arXiv index. `content_unavailable`: Paper exists but neither arxiv.org/html nor ar5iv has an HTML rendering and arXiv served no PDF either. `pdf_extraction_failed`: Paper has no HTML rendering and its PDF carries no text layer — an image-only or scanned submission. `version_unavailable`: A version-pinned paper_id was requested, arXiv is unreachable, and the local mirror holds only a different version — per-version reads require the live API. `rate_limited`: arXiv has throttled requests (HTTP 429 or \"Rate exceeded.\" body). `invalid_request`: arXiv rejected the metadata lookup (HTTP 4xx other than 429), e.g. malformed ID syntax. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "no_match",
        +            "content_unavailable",
        +            "pdf_extraction_failed",
        +            "version_unavailable",
        +            "rate_limited",
        +            "invalid_request"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "paper_id",
        -  "title",
        -  "content",
        -  "source",
        -  "truncated",
        -  "start",
        -  "total_characters",
        -  "body_characters",
        -  "pdf_url",
        -  "abstract_url"
        -]
    • Changedarxiv_search6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "papers",
        +      "effectiveQuery",
        +      "totalFound",
        +      "pageStart"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "additionalProperties": {},
        +  "description": "Present when the call failed. Absent on success.",
        +  "properties": {
        +    "code": {
        +      "description": "JSON-RPC error code for this failure.",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "data": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "reason": {
        +          "description": "Machine-readable failure mode. Declared by this tool: `unknown_category`: Provided category code is not part of the arXiv taxonomy. `rate_limited`: arXiv has throttled requests (HTTP 429 or \"Rate exceeded.\" body). `invalid_request`: arXiv rejected the request (HTTP 4xx other than 429), typically malformed query syntax. `unsupported_query_syntax`: Query translates to a mirror FTS5 expression the search engine cannot parse, typically two operands juxtaposed across a parenthesized group without an explicit operator. `invalid_date_range`: submitted_from or submitted_to is not a real UTC calendar date, or the window starts after it ends. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "unknown_category",
        +            "rate_limited",
        +            "invalid_request",
        +            "unsupported_query_syntax",
        +            "invalid_date_range"
        +          ],
        +          "type": "string"
        +        },
        +        "recovery": {
        +          "additionalProperties": {},
        +          "description": "Actionable next step for the caller.",
        +          "properties": {
        +            "hint": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "hint"
        +          ],
        +          "type": "object"
        +        },
        +        "retryable": {
        +          "description": "Whether retrying may succeed.",
        +          "type": "boolean"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "message": {
        +      "description": "Human-readable description of what went wrong.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "code",
        +    "message"
        +  ],
        +  "type": "object"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "papers",
        -  "effectiveQuery",
        -  "totalFound",
        -  "pageStart"
        -]
  2. 2 tool updates
    • Changedarxiv_read_paper10 fields changed
      • addedInput schema / properties / max_characters / anyOf
        Added value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": 1,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / max_characters / description
        Previous value: -"Maximum characters of paper body content to return. Defaults to 100,000. HTML head/boilerplate is stripped before counting. When truncated, a notice and total character count are included."New value: +"Maximum characters of paper body to return, counted after boilerplate stripping. Defaults to 100,000; pass null to return the entire body in one call. Whole-paper reads can exceed a client tool-result size cap — math-heavy bodies run 300KB-1MB+ — so prefer the default plus start-based paging unless the full text is needed. When truncated, a notice and the total character count are included."
      • removedInput schema / properties / max_characters / maximum
        Removed value: -9007199254740991
      • removedInput schema / properties / max_characters / minimum
        Removed value: -1
      • removedInput schema / properties / max_characters / type
        Removed value: -"integer"
      • changedOutput schema / properties / body_characters / description
        Previous value: -"Character count of the full cleaned body HTML. Use with start and max_characters to page. Typically 3-4× smaller than total_characters for math-heavy papers."New value: +"Character count of the full cleaned body. Use with start and max_characters to page. Typically 3-4× smaller than total_characters for math-heavy HTML papers."
      • changedOutput schema / properties / content / description
        Previous value: -"Cleaned paper body HTML for the requested slice. Empty when start is past body_characters."New value: +"Paper body for the requested slice — cleaned HTML when source is arxiv_html or ar5iv, plain text when source is pdf_text. Empty when start is past body_characters."
      • changedOutput schema / properties / source / description
        Previous value: -"Which HTML source the content was fetched from."New value: +"Which upstream artifact the body was read from. arxiv_html and ar5iv are HTML renders; pdf_text is text extracted from the PDF, where prose is reliable but math, tables, and heading structure are flattened."
      • changedOutput schema / properties / source / enum
        Previous value: -[
        -  "arxiv_html",
        -  "ar5iv"
        -]New value: +[
        +  "arxiv_html",
        +  "ar5iv",
        +  "pdf_text"
        +]
      • changedOutput schema / properties / total_characters / description
        Previous value: -"Character count of the original unprocessed HTML body."New value: +"Character count of the body before cleaning — the unprocessed HTML body for arxiv_html and ar5iv, and equal to body_characters for pdf_text, which needs no cleaning."
    • Changedarxiv_search6 fields changed
      • changedInput schema / properties / category / description
        Previous value: -"Filter results to a specific arXiv category (e.g., \"cs.CL\", \"math.AG\"). Use arxiv_list_categories to discover valid codes."New value: +"Restrict results to an arXiv category. A leaf code (\"cs.CL\", \"math.AG\") matches exactly. A bare archive code (\"astro-ph\", \"cond-mat\", \"cs\", \"math\") matches the whole archive — its subject classes plus the legacy flat papers filed before the archive was subdivided. Note \"physics\" is the general-physics archive (physics.*), not the wider physics group: astro-ph, cond-mat, hep-*, quant-ph and the rest are separate archive codes. Use arxiv_list_categories to discover subject classes."
      • changedInput schema / properties / query / description
        Previous value: -"Search query. Field prefixes: ti: (title), au: (author — token-based; quote multi-token names like au:\"hinton g\" or pair with a topical clause to disambiguate common surnames), abs: (abstract), cat: (category — exact code match, not fuzzy), co: (comment), jr: (journal ref), all: (all fields). Boolean operators: AND, OR, ANDNOT. Examples: \"au:bengio AND ti:attention\", \"all:transformer AND cat:cs.CL\"."New value: +"Search query. Field prefixes: ti: (title), au: (author — token-based; quote multi-token names like au:\"hinton g\" or pair with a topical clause to disambiguate common surnames), abs: (abstract), cat: (category — a leaf code matches exactly, a bare archive code such as cat:astro-ph matches its whole subtree), co: (comment), jr: (journal ref), all: (all fields). Boolean operators: AND, OR, ANDNOT. Examples: \"au:bengio AND ti:attention\", \"all:transformer AND cat:cs.CL\"."
      • changedInput schema / properties / start / description
        Previous value: -"Pagination offset (0-10000). Use with max_results to page through results. E.g., start=10 with max_results=10 returns results 11-20."New value: +"Pagination offset (0-10000). Use with max_results to page through results. E.g., start=10 with max_results=10 returns results 11-20. Matches beyond offset 10000 + max_results are unreachable by paging — carve the search into submitted_from/submitted_to windows and page within each."
      • addedInput schema / properties / submitted_from
        Added value: +{
        +  "description": "Earliest submission date to include, inclusive, as a UTC YYYY-MM-DD date. Omit for no lower bound.",
        +  "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
        +  "type": "string"
        +}
      • addedInput schema / properties / submitted_to
        Added value: +{
        +  "description": "Latest submission date to include, inclusive, as a UTC YYYY-MM-DD date. Omit for no upper bound. Both bounds are inclusive, so consecutive windows (\"2024-01-01\"..\"2024-01-15\" then \"2024-01-16\"..\"2024-01-31\") cover the matches with no gap; a paper submitted at exactly the midnight seam between two windows appears in both, so de-duplicate collected results by paper id. That is the way to reach matches past the start ceiling: split the date range, then page within each window.",
        +  "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
        +  "type": "string"
        +}
      • changedOutput schema / properties / effectiveQuery / description
        Previous value: -"The query as sent to arXiv after input normalization."New value: +"The query as actually searched, carrying every filter applied — the category subtree and submitted-date window folded into arXiv syntax alongside the supplied terms. Replaying it as `query` with no other filters reproduces this exact result set."
  3. 1 tool update
    • Changedarxiv_get_metadata2 fields changed
      • changedOutput schema / properties / not_found / items / description
        Previous value: -"A requested ID that arXiv did not return."New value: +"A requested ID that could not be returned, with the reason it was missed."
      • changedOutput schema / properties / not_found / items / properties / reason / enum
        Previous value: -[
        -  "not_in_arxiv"
        -]New value: +[
        +  "not_in_arxiv",
        +  "version_not_in_mirror"
        +]
  4. 1 tool update
    • Changedarxiv_search3 fields changed
      • addedOutput schema / properties / cap
        Added value: +{
        +  "description": "The max_results limit applied to this page.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / shown
        Added value: +{
        +  "description": "Papers returned on this page.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when more matching papers exist beyond this page (totalFound > start + shown).",
        +  "type": "boolean"
        +}
  5. 2 tool updates
    • Changedarxiv_list_categories3 fields changed
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Guidance when the group filter returns no categories.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total number of categories returned.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "categories"
        -]New value: +[
        +  "categories",
        +  "totalCount"
        +]
    • Changedarxiv_search7 fields changed
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "The query as sent to arXiv after input normalization.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery guidance when results are empty or paging overshot. Absent on successful pages.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / pageStart
        Added value: +{
        +  "description": "Pagination offset of this result page.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / start
        Removed value: -{
        -  "description": "Pagination offset of this result set.",
        -  "type": "number"
        -}
      • addedOutput schema / properties / totalFound
        Added value: +{
        +  "description": "Total matching papers reported by arXiv (before pagination).",
        +  "type": "number"
        +}
      • removedOutput schema / properties / total_results
        Removed value: -{
        -  "description": "Total matching papers (may exceed returned count due to pagination).",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "total_results",
        -  "start",
        -  "papers"
        -]New value: +[
        +  "papers",
        +  "effectiveQuery",
        +  "totalFound",
        +  "pageStart"
        +]
  6. 1 tool update
    • Changedarxiv_search1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Search query. Supports field prefixes: ti: (title), au: (author), abs: (abstract), cat: (category), co: (comment), jr: (journal ref), all: (all fields). Boolean operators: AND, OR, ANDNOT. Examples: \"au:bengio AND ti:attention\", \"all:transformer AND cat:cs.CL\"."New value: +"Search query. Field prefixes: ti: (title), au: (author — token-based; quote multi-token names like au:\"hinton g\" or pair with a topical clause to disambiguate common surnames), abs: (abstract), cat: (category — exact code match, not fuzzy), co: (comment), jr: (journal ref), all: (all fields). Boolean operators: AND, OR, ANDNOT. Examples: \"au:bengio AND ti:attention\", \"all:transformer AND cat:cs.CL\"."

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables searching and retrieving academic papers from arXiv by various criteria including title, author, and category, with support for extracting full text content from PDFs.
    4
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to search arXiv papers, retrieve metadata, browse categories, and read paper text.
    4
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables searching academic papers on arXiv and retrieving detailed information such as title, authors, summary, and PDF link.
    1
    6
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables searching arXiv papers and retrieving full paper content as Markdown, with smart sorting, category filtering, and pagination.
    10
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4/5.0
Disambiguation5/5

Each tool targets a distinct operation: searching, retrieving metadata by ID, reading full text, and listing categories. There is no overlap between these actions, and even search vs. get_metadata is clearly differentiated by known vs. unknown IDs.

Naming Consistency5/5

All tools follow a consistent 'arxiv_' prefix with verb-first names in snake_case: arxiv_get_metadata, arxiv_list_categories, arxiv_read_paper, arxiv_search. The pattern is uniform and predictable.

Tool Count5/5

Four tools is a compact set that fully covers the core arXiv workflows without excess. Each tool earns its place, and the count is well within the ideal 3–15 range.

Completeness5/5

The tool surface covers the essential lifecycle for arXiv: discovery (search), metadata retrieval (get_metadata), content access (read_paper), and category discovery (list_categories). Since arXiv is a read-only service, no update/delete operations are needed, making the set complete.