Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the AlphaXiv MCP server

Vendor MCP
Open markdown

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 app
Scalekit's or your own

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. 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>
  3. Create the AlphaXiv MCP connection

    In AgentKit > Connections, create an AlphaXiv MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for AlphaXiv MCP server, so you don't need to register an OAuth app.

  4. 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.actions
    const connector = 'alphaxivmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { 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 call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'alphaxivmcp_find_researchers',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • alphaxivmcp_answer_pdf_queriesReturns raw filtered page content from one PDF as XML.Read-only

    AlphaXiv 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-only

    AlphaXiv 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 historicaldefaultrecencypopulardefault default
    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-only

    AlphaXiv 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_strengthdefault relevance
    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 leadsenioranydefault lead
  • alphaxivmcp_get_paper_contentGet the content of an arXiv/alphaXiv paper as text.Read-only

    AlphaXiv 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-only

    AlphaXiv 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 nonenotablerecentdefault none
  • alphaxivmcp_get_researcher_papersPapers on alphaXiv for one or many researchers, grouped per researcher.Read-only

    AlphaXiv 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 recentcitedvieweddefault cited
  • alphaxivmcp_list_followed_researchersList the researcher profiles the user follows, with each one's slug, name, current headline or affiliation, and citation count.Read-only

    AlphaXiv 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-only

    AlphaXiv 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.