Arxiv MCP Server vs Python Exec Sandbox
A side-by-side look at the Arxiv MCP Server and Python Exec Sandbox MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Arxiv MCP Server for search & data extraction work as a local process; choose Python Exec Sandbox for code execution as a local process. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose Arxiv MCP Server when
- You need dedicated capabilities in the Search & Data Extraction domain.
- You prefer a local stdio subprocess transport.
- Its auth model fits you: No auth required.
- You want tools like
search_papers, download_paper, list_papers.
Choose Python Exec Sandbox when
- You need dedicated capabilities in the Code Execution domain.
- You prefer a local stdio subprocess transport.
- You want tools like
execute_python, check_environment, validate_script.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Search & Data Extraction | Code Execution |
| Quality signal | 68/100 · Great | 52/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | No auth required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 3,229 | 1 |
| Directory activity | 9 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 19 | 3 |
| Full listing | View Arxiv MCP Server | View Python Exec Sandbox |
Tools & capabilities
Arxiv MCP Server tools 19
search_papersSearch 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: README 'search_papers query guide'. Dates YYYY-MM-DD (date_from/date_to). sort_by relevance|date. max_results default 5 (cap 50). abstract_mode none|snippet|full (default snippet). start default 0; response: total_results, returned, has_more, next_start, abstract_mode. Pass next_start with same abstract_mode. Use get_abstract after compact search — not after abstract_mode=full. arXiv ~3s between requests (server-side). Transient 429/503 are retried with backoff; persistent rate limits return status=rate_limited.download_paperDownload 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 body. When is_truncated is true, call again with start=next_start (see next_retrieval) to continue, or pass return_full_text=true for the entire remaining paper. Set force=true to re-fetch and overwrite a cached paper (required to replace a newer stored arXiv version with an older one).list_papersList 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. Workflow: search_papers -> download_paper -> list_papers -> read_paper.read_paperRead 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 next_retrieval) to continue, or pass return_full_text=true for the entire remaining paper. Will fail with a clear error if the paper has not been downloaded yet — call download_paper first. Workflow: search_papers -> download_paper -> read_paper.get_abstractFetch 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.semantic_searchSemantic 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 results if no papers have been downloaded yet. Use search_papers to find papers on arXiv, then download_paper to add them to the local index before using this tool. Requires pro dependencies: uvx --from 'arxiv-mcp-server[pro]' arxiv-mcp-server (or uv tool install 'arxiv-mcp-server[pro]').reindexRebuild the local semantic index for downloaded papers.citation_graphReturn 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. Under load, export SEMANTIC_SCHOLAR_API_KEY for a higher limit; without a key, persistent rate limits return status=rate_limited instead of failing hard.export_citationsExport 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 status/error. BibTeX only; RIS/CSL-JSON are not yet supported.watch_topicSave 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 string uses the same query syntax as search_papers (quoted phrases, field specifiers, boolean operators). Examples: '"diffusion models" AND ti:"video generation"', 'au:"LeCun" AND cs.LG'. Calling watch_topic with the same topic string updates the existing watch rather than creating a duplicate. On update, omit categories to preserve existing filters; pass categories: [] to clear them. Pair with check_alerts to poll for new papers.check_alertsCheck 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 max_results, has_more=true and check_start advances so later calls return the next papers in the same window (Atom date bounds alone are day-granular and would otherwise re-hit the boundary); last_checked tracks the newest returned paper. When the page is not full, last_checked becomes now and the drain cursor resets. Use watch_topic to register topics before calling this. Returns a clear not-found error if a topic is provided but no matching watch exists. Returns a summary with new paper counts, has_more, and full paper metadata per topic.list_watchesList 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.- +7 more on the listing page
Python Exec Sandbox tools 3
execute_pythonExecute a Python script with automatic dependency management. The script can include PEP 723 inline metadata (# /// script blocks) for declaring dependencies. Additional dependencies can also be passed via the dependencies parameter and will be merged. Args: script: Python source code to execute. May include PEP 723 metadata. dependencies: Extra PEP 508 dependency specifiers to make available. timeout_seconds: Maximum execution time (1-300, default 30). Returns: Formatted output with stdout, stderr, exit code, and duration. Example - simple script: execute_python(script="print('hello')") Example - with dependencies parameter: execute_python( script="import requests; print(requests.get('https://example.com').status_code)", dependencies=["requests>=2.32"] ) Example - with inline dependency metadata (preferred for multiple deps): execute_python(script=''' # /// script # dependencies = ["pandas>=2.2", "numpy>=1.26"] # /// import pandas as pd import numpy as np print(pd.DataFrame({"a": np.arange(5)}).describe()) ''') Always pin dependency versions (e.g. "pandas>=2.2" instead of "pandas") for reproducible results. The inline metadata block (# /// script ... # ///) is the recommended way to declare dependencies directly in the script (see PEP 723: https://peps.python.org/pep-0723/). The dependencies parameter is a simpler alternative when you just need to add a few packages. Both accept standard pip-style version specifiers like "requests>=2.28" or "pandas" (see PEP 508: https://peps.python.org/pep-0508/).check_environmentCheck the execution environment and report status. Returns information about Python version, uv version, platform, sandbox configuration, and cache status.validate_scriptValidate a Python script's PEP 723 metadata and dependencies without executing it. Checks metadata syntax, dependency format, and requires-python compatibility. Args: script: Python source code to validate. May include inline dependency metadata (# /// script blocks, see https://peps.python.org/pep-0723/). dependencies: Extra dependency specifiers to validate, using standard pip-style format like "requests>=2.28" (see https://peps.python.org/pep-0508/). Returns: Validation result with metadata details or error information.
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Arxiv MCP Server
{
"mcpServers": {
"blazickjp-arxiv-mcp-server": {
"command": "uvx",
"args": [
"arxiv-mcp-server"
]
}
}
}
Python Exec Sandbox
{
"mcpServers": {
"python-exec-sandbox": {
"command": "uvx",
"args": [
"mcp-python-exec-sandbox"
]
}
}
}
Frequently asked questions
Arxiv MCP Server is categorized under Search & Data Extraction and uses a local stdio subprocess. Python Exec Sandbox belongs to Code Execution and uses a local stdio subprocess. Pick Arxiv MCP Server for search & data extraction work and Python Exec Sandbox for code execution.
Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.
Arxiv MCP Server is listed as free. Auth: no auth required. Python Exec Sandbox has no declared pricing — check the project's own site. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.
Yes. MCP clients support multiple servers: add blazickjp-arxiv-mcp-server and python-exec-sandbox as separate keys in the same mcpServers object, and your assistant will call tools from either one.
On AllMCPs, Arxiv MCP Server has a quality signal of 68/100 (Great) with 9 views, 0 installs and 3,229 GitHub stars. Python Exec Sandbox has 52/100 (Good) with 2 views, 0 installs and 1 GitHub stars.