The AlphaXiv MCP connector routes your AI agent's tool calls to AlphaXiv's own MCP server through Scalekit. Each user signs in to AlphaXiv once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 18 tools.
- Tools
- 18
- What they doRead · write · destructive
- 10 · 4 · 410 read4 write4 destructive
- Users sign in with
- OAuth
- OAuth app
- Scalekit's or your own
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the AlphaXiv MCP connection
In AgentKit > Connections, create an AlphaXiv MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Scalekit credentials are available for AlphaXiv MCP server, so you don't need to register an OAuth app.
Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'alphaxivmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize AlphaXiv MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'alphaxivmcp_find_researchers',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "alphaxivmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize AlphaXiv MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="alphaxivmcp_find_researchers",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user signs in once. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolalphaxivmcp_answer_pdf_queriesReturns raw filtered page content from one PDF as XML.Read-onlyAlphaXiv Answer PDF Queries
Returns raw filtered page content from one PDF as XML. Supports arXiv, alphaXiv, and Semantic Scholar abstract pages. Multiple queries on the same paper can be batched into one call.
Inputs
paperstringrequired- The paper to read, as an ID ('2307.12307'), a URL ('https://arxiv.org/pdf/2307.12307', 'https://www.alphaxiv.org/abs/2307.12307'), or a title or keyword ('DeepSeek-V4'). An title resolves to a single best match, which you should prefer instead of using lookup_paper.
queriesarrayrequired- A brief description of what information you're looking for in the paper.
alphaxivmcp_discover_papersDiscovers and ranks multiple candidate papers for a research topic.Read-onlyAlphaXiv Discover Papers
Discovers and ranks multiple candidate papers for a research topic. Use for literature discovery, related work, or broad topical coverage.
Inputs
difficultynumberrequired- A 1-10 estimate of how much retrieval effort this request warrants.
keywordsarrayrequired- 3-4 concise keyword terms for exact-name, acronym, method, benchmark, author, or title matching.
questionstringrequired- A detailed semantic description of the papers that would best answer the user's request.
prioritizestring- What to weigh once topical relevance is accounted for. Omit it for the default, which grounds results in roughly the past year of work while letting strong older matches through. Use 'recency' when the request is about what is new — 'latest work', 'what has X been up to', 'recent papers' — which ranks the newest plausible matches first, needing no date bound and excluding nothing. Use 'historical' for seminal, foundational, or best-known work, where lifetime standing outweighs freshness. Use 'popular' only where the request names popularity, votes, or community standing — 'best' on its own asks which work is strongest, not which is most upvoted — which gives community votes the dominant weight among the topically relevant matches and mostly ignores age; for a pure most-popular list with no subject to search for, browse_paper_feed is the better tool.one of
historicaldefaultrecencypopulardefaultdefault published_afterstring- Only return papers first published on or after this date (YYYY-MM-DD). Omit it unless the request names a real boundary, e.g. 'since 2024' — this excludes papers outright, so to merely favour new work set prioritize to 'recency' instead of guessing a cutoff.
published_beforestring- Only return papers first published on or before this date (YYYY-MM-DD). Omit it unless the request names a historical window, e.g. 'before AlexNet' or 'papers from 2025'. Results thin out the further back and narrower the window is; report what comes back rather than retrying the same window.
alphaxivmcp_find_researchersThe first tool for researcher affiliations, organization rosters, who left an organization, career moves, and what researchers are doing now.Read-onlyAlphaXiv Find Researchers
The first tool for researcher affiliations, organization rosters, who left an organization, career moves, and what researchers are doing now. It composes name or subject relevance, current affiliation or role, citation range, position history, and verified coauthorship. Never use this tool merely to resolve a name for another call; pass the name directly to that profile or relationship call. Advising and lab-membership questions are answered here: coauthored_with returns the joint-work record behind each candidate, and require_position_overlap narrows it to people who were at the same place at the same time. Position constraints bind to one LinkedIn experience row. Returns [SLUG=...] handles.
Inputs
affiliationstring- Current organization ('DeepSeek', 'UC Berkeley'). Every indexed spelling of it is matched, so write the name plainly and never spell out variants yourself. For a historical organization use position.affiliation, or include_past_affiliations as shorthand.
include_past_affiliationsboolean- Shorthand for a past position at `affiliation`, excluding researchers whose current affiliation still matches. Use `position` for role or date constraints.default
false limitinteger- Results per page. Defaults to 12, or 50 for a relationship search, whose rows are one line each.
max_citationsinteger- Citation ceiling, e.g. to find rising researchers who are not yet famous.
min_citationsinteger- Citation floor, to keep a roster to established researchers.
pageinteger- 1-based page over the same ordering. Every result says whether more matched beyond it, so page on when the answer needs the tail rather than re-running a narrower search. A page that reports no total is not a count of the roster; only the last page of a search establishes one.default
1 positionobject- Composable LinkedIn position-history filter. Affiliation, role, status, and every date bound apply to the same experience row. For a recent departure use a past position with ended_after and end-date ordering; combine with top-level affiliation or role for transitions.
querystring- A person's name only when identifying that person is the final task, or a research subject ('mechanistic interpretability'). Never use this to resolve an anchor for another call; pass the name directly there. Omit for structured roster, relationship, or career queries.
relationshipobject- Coauthorship evidence from linked public alphaXiv papers, one line per coauthor: shared papers, what share of that person's own output the collaboration is, how often they lead a paper the anchor closes, the years it ran, and their current position. require_position_overlap composes it with position history to add shared time.
rolestring- Current role to filter by, token-matched ('professor' matches assistant and associate professors; 'phd student'). Only current roles are indexed. Omit or leave empty when not filtering by role.
sortstring- 'relevance' ranks a query, or relationship strength for a relationship-only search, otherwise citations. 'recent_activity' ranks by latest linked paper. 'relationship_strength' requires relationship.one of
relevancecitationsrecent_activityrelationship_strengthdefaultrelevance topicstring- Research subject to answer from authorship of papers on it, for 'who works on X' and 'who does prominent work on X'. One concept in the vocabulary its own papers use — name the architecture, benchmark, or subfield, and spell out an acronym alongside it. Never concatenate several related concepts to widen the net.
topic_authorsstring- Which byline slot `topic` weights: 'lead' for the students and postdocs who drive the work, 'senior' for the PIs who close the author list, 'any' for both.one of
leadsenioranydefaultlead
alphaxivmcp_get_paper_contentGet the content of an arXiv/alphaXiv paper as text.Read-onlyAlphaXiv Get Paper Content
Get the content of an arXiv/alphaXiv paper as text. By default returns a structured AI-generated intermediate report. Use the fullText option to get raw extracted text.
Inputs
urlstringrequired- An arXiv or alphaXiv URL
fullTextboolean- If true, return the full extracted text instead of the intermediate report.default
false
alphaxivmcp_get_researcherGets compact profiles for one or many researchers.Read-onlyAlphaXiv Get Researcher
Gets compact profiles for one or many researchers. Pass full names or exact raw [SLUG=...] handles together in `researchers`; each name resolves to the best-matching indexed researcher, tolerating a misspelling. Never use get_researcher merely before get_researcher_papers; a larger or date-bounded paper question goes directly there. Current positions and up to five curated past positions are returned by default; request additional sections with `include`. Papers are independently opt-in for small profile context. For compact current-role enrichment of names extracted from a webpage, use resolve_researchers.
Inputs
researchersarrayrequired- One to 25 researcher full names or exact raw slugs. Names resolve to the best-matching indexed researcher; a corrected spelling is reported inline.
includearray- Additional sections to return. Available sections: bio, full curated position_history, raw linkedin_experience, education, citation_trajectory, coauthors, alphaxiv_account, and links.
paper_limitinteger- Papers per researcher. Defaults to 3.
papersstring- Optional paper context. notable selects high-attention work and one cross-organization paper when available; recent orders by publication date.one of
nonenotablerecentdefaultnone
alphaxivmcp_get_researcher_papersPapers on alphaXiv for one or many researchers, grouped per researcher.Read-onlyAlphaXiv Get Researcher Papers
Papers on alphaXiv for one or many researchers, grouped per researcher. Pass full names or exact raw [SLUG=...] handles together in `researchers`; each name resolves to the best-matching indexed researcher, tolerating a misspelling. Never call get_researcher or find_researchers first for one named person's papers. Sort 'recent' with published_after answers what-are-they-doing-now; 'cited' answers best-known work. Paper [ID=...] handles chain into the paper tools.
Inputs
researchersarrayrequired- One to 25 researcher full names or exact raw slugs. Names resolve to the best-matching indexed researcher; a corrected spelling is reported inline.
limit_per_researcherinteger- Maximum number of papers to return per researcher (1-25). Defaults to 10.default
10 published_afterstring- Only papers first published on or after this date (YYYY-MM-DD). Use with sort 'recent' for activity windows; omit unless the request names one.
sortstring- 'cited' for notable work, 'recent' for current activity, 'viewed' for alphaXiv attention.one of
recentcitedvieweddefaultcited
alphaxivmcp_list_followed_researchersList the researcher profiles the user follows, with each one's slug, name, current headline or affiliation, and citation count.Read-onlyAlphaXiv List Followed Researchers
List the researcher profiles the user follows, with each one's slug, name, current headline or affiliation, and citation count. Following a researcher surfaces their new papers in the user's alphaXiv feed. Pass a slug from here to get_researcher or get_researcher_papers for the full profile.
Inputs
This tool takes no inputs.
alphaxivmcp_list_libraryList the user's alphaXiv library: their folders (bookmark collections) with folder_id, name, type, parent_id, sharing_status, and paper_count.Read-onlyAlphaXiv List Library
List the user's alphaXiv library: their folders (bookmark collections) with folder_id, name, type, parent_id, sharing_status, and paper_count. Set include_papers to also list papers per folder. Pass paper_ids_or_urls to check which folders already contain specific papers. The default folders 'default-to-read', 'default-reading', and 'default-completed' represent reading status; a paper may belong to any number of folders at once.
Inputs
include_papersboolean- Also list the papers inside each folder (capped per folder).default
false paper_ids_or_urlsarray- Report which folders already contain each of these papers.
alphaxivmcp_read_files_from_github_repositoryReads the contents of a file or directory from the paper's codebase repository.Read-onlyAlphaXiv Read Files From Github Repository
Reads the contents of a file or directory from the paper's codebase repository. Returns repository structure for '/', directory listing for directories, or file contents for files.
Inputs
githubUrlstringrequired- The URL of the paper's codebase repository.
pathstringrequired- The path to the file or directory. Use '/' to get the entire repository structure.
alphaxivmcp_resolve_researchersTurns a list of people extracted from a webpage or other external source into current, citeable alphaXiv researcher entries.Read-onlyAlphaXiv Resolve Researchers
Turns a list of people extracted from a webpage or other external source into current, citeable alphaXiv researcher entries. Use this once after reading a roster, team page, award list, or similar source, before repeating its possibly stale affiliations. Pass every person in one batch. Optional personal URLs and related researchers disambiguate names; related anchors are matching context, not proof of the source's claimed relationship.
Inputs
peoplearrayrequired- Up to 50 externally named people to identify in one call.
related_researchersarray- Optional full names or exact raw slugs related to the whole list; coauthorship only disambiguates.
alphaxivmcp_create_folderCreate a new custom folder in the user's library.WriteAlphaXiv Create Folder
Create a new custom folder in the user's library. Optionally nest it under parent_folder_id (from list_library). Returns the new folder_id.
Inputs
namestringrequired- The name to give the new folder (1-100 characters).
parent_folder_idstring- Nest the new folder under this existing folder.
alphaxivmcp_follow_researcherFollow a researcher so their new papers reach the user's feed.WriteAlphaXiv Follow Researcher
Follow a researcher so their new papers reach the user's feed. Idempotent: following someone already followed changes nothing. Get the slug from find_researchers, get_researcher, or a /@<slug> profile URL.
Inputs
slugstringrequired- Researcher slug, as returned in [SLUG=...] handles and rendered at /@<slug>.
alphaxivmcp_rename_folderRename a custom folder.WriteAlphaXiv Rename Folder
Rename a custom folder. Only custom folders can be renamed, not the default reading-status or publications folders. Get folder_id from list_library.
- Idempotent
Inputs
folder_idstringrequired- The folder_id of the custom folder to rename, obtained from list_library.
namestringrequired- The new name for the folder (1-100 characters).
alphaxivmcp_save_papers_to_folderAdd one or more papers (by arXiv id or alphaXiv/arXiv URL) to a folder in the user's library.WriteAlphaXiv Save Papers To Folder
Add one or more papers (by arXiv id or alphaXiv/arXiv URL) to a folder in the user's library. Papers not yet in the database are fetched from arXiv. Omit folder_id to save to the 'Want to read' folder. Get folder_id from list_library. Adding is idempotent and never removes a paper from its other folders.
- Idempotent
Inputs
paper_ids_or_urlsarrayrequired- One or more papers to add, each as an arXiv id or an alphaXiv/arXiv URL.
folder_idstring- Target folder. Defaults to the user's 'Want to read' folder.
alphaxivmcp_delete_folderDelete a folder and its paper memberships (the papers themselves are not deleted).DestructiveAlphaXiv Delete Folder
Delete a folder and its paper memberships (the papers themselves are not deleted). The publications and private-papers folders cannot be deleted. Get folder_id from list_library.
- Idempotent
Inputs
folder_idstringrequired- The folder_id of the folder to delete, obtained from list_library.
alphaxivmcp_move_papers_between_foldersMove papers from a source folder to a destination folder in a single atomic operation: each paper is added to the destination and removed from the source.DestructiveAlphaXiv Move Papers Between Folders
Move papers from a source folder to a destination folder in a single atomic operation: each paper is added to the destination and removed from the source. A paper already in the destination is reported as a duplicate and left untouched in the source. Get folder ids from list_library.
Inputs
from_folder_idstringrequired- The folder_id of the source folder, obtained from list_library.
paper_ids_or_urlsarrayrequired- One or more papers to move, each as an arXiv id or an alphaXiv/arXiv URL.
to_folder_idstringrequired- The folder_id of the destination folder, obtained from list_library.
alphaxivmcp_remove_papers_from_folderRemove one or more papers from a single folder in the user's library.DestructiveAlphaXiv Remove Papers From Folder
Remove one or more papers from a single folder in the user's library. Only affects the given folder; the paper stays in any others. Get folder_id from list_library.
- Idempotent
Inputs
folder_idstringrequired- The folder_id of the folder to remove the papers from, obtained from list_library.
paper_ids_or_urlsarrayrequired- One or more papers to remove from the folder, each as an arXiv id or an alphaXiv/arXiv URL.
alphaxivmcp_unfollow_researcherStop following a researcher.DestructiveAlphaXiv Unfollow Researcher
Stop following a researcher. Idempotent: unfollowing someone not followed changes nothing. Get the slug from list_followed_researchers.
- Idempotent
Inputs
slugstringrequired- Researcher slug, as returned in [SLUG=...] handles and rendered at /@<slug>.
No tools match.