Skip to main content
Glama

Arxiv Search

arxiv_search
Read-only

Search arXiv papers by query with category and sort filters. Returns paper metadata including title, authors, abstract, categories, and links.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYesSearch 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".
startNoPagination 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.
sort_byNoSort criterion. Use "submitted" for newest papers, "relevance" for best query matches.relevance
categoryNoRestrict 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.
sort_orderNoSort direction. "descending" returns newest/most relevant first.descending
max_resultsNoMaximum results to return (1-50). Default 10. Each result includes title, authors, abstract, and metadata — keep low to limit response size.
submitted_toNoLatest 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.
submitted_fromNoEarliest submission date to include, inclusive, as a UTC YYYY-MM-DD date. Omit for no lower bound.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe max_results limit applied to this page.
errorNoPresent when the call failed. Absent on success.
shownNoPapers returned on this page.
noticeNoRecovery guidance when results are empty or paging overshot. Absent on successful pages.
papersNoMatching papers with full metadata.
pageStartNoPagination offset of this result page.
truncatedNoTrue when more matching papers exist beyond this page (totalFound > start + shown).
totalFoundNoTotal matching papers reported by arXiv (before pagination).
effectiveQueryNoThe 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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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",
      +      "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. Changed6 schema 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. Changed3 schema 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"
      +}
  4. Changed7 schema 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"
      +]
  5. Changed1 schema 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\"."
  6. Changed2 schema fields changed
    • changedInput schema / properties / category / description
      Previous value: -"Filter by arXiv category (e.g., \"cs.CL\", \"math.AG\"). Prepended as \"AND cat:{category}\" to the query. Use arxiv_list_categories to discover valid codes."New value: +"Filter results to a specific arXiv category (e.g., \"cs.CL\", \"math.AG\"). Use arxiv_list_categories to discover valid codes."
    • changedInput schema / properties / max_results / description
      Previous value: -"Maximum results to return (1-50). Default 10. Each result includes title, authors, abstract, and metadata — keep low to manage context budget."New value: +"Maximum results to return (1-50). Default 10. Each result includes title, authors, abstract, and metadata — keep low to limit response size."
  7. Changed7 schema fields changed
    • changedInput schema / properties / max_results / type
      Previous value: -"number"New value: +"integer"
    • addedInput schema / properties / query / maxLength
      Added value: +1000
    • addedInput schema / properties / query / pattern
      Added value: +"^[^\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]*$"
    • changedInput schema / properties / start / description
      Previous value: -"Pagination offset. 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."
    • addedInput schema / properties / start / maximum
      Added value: +10000
    • changedInput schema / properties / start / type
      Previous value: -"number"New value: +"integer"
    • addedOutput schema / properties / papers / items / description
      Added value: +"arXiv paper metadata — identifier, title, authors, abstract, categories, and links."
  8. First observed

TDQS

C2.9/5.0
Behavior2/5

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

The readOnlyHint annotation already signals a safe read operation, and the description adds no behavioral context beyond that—no rate limits, pagination caveats, or side-effect disclosures. The statement about returning metadata is output-focused, not behavioral.

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 two sentences with no filler and front-loads the core action. The second sentence listing return fields is slightly redundant given the output schema, but the overall structure is efficient and scannable.

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

Completeness3/5

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

The tool is complex (8 parameters, query syntax, pagination, date windows), but the schema carries that detail and an output schema exists. The description itself is thin on context like when to choose this tool or how search relates to the sibling tools, so it is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all eight parameters. The description's mention of 'category and sort filters' adds no meaning beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific action ('Search arXiv papers') and resource, with scope ('by query with category and sort filters'). It is clear and distinct from sibling tools like arxiv_read_paper, though it does not explicitly name alternatives or contrast with arxiv_get_metadata.

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 guidance on when to use this tool versus arxiv_get_metadata, arxiv_read_paper, or arxiv_list_categories. There is only an implied use case for searching, with no exclusions or alternative routing.

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.