Search arXiv papers, download full text, semantic search, citation graphs, and alerts via MCP.
ArxSource is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Search, read and analyze arXiv papers, and find their code: LaTeX, citations, alerts.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user arxsource-mcp '--' uvx arxsource-mcp
# 2 — ask your agent for something these tools do
# download_paper, get_paper_outline, read_paper_section and 17 more
ArxSource costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts ArxSource as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need uv (docs.astral.sh/uv): uvx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user arxsource-mcp '--' uvx arxsource-mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take ARXSOURCE_STORAGE_PATH (Optional path for storing downloaded papers locally.) if you want to set it.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
20 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
Download a paper from arXiv and return its text content. Tries the HTML version first for clean extraction; falls back to PDF conversion if HTML is unavailable. Stores the paper locally. Returned text is bounded to roughly 12,000 characters by default so one call cannot return an unbounded paper…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | string | yes | The arXiv ID of the paper to download (e.g. '2103.12345') |
| start | integer | no | Zero-based character offset for returning large papers in chunks; pass next_start from a prior truncated response to continue |
| max_chars | integer | no | Maximum raw paper characters to return from start; omit for the bounded default (12,000 chars) |
| return_full_text | boolean | no | Set true to opt out of the bounded default and return the entire remaining paper from start in one call |
| force | boolean | no | If true, re-download and overwrite the local markdown and metadata sidecar even if the paper is already cached, including when replacing a newer stored arXiv version with an older one. Default false. |
Return a paginated heading outline for a downloaded paper (markdown). Stable hierarchical section IDs; use read_paper_section to fetch one.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | yes | — | |
| start | integer | no | Zero-based section index (default 0) |
| max_sections | integer | no | Maximum headings to return (default {DEFAULT_MAX_SECTIONS}) |
Return one bounded markdown section by outline ID (or unique title). Does not include sibling or parent sections.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | yes | — | |
| section_id | string | yes | Section ID from get_paper_outline, or unique title |
Search a downloaded paper for bounded matching passages with section/source offsets. Suppresses high-overlap near-duplicates and prefers section-diverse hits. Lightweight substring search; no Torch.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | yes | — | |
| query | string | yes | Case-insensitive substring to find |
| max_passages | integer | no | Maximum passages to return (default {DEFAULT_MAX_PASSAGES}) |
| passage_chars | integer | no | Max characters per excerpt (default {DEFAULT_PASSAGE_CHARS}) |
Return papers citing an arXiv paper and papers that it references using Semantic Scholar's citation graph. Results are bounded (default 50) to stay within the unauthenticated quota. Graphs are cached on disk to reduce repeated API calls. Under load, a free Semantic Scholar API key…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | string | yes | arXiv ID (for example: 2401.12345). |
| max_citations | integer | no | Maximum citations and references to return (default {DEFAULT_MAX_CITATIONS}). |
Download, safely process, cache, and return bounded original LaTeX source. Use section tools for targeted reading.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | yes | — |
Return a compact outline of headings from original LaTeX source.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | yes | — | |
| start | integer | no | Zero-based section index (default 0) |
| max_sections | integer | no | Maximum headings to return (default {DEFAULT_MAX_SECTIONS}) |
Return one bounded LaTeX section by outline ID or title (whitespace/case normalized; macros expanded).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | yes | — | |
| section_id | string | yes | Section ID from list_paper_latex_sections or section title |
Search arXiv by query with optional categories, date range, sort, and pagination. Query: prefer quoted phrases; ti:/au:/abs:/cat:; AND/OR/ANDNOT. Unprefixed terms match title+abstract (not authors). Use categories (cs.AI, cs.LG, cs.CL, cs.CV, cs.MA, cs.RO, stat.ML, quant-ph). Catalog/examples:…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | arXiv query string. Prefer quoted phrases and ti:/au:/abs:/cat: field prefixes; AND/OR/ANDNOT supported. |
| max_results | integer | no | Maximum results to return (default: 5, max: 50). |
| start | integer | no | Zero-based result offset (default: 0). Pass next_start from a previous response to fetch the next page. |
| abstract_mode | string | no | Abstract projection (default snippet ~280 chars, marked if truncated; full=complete; none=omit). |
| date_from | string | no | Inclusive start date (YYYY-MM-DD). |
| date_to | string | no | Inclusive end date (YYYY-MM-DD). |
| categories | array | no | arXiv category filters (e.g. ['cs.LG', 'cs.AI']). Strongly improves relevance. |
| sort_by | string | no | Sort by 'relevance' (default) or 'date' (newest first). |
Save or update a persistent research topic watch. When checked via check_alerts, returns only papers published since the last check — acting as a standing alert for new work on a topic. New watches seed last_checked to creation time so the first check does not dump historical matches. The topic…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| topic | string | yes | Query string to monitor. Uses arXiv search syntax — quoted phrases for exact matches, field specifiers (ti:, au:, abs:), and boolean operators (AND, OR, ANDNOT). Example: '"reinforcement learning" AND |
| categories | array | no | Optional arXiv category filter (e.g. ['cs.LG', 'cs.AI']). Narrows results to specific fields. On update, omit this field to preserve existing categories; pass an empty array [] to clear them. |
| max_results | integer | no | Maximum papers to return per alert check (default: 10). |
Check all saved topic watches for newly published papers since the last check. Omitting the topic parameter runs ALL saved watches and returns new papers for each. Passing a topic string checks only that specific watch. Advances each watch's drain cursor after running: when a page is truncated by…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| topic | string | no | Optional: check only this specific watched topic (must match the topic string used in watch_topic exactly). Omit to check all saved watches. |
List all saved topic watches without checking for new papers. Returns each watch's topic, categories, last_checked timestamp, and other stored fields. Does not update last_checked — use this to inspect what is saved. Use unwatch_topic to remove a watch, or check_alerts to poll for new papers.
No parameter schema on file.
Delete a saved topic watch by exact topic string. The topic must match the stored watch_topic value exactly. Returns a clear not-found error if no matching watch exists. Use list_watches to inspect saved watches before deleting.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| topic | string | yes | Exact topic string of the watch to remove. Must match the topic used in watch_topic. |
Export BibTeX citations for one or more arXiv papers using authoritative arXiv metadata (title, authors, year, primary category), never model-generated fields. Version suffixes (e.g. '2401.12345v2') are preserved and citation keys are deterministic. Returns the rendered BibTeX plus per-paper…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_ids | array | yes | arXiv IDs, new-style ('2401.12345', optionally versioned '2401.12345v2') or legacy ('hep-ph/9901234'). |
Find where the code and artifacts for an arXiv paper live: the GitHub repository (with stars) and project page, plus the most-downloaded Hugging Face models and datasets and linked Spaces. Uses the public Hugging Face Hub API (no key). A paper with nothing linked returns found=false, not an error;…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | string | yes | arXiv ID (for example: 2312.00752). A version suffix is accepted and ignored. |
| max_results | integer | no | Maximum models, datasets, and Spaces to return per type (default {DEFAULT_MAX_RESULTS}). |
Fetch abstract and metadata by arXiv ID without downloading the paper. Use before download_paper to assess relevance. Returns title, authors, abstract, categories, published date, and PDF URL. After compact search, use for one full abstract; skip if search used abstract_mode=full.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | string | yes | The arXiv paper ID (e.g. '2401.12345' or '2404.19756') |
List all papers that have been downloaded and stored locally via download_paper. Returns id, title, authors, published, and arxiv_version/versioned_id from local metadata — no live re-fetch. Set compact=true to return arXiv IDs only. Returns an empty list if no papers have been downloaded yet.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| compact | boolean | no | If true, return arXiv IDs only. Default is full local metadata (id, title, authors, published, arxiv_version, versioned_id). |
Read the text content of a paper that was previously downloaded via download_paper. Returns the paper in markdown format, bounded to roughly 12,000 characters by default so one call cannot return an unbounded paper body. When is_truncated is true, call again with start=next_start (see…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| paper_id | string | yes | The arXiv ID of the paper to read |
| start | integer | no | Zero-based character offset for reading large papers in chunks; pass next_start from a prior truncated response to continue |
| max_chars | integer | no | Maximum raw paper characters to return from start; omit for the bounded default (12,000 chars) |
| return_full_text | boolean | no | Set true to opt out of the bounded default and return the entire remaining paper from start in one call |
Semantic similarity search over papers you have already downloaded locally via download_paper. Supports free-text queries (e.g. 'attention mechanisms for long sequences') or finding papers similar to a given paper_id. IMPORTANT: only searches your local downloaded collection — will return empty…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Free-text semantic query. |
| paper_id | string | no | Find papers semantically similar to this arXiv paper ID. |
| max_results | integer | no | Maximum number of results to return (default: 10). |
Rebuild the local semantic index for downloaded papers.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| clear_existing | boolean | no | If true, clear the existing index before rebuilding. |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under Apache-2.0
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install ArxSource or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (20 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| watch_topic | state-write | state-write: declares readOnlyHint: false |
| check_alerts | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| list_watches | no tags | |
| unwatch_topic | state-write | state-write: declares readOnlyHint: false, destructiveHint: true |
| citation_graph | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| download_paper | untrusted-inputexternal-sink | untrusted-input: keyword "fetch"; external-sink: declares readOnlyHint: false, openWorldHint: true |
| export_citations | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| find_paper_code | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_abstract | untrusted-input | untrusted-input: keyword "fetch", declares openWorldHint: true (interacts with entities outside the server) |
| get_paper_latex | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| list_paper_latex_sections | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| get_paper_latex_section | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| list_papers | untrusted-input | untrusted-input: keyword "fetch" |
| get_paper_outline | untrusted-input | untrusted-input: keyword "fetch" |
| read_paper_section | no tags | |
| search_paper_text | no tags | |
| read_paper | no tags | |
| search_papers | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| semantic_search | no tags | |
| reindex | state-write | state-write: declares readOnlyHint: false |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.1.0. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish ArxSource can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.