{"name":"io.github.cyanheads/arxiv-mcp-server","slug":"cyanheads-arxiv-mcp-server","title":null,"description":"Search arXiv, fetch paper metadata, and read full-text content.","url":"https://mcp.market/server/cyanheads-arxiv-mcp-server","rating":null,"grade":"A","score":93,"certified":false,"status":"active","category":"search","tags":["search"],"presence":{"score":43,"stars":6,"forks":0,"downloads_week":1096,"last_push_at":"2026-09-19T15:45:34.000Z","license":"Apache-2.0"},"uptime":{"percent":100,"checks":1,"ok":1,"last_checked_at":"2026-09-19T17:26:17.321Z","last_ok_at":"2026-09-19T17:26:17.321Z","latency_ms":849},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/cyanheads/arxiv-mcp-server","website":null,"version":"1.5.3","remotes":[{"type":"streamable-http","url":"https://arxiv.caseyjhand.com/mcp"}],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@cyanheads/arxiv-mcp-server","version":"1.5.3","runtimeHint":"bun","transport":{"type":"stdio"},"packageArguments":[{"value":"run","type":"positional"},{"value":"start:stdio","type":"positional"}],"environmentVariables":[{"description":"arXiv API base URL.","format":"string","default":"https://export.arxiv.org/api","name":"ARXIV_API_BASE_URL"},{"description":"Minimum delay between arXiv API requests (ms).","format":"string","default":"3000","name":"ARXIV_REQUEST_DELAY_MS"},{"description":"Timeout for paper body fetches — HTML renders and PDF downloads (ms).","format":"string","default":"30000","name":"ARXIV_CONTENT_TIMEOUT_MS"},{"description":"Timeout for API search/metadata requests (ms).","format":"string","default":"15000","name":"ARXIV_API_TIMEOUT_MS"},{"description":"Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').","format":"string","default":"info","name":"MCP_LOG_LEVEL"}]},{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@cyanheads/arxiv-mcp-server","version":"1.5.3","runtimeHint":"bun","transport":{"type":"streamable-http","url":"http://localhost:3010/mcp"},"packageArguments":[{"value":"run","type":"positional"},{"value":"start:http","type":"positional"}],"environmentVariables":[{"description":"arXiv API base URL.","format":"string","default":"https://export.arxiv.org/api","name":"ARXIV_API_BASE_URL"},{"description":"Minimum delay between arXiv API requests (ms).","format":"string","default":"3000","name":"ARXIV_REQUEST_DELAY_MS"},{"description":"Timeout for paper body fetches — HTML renders and PDF downloads (ms).","format":"string","default":"30000","name":"ARXIV_CONTENT_TIMEOUT_MS"},{"description":"Timeout for API search/metadata requests (ms).","format":"string","default":"15000","name":"ARXIV_API_TIMEOUT_MS"},{"description":"The hostname for the HTTP server.","format":"string","default":"127.0.0.1","name":"MCP_HTTP_HOST"},{"description":"The port to run the HTTP server on.","format":"string","default":"3010","name":"MCP_HTTP_PORT"},{"description":"The endpoint path for the MCP server.","format":"string","default":"/mcp","name":"MCP_HTTP_ENDPOINT_PATH"},{"description":"Authentication mode to use: 'none', 'jwt', or 'oauth'.","format":"string","default":"none","name":"MCP_AUTH_MODE"},{"description":"Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').","format":"string","default":"info","name":"MCP_LOG_LEVEL"}]}],"tools":[{"name":"arxiv_get_metadata","description":"Get full metadata for one or more arXiv papers by ID. Use when you have known IDs from citations, prior search results, or memory.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"paper_ids":{"anyOf":[{"type":"string","minLength":1,"description":"Single arXiv paper ID (e.g., \"2401.12345\" or \"2401.12345v2\")."},{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","minLength":1},"description":"Array of up to 10 arXiv paper IDs for batch lookup."}],"description":"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\"."}},"required":["paper_ids"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"arxiv_list_categories","description":"List arXiv category codes and names. Useful for discovering valid category filters for arxiv_search. Lists subject classes only; arxiv_search also accepts a bare archive code (the part before the dot, e.g. \"astro-ph\" or \"cs\") to search a whole archive at once.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"group":{"description":"Filter by top-level group (e.g., \"cs\", \"math\", \"physics\"). Returns all categories if omitted.","type":"string","enum":["cs","econ","eess","math","physics","q-bio","q-fin","stat"]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"arxiv_read_paper","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"paper_id":{"type":"string","minLength":1,"description":"arXiv paper ID (e.g., \"2401.12345\" or \"2401.12345v2\")."},"max_characters":{"default":100000,"description":"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.","anyOf":[{"type":"integer","minimum":1,"maximum":9007199254740991},{"type":"null"}]},"start":{"default":0,"description":"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.","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["paper_id"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"arxiv_search","description":"Search arXiv papers by query with category and sort filters. Returns paper metadata including title, authors, abstract, categories, and links.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","minLength":1,"maxLength":1000,"pattern":"^[^\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F]*$","description":"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\"."},"category":{"description":"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.","type":"string"},"max_results":{"default":10,"description":"Maximum results to return (1-50). Default 10. Each result includes title, authors, abstract, and metadata — keep low to limit response size.","type":"integer","minimum":1,"maximum":50},"sort_by":{"default":"relevance","description":"Sort criterion. Use \"submitted\" for newest papers, \"relevance\" for best query matches.","type":"string","enum":["relevance","submitted","updated"]},"sort_order":{"default":"descending","description":"Sort direction. \"descending\" returns newest/most relevant first.","type":"string","enum":["ascending","descending"]},"start":{"default":0,"description":"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.","type":"integer","minimum":0,"maximum":10000},"submitted_from":{"description":"Earliest submission date to include, inclusive, as a UTC YYYY-MM-DD date. Omit for no lower bound.","type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})?$"},"submitted_to":{"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.","type":"string","pattern":"^(\\d{4}-\\d{2}-\\d{2})?$"}},"required":["query"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}}],"scan":{"score":93,"grade":"A","scanned_at":"2026-09-19T15:56:17.746Z","report":{"scannerVersion":"0.1.3","scannedAt":"2026-09-19T15:56:17.754Z","components":{"code":{"score":25,"max":25,"notes":["47 source files scanned","47 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 407ms"]},"poisoning":{"score":15,"max":15,"notes":["4 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"probes":[{"url":"https://arxiv.caseyjhand.com/mcp","reachable":true,"authRequired":false,"latencyMs":407,"serverInfo":{"name":"arxiv-mcp-server","version":"1.5.3"}}],"packages":[{"registryType":"npm","identifier":"@cyanheads/arxiv-mcp-server","version":"1.5.3","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":7,"publishedAt":"2026-09-19T15:47:00.360Z","repositoryUrl":"git+https://github.com/cyanheads/arxiv-mcp-server.git","weeklyDownloads":548},{"registryType":"npm","identifier":"@cyanheads/arxiv-mcp-server","version":"1.5.3","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":7,"publishedAt":"2026-09-19T15:47:00.360Z","repositoryUrl":"git+https://github.com/cyanheads/arxiv-mcp-server.git","weeklyDownloads":548}],"repo":{"found":true,"owner":"cyanheads","repo":"arxiv-mcp-server","archived":false,"pushedAt":"2026-09-19T15:45:34Z","stars":6,"forks":0,"openIssues":2,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/10339515?v=4","ownerCreatedAt":"2014-12-29T13:01:12Z","license":"Apache-2.0"},"icon":{"url":"https://avatars.githubusercontent.com/u/10339515?v=4&s=128","source":"github"},"presence":{"stars":6,"forks":0,"downloadsWeek":1096,"license":"Apache-2.0","lastPushAt":"2026-09-19T15:45:34.000Z","score":43}}}},"grade_history":[],"reviews":[]}