Skip to main content
Glama

Arxiv Get Metadata

arxiv_get_metadata
Read-only

Get full metadata for one or more arXiv papers by ID. Use when you have known IDs from citations, prior search results, or memory. Looks up 10 IDs per call; any further IDs come back in remaining_ids for the next call.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
paper_idsYesarXiv paper IDs, up to 100. The first 10 well-formed IDs are looked up; the rest come back in remaining_ids to pass to the next call. Accepted forms: "2401.12345", "2401.12345v2" (a pinned version), or a pre-2007 ID like "hep-th/9901001" (archive spelled as arXiv issued it), each optionally prefixed "arXiv:", or an arxiv.org abs, pdf, or html URL, with or without https:// or a ?query or #fragment. An ID in any other form is reported in not_found with reason invalid_id and is not looked up.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
papersNoPapers found, in request order. Fewer than requested when an ID is malformed, absent from arXiv, a version arXiv will not serve, one whose live lookup failed behind the local mirror, or past the first 10 well-formed IDs.
not_foundNoPer-input explanations for inputs that could not be returned. Absent when nothing failed.
remaining_idsNoWell-formed IDs past the first 10, in canonical form and request order, that this call did not look up. Pass them as paper_ids in the next call. Absent when every well-formed ID was looked up.
totalSucceededNoNumber of successful items in 'papers'

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_id`: None of the requested IDs is an arXiv identifier in an accepted form. `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). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_id`: None of the requested IDs is an arXiv identifier in an accepted form. `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. `version_not_served`: Every requested ID pinned a superseded version of a pre-2007 paper that arXiv's API answers HTTP 500 for. The version exists, but its metadata cannot be returned. `rate_limited`: arXiv has throttled requests (HTTP 429 or \"Rate exceeded.\" body). `invalid_request`: arXiv rejected the request (HTTP 4xx other than 429). Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_id",
      -  "no_match",
      -  "version_unavailable",
      -  "rate_limited",
      -  "invalid_request"
      -]New value: +[
      +  "invalid_id",
      +  "no_match",
      +  "version_unavailable",
      +  "version_not_served",
      +  "rate_limited",
      +  "invalid_request"
      +]
    • changedOutput schema / properties / not_found / items / properties / reason / enum
      Previous value: -[
      -  "not_in_arxiv",
      -  "version_not_in_mirror",
      -  "invalid_id"
      -]New value: +[
      +  "not_in_arxiv",
      +  "version_not_in_mirror",
      +  "version_not_served",
      +  "live_lookup_failed",
      +  "invalid_id"
      +]
    • changedOutput schema / properties / papers / description
      Previous value: -"Papers found, in request order. Fewer than requested when an ID is malformed, absent from arXiv, or past the first 10 well-formed IDs."New value: +"Papers found, in request order. Fewer than requested when an ID is malformed, absent from arXiv, a version arXiv will not serve, one whose live lookup failed behind the local mirror, or past the first 10 well-formed IDs."
  2. Changed12 schema fields changed
    • removedInput schema / properties / paper_ids / anyOf
      Removed value: -[
      -  {
      -    "description": "Single arXiv paper ID (e.g., \"2401.12345\" or \"2401.12345v2\").",
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  {
      -    "description": "Array of up to 10 arXiv paper IDs for batch lookup.",
      -    "items": {
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "maxItems": 10,
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]
    • changedInput schema / properties / paper_ids / description
      Previous value: -"arXiv 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\"."New value: +"arXiv paper IDs, up to 100. The first 10 well-formed IDs are looked up; the rest come back in remaining_ids to pass to the next call. Accepted forms: \"2401.12345\", \"2401.12345v2\" (a pinned version), or a pre-2007 ID like \"hep-th/9901001\" (archive spelled as arXiv issued it), each optionally prefixed \"arXiv:\", or an arxiv.org abs, pdf, or html URL, with or without https:// or a ?query or #fragment. An ID in any other form is reported in not_found with reason invalid_id and is not looked up."
    • addedInput schema / properties / paper_ids / items
      Added value: +{
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / paper_ids / maxItems
      Added value: +100
    • addedInput schema / properties / paper_ids / minItems
      Added value: +1
    • addedInput schema / properties / paper_ids / type
      Added value: +"array"
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"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."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_id`: None of the requested IDs is an arXiv identifier in an accepted form. `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). Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "no_match",
      -  "version_unavailable",
      -  "rate_limited",
      -  "invalid_request"
      -]New value: +[
      +  "invalid_id",
      +  "no_match",
      +  "version_unavailable",
      +  "rate_limited",
      +  "invalid_request"
      +]
    • changedOutput schema / properties / not_found / items / properties / id / description
      Previous value: -"arXiv ID that returned no data."New value: +"Requested ID that returned no data — in canonical form when it was looked up, as sent when it is not an arXiv ID."
    • changedOutput schema / properties / not_found / items / properties / reason / enum
      Previous value: -[
      -  "not_in_arxiv",
      -  "version_not_in_mirror"
      -]New value: +[
      +  "not_in_arxiv",
      +  "version_not_in_mirror",
      +  "invalid_id"
      +]
    • changedOutput schema / properties / papers / description
      Previous value: -"Papers found. May be fewer than requested if some IDs are invalid."New value: +"Papers found, in request order. Fewer than requested when an ID is malformed, absent from arXiv, or past the first 10 well-formed IDs."
    • addedOutput schema / properties / remaining_ids
      Added value: +{
      +  "description": "Well-formed IDs past the first 10, in canonical form and request order, that this call did not look up. Pass them as paper_ids in the next call. Absent when every well-formed ID was looked up.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  3. Changed6 schema 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"
      -]
  4. Changed2 schema 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"
      +]
  5. Changed8 schema fields changed
    • changedOutput schema / properties / not_found / description
      Previous value: -"Paper IDs that returned no results."New value: +"Per-input explanations for inputs that could not be returned. Absent when nothing failed."
    • addedOutput schema / properties / not_found / items / additionalProperties
      Added value: +false
    • addedOutput schema / properties / not_found / items / description
      Added value: +"A requested ID that arXiv did not return."
    • addedOutput schema / properties / not_found / items / properties
      Added value: +{
      +  "detail": {
      +    "description": "Additional human-readable context, when available",
      +    "type": "string"
      +  },
      +  "id": {
      +    "description": "arXiv ID that returned no data.",
      +    "type": "string"
      +  },
      +  "reason": {
      +    "description": "Why the paper ID could not be returned.",
      +    "enum": [
      +      "not_in_arxiv"
      +    ],
      +    "type": "string"
      +  }
      +}
    • addedOutput schema / properties / not_found / items / required
      Added value: +[
      +  "id",
      +  "reason"
      +]
    • changedOutput schema / properties / not_found / items / type
      Previous value: -"string"New value: +"object"
    • addedOutput schema / properties / totalSucceeded
      Added value: +{
      +  "description": "Number of successful items in 'papers'",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "papers"
      -]New value: +[
      +  "papers",
      +  "totalSucceeded"
      +]
  6. Changed2 schema fields changed
    • changedInput schema / properties / paper_ids / anyOf
      Previous value: -[
      -  {
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  {
      -    "items": {
      -      "minLength": 1,
      -      "type": "string"
      -    },
      -    "maxItems": 10,
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "description": "Single arXiv paper ID (e.g., \"2401.12345\" or \"2401.12345v2\").",
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "description": "Array of up to 10 arXiv paper IDs for batch lookup.",
      +    "items": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "maxItems": 10,
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • addedOutput schema / properties / papers / items / description
      Added value: +"arXiv paper metadata — identifier, title, authors, abstract, categories, and links."
  7. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description goes beyond that by disclosing the batch contract: only the first 10 well-formed IDs are resolved and the rest return in remaining_ids, which is genuine operational context an agent needs for multi-call sequencing.

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 short sentences, front-loaded with the purpose before usage and batching detail. No filler or repetition; each sentence carries actionable information.

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-parameter, read-only lookup tool, the description covers purpose, when to use it, and the pagination contract, while annotations cover the safety profile and the output schema covers remaining_ids and not_found. Nothing needed to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so accepted ID forms, the 100-item cap, and invalid_id handling are already fully documented in the schema. The description's batching note restates what the schema already says, adding no new parameter-level meaning. Baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource (get full metadata for arXiv papers by ID) and scopes it to known IDs, which implicitly separates it from arxiv_search_papers. It does not name the sibling tools explicitly, so an agent must infer the boundary rather than being routed directly.

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?

"Use when you have known IDs from citations, prior search results, or memory" gives a clear triggering condition, and it implies you should search when you lack IDs. There is no explicit when-not statement or named alternative, so it falls short of full routing guidance.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.