arxiv-mcp-server
Server Details
Search arXiv, fetch paper metadata, and read full-text content.
- Status
- Healthy
- Uptime
- 99.5% over 64 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/arxiv-mcp-server
- GitHub Stars
- 6
- Server Listing
- arxiv-mcp-server
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: search by query, metadata by known ID, full-text reading, and category listing. The boundary between search and metadata lookup is well clarified by the descriptions, so an agent can easily select the right tool.
All tools follow the same predictable pattern: arxiv_ prefix followed by verb_noun (get_metadata, list_categories, read_paper, search_papers). There are no naming deviations or mixed conventions.
Four tools is a well-scoped set for an arXiv access server, covering search, metadata retrieval, full-text reading, and category discovery without redundancy. Each tool earns its place.
The surface covers the core workflows of discovering, inspecting, and reading arXiv papers. Minor gaps remain, such as exporting citations or downloading PDFs, but these are not essential for most agent tasks and can be worked around.
Available Tools
4 toolsarxiv_get_metadataArxiv Get MetadataARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| paper_ids | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| papers | No | 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. |
| not_found | No | Per-input explanations for inputs that could not be returned. Absent when nothing failed. |
| remaining_ids | No | 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. |
| totalSucceeded | No | Number of successful items in 'papers' |
TDQS
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.
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.
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.
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.
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.
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.
arxiv_list_categoriesArxiv List CategoriesARead-onlyInspect
List arXiv category codes and names. Useful for discovering valid category filters for arxiv_search_papers. Lists subject classes only; arxiv_search_papers also accepts a bare archive code (the part before the dot, e.g. "astro-ph" or "cs") to search a whole archive at once.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Filter by top-level group (e.g., "cs", "math", "physics"). Returns all categories if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when the group filter returns no categories. |
| categories | No | arXiv categories matching the filter. |
| totalCount | No | Total number of categories returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint already declares the safety profile, so the description is not obligated to cover it; instead it adds a real scope constraint ('lists subject classes only') plus the archive-code nuance, which changes how an agent would query. It stops short of describing pagination or result volume.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core purpose, with the search-tool linkage second. The trailing archive-code clarification is useful but slightly dense; nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. For a zero-required-parameter read-only lookup, the description plus annotations plus schema cover everything needed to call it correctly and to know when not to.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single enum-constrained 'group' parameter, so the schema fully documents the input. The description adds nothing about the group filter, which is acceptable at this coverage but means no value beyond structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List arXiv category codes and names'), which is unambiguous and clearly not a paper-search or metadata operation. It also positions itself relative to arxiv_search_papers rather than the other siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the use case (discovering valid category filters for arxiv_search_papers) and adds a when-not nuance: the search tool also accepts a bare archive code, so this lookup is not always required. That is exactly the routing information an agent needs.
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 PaperRead-onlyInspect
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. To read one section, take the outline from the first page (start 0) and pass an entry's start.
| Name | Required | Description | Default |
|---|---|---|---|
| start | No | Character 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 — or pass an outline entry's start to read from that heading. The total length is reported as body_characters in the response. | |
| paper_id | Yes | arXiv paper ID: "2401.12345", "2401.12345v2" (a pinned version), or a pre-2007 ID like "hep-th/9901001" (archive spelled as arXiv issued it), optionally prefixed "arXiv:", or an arxiv.org abs, pdf, or html URL, with or without https:// or a ?query or #fragment. | |
| max_characters | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| start | No | Character offset of the first character in content within the cleaned body. |
| title | No | Paper title (from metadata, not parsed from HTML). |
| source | No | 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. ar5iv keeps one render per paper, so an ar5iv body can be another revision than paper_id (see revision_unconfirmed). |
| content | No | Paper body for the requested slice — the article as cleaned HTML, with relative image, object, and link URLs made absolute (in-page #fragment links stay as written), when source is arxiv_html or ar5iv; plain text when source is pdf_text. Empty when start is past body_characters. |
| outline | No | Section headings of the whole cleaned body in document order, each with the start that reads from it. Returned only when start is 0. Empty for pdf_text, whose text carries no reliable headings. At most 200 entries — see outline_omitted_levels and outline_continues_at. |
| pdf_url | No | Direct PDF download URL. |
| paper_id | No | arXiv paper ID. |
| truncated | No | True when more body content exists past this slice (start + content.length < body_characters). |
| abstract_url | No | arXiv abstract page URL for attribution. |
| body_characters | No | 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. |
| total_characters | No | Character count of the body before cleaning — the article HTML, without the site header and footer, for arxiv_html and ar5iv; equal to body_characters for pdf_text, which needs no cleaning. |
| outline_continues_at | No | Present when the shallowest heading level alone has more than 200 headings, so outline stops at its first 200: the start of the first heading left out. Pass it as start to read on from there. |
| revision_unconfirmed | No | Present, true, when source is ar5iv: ar5iv keeps one render per paper whatever version is asked for, so the body may be another revision than paper_id, while pdf_url is exactly the paper_id revision. Absent for every other source, and for an unversioned read where the arXiv API reported v1 as the only version of the paper. |
| outline_omitted_levels | No | Heading levels left out of outline because the paper has more than 200 headings, deepest first. Present only when levels were left out. |
arxiv_search_papersArxiv Search PapersBRead-onlyInspect
Search arXiv papers by query with category and sort filters. Returns paper metadata including title, authors, abstract, categories, and links.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 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". | |
| start | No | Pagination offset (0-10000). Use with max_results to page through results. E.g., start=10 with max_results=10 returns results 11-20. arXiv serves only the first 10000 results of a query, so a page reaching past result 10000 can come back cut short at it and a start of 10000 can be refused. To reach later matches, carve the search into submitted_from/submitted_to windows and page within each. | |
| sort_by | No | Sort criterion. Use "submitted" for newest papers, "relevance" for best query matches. | relevance |
| category | No | 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. | |
| sort_order | No | Sort direction. "descending" returns newest/most relevant first. | descending |
| max_results | No | Maximum results to return. Default 10. At most 50 are returned per call: a larger value returns the first 50, and when more matches exist the response says how to reach them — the start of the next page, or date windows once paging cannot reach them all. arXiv serves only the first 10000 results of a query, so a page reaching past result 10000 can come back cut short at it, and the response says so. Each result includes title, authors, abstract, and metadata — keep low to limit response size. | |
| submitted_to | No | 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. | |
| submitted_from | No | Earliest submission date to include, inclusive, as a UTC YYYY-MM-DD date. Omit for no lower bound. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The page size applied: max_results, or 50 when max_results asks for more — fewer when the page was cut short at result 10000, the last one arXiv serves. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Papers returned on this page. |
| notice | No | Recovery guidance when results are empty or paging overshot. Absent on successful pages. |
| papers | No | Matching papers with full metadata. |
| pageStart | No | Pagination offset of this result page. |
| truncated | No | True when more matching papers exist beyond this page (totalFound > start + shown). |
| totalFound | No | Total matching papers reported by arXiv (before pagination). |
| effectiveQuery | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the safety profile is already covered. The description adds that results are read-only metadata (title, authors, abstract, categories, links) but omits the operationally important limits documented only in the schema (50 results per call cap, 10000-result ceiling, paging cutoffs), so it adds modest value beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, with no wasted words. It is arguably too terse given the tool's complexity, but nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not enumerate return values, and the input schema exhaustively covers pagination, date windows, and category semantics. The gap is the absence of sibling-routing guidance, which is minor for a straightforward search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the rich field-prefix and date-window semantics is already documented. The description only gestures at 'category and sort filters' and the returned fields, adding essentially nothing beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search arXiv papers') plus the filter dimensions (query, category, sort), which clearly separates it from arxiv_get_metadata, arxiv_read_paper, and arxiv_list_categories. It does not, however, explicitly contrast itself with those siblings, so an agent must infer the distinction from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use or when-not-to-use guidance: it never says to use this tool for discovery and arxiv_get_metadata/arxiv_read_paper for retrieval. The only routing hint ('Use arxiv_list_categories to discover subject classes') lives inside the category parameter schema, not the description.
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.
2 tool updates
- Changed
arxiv_read_paper1 field changed- changed
Output schema / properties / revision_unconfirmed / descriptionPrevious value: -"Present, true, when source is ar5iv: ar5iv keeps one render per paper whatever version is asked for, so the body may be another revision than paper_id, while pdf_url is exactly the paper_id revision. Absent for every other source, and for an unversioned read of a paper whose only version is v1."New value: +"Present, true, when source is ar5iv: ar5iv keeps one render per paper whatever version is asked for, so the body may be another revision than paper_id, while pdf_url is exactly the paper_id revision. Absent for every other source, and for an unversioned read where the arXiv API reported v1 as the only version of the paper."
- Changed
arxiv_search_papers1 field changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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. `start_beyond_result_limit`: start is 10000 or more on a search arXiv answers, past the first 10000 results it serves for any query. Other values are possible when a failure originates below the handler."New value: +"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`: The mirror search engine rejected the FTS5 expression the query translated to. Every query the translator accepts is meant to parse, so this marks a translator defect. `invalid_date_range`: submitted_from or submitted_to is not a real UTC calendar date, or the window starts after it ends. `start_beyond_result_limit`: start is 10000 or more on a search arXiv answers, past the first 10000 results it serves for any query. Other values are possible when a failure originates below the handler."
2 tool updates
- Changed
arxiv_get_metadata4 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious 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" +] - changed
Output schema / properties / not_found / items / properties / reason / enumPrevious 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" +] - changed
Output schema / properties / papers / descriptionPrevious 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."
- Changed
arxiv_read_paper4 fields changed- changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `invalid_id`: paper_id is not an arXiv identifier in an accepted form. `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). Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_id`: paper_id is not an arXiv identifier in an accepted form. `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. `version_not_served`: paper_id pins 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 metadata lookup (HTTP 4xx other than 429). Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "invalid_id", - "no_match", - "content_unavailable", - "pdf_extraction_failed", - "version_unavailable", - "rate_limited", - "invalid_request" -]New value: +[ + "invalid_id", + "no_match", + "content_unavailable", + "pdf_extraction_failed", + "version_unavailable", + "version_not_served", + "rate_limited", + "invalid_request" +] - added
Output schema / properties / revision_unconfirmedAdded value: +{ + "const": true, + "description": "Present, true, when source is ar5iv: ar5iv keeps one render per paper whatever version is asked for, so the body may be another revision than paper_id, while pdf_url is exactly the paper_id revision. Absent for every other source, and for an unversioned read of a paper whose only version is v1.", + "type": "boolean" +} - changed
Output schema / properties / source / descriptionPrevious 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."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. ar5iv keeps one render per paper, so an ar5iv body can be another revision than paper_id (see revision_unconfirmed)."
4 tool updates
- Changed
arxiv_get_metadata12 fields changed- removed
Input schema / properties / paper_ids / anyOfRemoved 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" - } -] - changed
Input schema / properties / paper_ids / descriptionPrevious 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." - added
Input schema / properties / paper_ids / itemsAdded value: +{ + "minLength": 1, + "type": "string" +} - added
Input schema / properties / paper_ids / maxItemsAdded value: +100 - added
Input schema / properties / paper_ids / minItemsAdded value: +1 - added
Input schema / properties / paper_ids / typeAdded value: +"array" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious 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." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "no_match", - "version_unavailable", - "rate_limited", - "invalid_request" -]New value: +[ + "invalid_id", + "no_match", + "version_unavailable", + "rate_limited", + "invalid_request" +] - changed
Output schema / properties / not_found / items / properties / id / descriptionPrevious 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." - changed
Output schema / properties / not_found / items / properties / reason / enumPrevious value: -[ - "not_in_arxiv", - "version_not_in_mirror" -]New value: +[ + "not_in_arxiv", + "version_not_in_mirror", + "invalid_id" +] - changed
Output schema / properties / papers / descriptionPrevious 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." - added
Output schema / properties / remaining_idsAdded 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" +}
- Changed
arxiv_read_paper9 fields changed- changed
Input schema / properties / paper_id / descriptionPrevious value: -"arXiv paper ID (e.g., \"2401.12345\" or \"2401.12345v2\")."New value: +"arXiv paper ID: \"2401.12345\", \"2401.12345v2\" (a pinned version), or a pre-2007 ID like \"hep-th/9901001\" (archive spelled as arXiv issued it), optionally prefixed \"arXiv:\", or an arxiv.org abs, pdf, or html URL, with or without https:// or a ?query or #fragment." - changed
Input schema / properties / start / descriptionPrevious value: -"Character 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."New value: +"Character 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 — or pass an outline entry's start to read from that heading. The total length is reported as body_characters in the response." - changed
Output schema / properties / content / descriptionPrevious 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."New value: +"Paper body for the requested slice — the article as cleaned HTML, with relative image, object, and link URLs made absolute (in-page #fragment links stay as written), when source is arxiv_html or ar5iv; plain text when source is pdf_text. Empty when start is past body_characters." - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"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."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_id`: paper_id is not an arXiv identifier in an accepted form. `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). Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "no_match", - "content_unavailable", - "pdf_extraction_failed", - "version_unavailable", - "rate_limited", - "invalid_request" -]New value: +[ + "invalid_id", + "no_match", + "content_unavailable", + "pdf_extraction_failed", + "version_unavailable", + "rate_limited", + "invalid_request" +] - added
Output schema / properties / outlineAdded value: +{ + "description": "Section headings of the whole cleaned body in document order, each with the start that reads from it. Returned only when start is 0. Empty for pdf_text, whose text carries no reliable headings. At most 200 entries — see outline_omitted_levels and outline_continues_at.", + "items": { + "additionalProperties": false, + "description": "A part, chapter, section, subsection, subsubsection, paragraph, appendix, or bibliography heading.", + "properties": { + "level": { + "description": "Heading depth from its tag number minus one: h2 = 1, h3 = 2, and so on to h6 = 5.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "start": { + "description": "Offset of the heading in the cleaned body. Pass as start to read from it.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "title": { + "description": "Heading text with markup removed, e.g. \"3.1 Encoder and Decoder Stacks\"; cut at 120 characters.", + "type": "string" + } + }, + "required": [ + "level", + "title", + "start" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / outline_continues_atAdded value: +{ + "description": "Present when the shallowest heading level alone has more than 200 headings, so outline stops at its first 200: the start of the first heading left out. Pass it as start to read on from there.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +} - added
Output schema / properties / outline_omitted_levelsAdded value: +{ + "description": "Heading levels left out of outline because the paper has more than 200 headings, deepest first. Present only when levels were left out.", + "items": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "type": "array" +} - changed
Output schema / properties / total_characters / descriptionPrevious 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."New value: +"Character count of the body before cleaning — the article HTML, without the site header and footer, for arxiv_html and ar5iv; equal to body_characters for pdf_text, which needs no cleaning."
- Removed
arxiv_search - Added
arxiv_search_papers
4 tool updates
- Changed
arxiv_get_metadata6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "papers", + "totalSucceeded" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "papers", - "totalSucceeded" -]
- Changed
arxiv_list_categories6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "categories", + "totalCount" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "categories", - "totalCount" -]
- Changed
arxiv_read_paper6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "paper_id", + "title", + "content", + "source", + "truncated", + "start", + "total_characters", + "body_characters", + "pdf_url", + "abstract_url" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "paper_id", - "title", - "content", - "source", - "truncated", - "start", - "total_characters", - "body_characters", - "pdf_url", - "abstract_url" -]
- Changed
arxiv_search6 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / additionalPropertiesAdded value: +false - changed
Output schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Output schema / anyOfAdded value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "papers", + "effectiveQuery", + "totalFound", + "pageStart" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / errorAdded 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" +} - removed
Output schema / requiredRemoved value: -[ - "papers", - "effectiveQuery", - "totalFound", - "pageStart" -]
2 tool updates
- Changed
arxiv_read_paper10 fields changed- added
Input schema / properties / max_characters / anyOfAdded value: +[ + { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / max_characters / descriptionPrevious 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." - removed
Input schema / properties / max_characters / maximumRemoved value: -9007199254740991 - removed
Input schema / properties / max_characters / minimumRemoved value: -1 - removed
Input schema / properties / max_characters / typeRemoved value: -"integer" - changed
Output schema / properties / body_characters / descriptionPrevious 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." - changed
Output schema / properties / content / descriptionPrevious 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." - changed
Output schema / properties / source / descriptionPrevious 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." - changed
Output schema / properties / source / enumPrevious value: -[ - "arxiv_html", - "ar5iv" -]New value: +[ + "arxiv_html", + "ar5iv", + "pdf_text" +] - changed
Output schema / properties / total_characters / descriptionPrevious 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."
- Changed
arxiv_search6 fields changed- changed
Input schema / properties / category / descriptionPrevious 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." - changed
Input schema / properties / query / descriptionPrevious 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\"." - changed
Input schema / properties / start / descriptionPrevious 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." - added
Input schema / properties / submitted_fromAdded 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" +} - added
Input schema / properties / submitted_toAdded 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" +} - changed
Output schema / properties / effectiveQuery / descriptionPrevious 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."
1 tool update
- Changed
arxiv_get_metadata2 fields changed- changed
Output schema / properties / not_found / items / descriptionPrevious 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." - changed
Output schema / properties / not_found / items / properties / reason / enumPrevious value: -[ - "not_in_arxiv" -]New value: +[ + "not_in_arxiv", + "version_not_in_mirror" +]
1 tool update
- Changed
arxiv_search3 fields changed- added
Output schema / properties / capAdded value: +{ + "description": "The max_results limit applied to this page.", + "type": "number" +} - added
Output schema / properties / shownAdded value: +{ + "description": "Papers returned on this page.", + "type": "number" +} - added
Output schema / properties / truncatedAdded value: +{ + "description": "True when more matching papers exist beyond this page (totalFound > start + shown).", + "type": "boolean" +}
2 tool updates
- Changed
arxiv_list_categories3 fields changed- added
Output schema / properties / noticeAdded value: +{ + "description": "Guidance when the group filter returns no categories.", + "type": "string" +} - added
Output schema / properties / totalCountAdded value: +{ + "description": "Total number of categories returned.", + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "categories" -]New value: +[ + "categories", + "totalCount" +]
- Changed
arxiv_search7 fields changed- added
Output schema / properties / effectiveQueryAdded value: +{ + "description": "The query as sent to arXiv after input normalization.", + "type": "string" +} - added
Output schema / properties / noticeAdded value: +{ + "description": "Recovery guidance when results are empty or paging overshot. Absent on successful pages.", + "type": "string" +} - added
Output schema / properties / pageStartAdded value: +{ + "description": "Pagination offset of this result page.", + "type": "number" +} - removed
Output schema / properties / startRemoved value: -{ - "description": "Pagination offset of this result set.", - "type": "number" -} - added
Output schema / properties / totalFoundAdded value: +{ + "description": "Total matching papers reported by arXiv (before pagination).", + "type": "number" +} - removed
Output schema / properties / total_resultsRemoved value: -{ - "description": "Total matching papers (may exceed returned count due to pagination).", - "type": "number" -} - changed
Output schema / requiredPrevious value: -[ - "total_results", - "start", - "papers" -]New value: +[ + "papers", + "effectiveQuery", + "totalFound", + "pageStart" +]
Related MCP Connectors
Find research papers and arXiv preprints, and get an abstract and free full text from a DOI or id.
Queries ArXiv for AI/CS/math papers and returns structured abstracts, authors, PDF links, and Bib.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Queries ArXiv for AI/CS/math papers and returns structured abstracts, authors, PDF links, and BibT
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables searching and retrieving academic papers from arXiv by various criteria including title, author, and category, with support for extracting full text content from PDFs.4MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to search arXiv papers, retrieve metadata, browse categories, and read paper text.4MIT
- AlicenseBqualityDmaintenanceEnables searching academic papers on arXiv and retrieving detailed information such as title, authors, summary, and PDF link.16MIT
- AlicenseNot gradedqualityFmaintenanceEnables searching arXiv papers and retrieving full paper content as Markdown, with smart sorting, category filtering, and pagination.10MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.