Skip to main content
Glama

PaperGraph MCP

CI Python MIT Release

Read math papers with evidence, not guesses.

Turn arXiv papers, local LaTeX projects, and born-digital PDFs into a local theorem-centered workspace. Inspect source-backed results, proofs, citations, and dependencies; save reading progress and export Markdown reports.

What You Can Do

  • Start with a Paper Map: inspect structure, main-result candidates, and external reading risks before choosing a theorem.

  • Trace statements and proof-local references back to source slices; inspect direct and recursive dependencies, shared prerequisites, cycles, and unknowns.

  • Discover public full-text candidates for DOI papers and review scholarly reference matches from Crossref, OpenAlex, and arXiv.

  • Keep queues, sessions, checkpoints, notes, and open questions in local SQLite workspaces. Export Reading Reports and Cross-Paper Reading Plans.

Related MCP server: paper-mcp

Quick Start

Install uv; no Git or checkout is required:

uvx --from papergraph-mcp==1.2.3 papergraph-mcp --version
uvx --from papergraph-mcp==1.2.3 papergraph-mcp doctor

PyPI 1.2.3 is published and has passed actual public-package and local Git-free acceptance. The dedicated GitHub public-index CI has not run; the GitHub Release is not published. Diagnostics alone do not verify publication.

An MCP client can use this JSON-style stdio configuration:

{
  "mcpServers": {
    "papergraph": {
      "command": "uvx",
      "args": ["--from", "papergraph-mcp==1.2.3", "papergraph-mcp"]
    }
  }
}

Restart the client after configuration. A bare server launch waits quietly for a stdio MCP connection; CLI commands also work without an MCP client.

For agent-assisted setup, use the repository's setup skill from the freshly fetched remote default revision. Preserve existing branches and local changes; ask before installing software, changing client configuration, or restarting. The optional Git-source route requires Git and live verification of the selected version tag against its reviewed package source.

Read Your First Paper

PaperGraph request and reading flow: import usable full text, inspect source evidence and dependencies, review external imports, and save reading state.

Editable DrawCMS source.

  1. Keep the workspace database outside the repository. Preview inputs with plan-starter-project; it validates files without importing or writing. Run bootstrap-reading-project after review to create the workspace and reading artifacts. Local LaTeX inputs must name the main .tex file.

  2. Open the Paper Map and Evidence Triage, choose a result, then inspect its statement, proof, source slices, and dependency evidence.

  3. Review external import plans, save checkpoints and notes, and export a report or cross-paper plan. Follow the first-workspace walkthrough for commands and examples.

For raw arXiv requests, use load_arxiv_request; conflicting IDs or links require user selection before loading. For DOI discovery, discover-doi DOI finds candidates without downloading. add-doi-paper WORKSPACE DOI can import a requested root paper when exactly one eligible public PDF exists; multiple candidates require selection.

For an existing workspace, replace the placeholders with actual IDs:

uvx --from papergraph-mcp==1.2.3 papergraph-mcp get-paper-map --workspace WORKSPACE --paper-id PAPER_ID
uvx --from papergraph-mcp==1.2.3 papergraph-mcp get-dependency-reading WORKSPACE PAPER_ID --target-result-id RESULT_ID --detail compact

Arguments are command-specific: check each command's --help. Compact dependency output retains access to full evidence.

Evidence Boundaries

  • PaperGraph does not verify proofs, infer hidden prerequisites, or establish semantic theorem equivalence. Empty dependencies do not prove independence; extracted reading orders are not complete mathematical dependency graphs.

  • Long PDFs support raw source pagination through workspace_read_source_blocks and its next handle. New automatic PDF proof evidence covers only the first physical line with an explicit proof heading; ownership can remain unknown, and later proof references remain unknown. Raw continuation is readable but does not become dependency evidence automatically. Existing excerpts retain their extraction policy until explicit reimport.

  • External references become reviewable plans, not automatic downloads. Bounded reference expansion requires an explicitly approved finite policy; ambiguous matches await review. Metadata is not full text, and no workflow bypasses paywalls.

  • Papers and reading state remain local. Back up workspaces before schema upgrades; older versions cannot open schema 9.

Documentation

Available Tools

68 tools
discover_doi_paperC

Find exact DOI metadata and public body candidates; never download links.

Inputs: doi (required).

get_dependenciesC

Return theorem-like nodes referenced by the given theorem.

Inputs: theorem_id (required), recursive. Returns: result

get_dependency_diagnosticsB

Explain how dependencies were extracted for one theorem-like node.

Inputs: theorem_id (required), recursive.

get_environment_diagnosticsB

Return PaperGraph version and reproducible launch diagnostics.

Inputs: no named parameters.

get_theoremB

Return the full text and metadata for one theorem-like node.

Inputs: theorem_id (required).

list_theoremsC

List theorem-like environments in the currently loaded paper.

Inputs: kind. Returns: result

load_arxiv_paperC

Download an arXiv source project and build its theorem graph.

Inputs: arxiv_id (required), refresh, main_file.

load_arxiv_requestB

Validate a raw arXiv request, then load it only if unambiguous.

Inputs: input (required), refresh, main_file.

load_paperA

Load a local LaTeX paper and build its theorem graph.

Inputs: path (required).

open_workspaceC

Open or initialize a persistent multi-paper workspace.

Inputs: path (required).

validate_arxiv_inputC

Normalize arXiv ID and URL inputs and return the safe next action.

Inputs: url, text_id.

validate_arxiv_requestB

Validate a raw user arXiv request and return the safe next action.

Inputs: input (required).

where_usedB

Return theorem-like nodes that reference the given theorem.

Inputs: theorem_id (required). Returns: result

workspace_add_arxiv_paperB

Add or replace an arXiv LaTeX project in the active workspace.

Inputs: arxiv_id (required), refresh, main_file.

workspace_add_doi_paperB

Load a user-requested root DOI when one public PDF candidate is eligible.

Multiple candidates require user selection. Do not use for newly discovered external references: those require an import plan and review first.

Inputs: doi (required).

workspace_add_local_paperB

Add or replace a local LaTeX project in the active workspace.

Inputs: path (required), paper_id (required).

workspace_add_pdf_paperC

Add or replace a born-digital PDF paper in the active workspace.

Inputs: path (required), paper_id (required).

workspace_add_reading_noteC

Add a note or question to a reading session.

Inputs: text (required), session_id (required), note_type, target_id, +1 more.

workspace_advance_reference_expansionB

Execute the saved policy: search, download arXiv sources, import unique strong candidates and record resolutions without per-paper prompts, within approved budgets. Resume with the same run ID.

Inputs: run_id (required), max_steps, time_budget_seconds.

workspace_apply_reading_queue_to_sessionC

Apply reading queue items as checkpoints in a reading session.

Inputs: queue_id (required), session_id (required), status.

workspace_bootstrap_reading_projectC

Create starter artifacts for a first reading project.

Inputs: papers (required), artifact_dir (required), workspace_path (required), focus, +5 more.

workspace_cancel_reference_expansionC

Permanently stop this run, preserving imported papers and history.

Inputs: run_id (required).

workspace_create_reading_queueC

Create a persistent reading queue for one stored result.

Inputs: result_id (required), label, recursive.

workspace_create_reading_sessionC

Create a persistent reading session in the active workspace.

Inputs: paper_id (required), label, target_result_id.

workspace_create_reference_expansionC

Save an approved finite expansion policy. Creation does not search or import.

Inputs: root_paper_ids (required), policy.

workspace_decide_reference_expansionC

Record exactly one candidate_id, target, existing_paper_id, skip:true or retry:true. Advance separately to execute the approved choice.

Inputs: run_id (required), edge_id (required), decision (required).

workspace_export_cross_paper_reading_planC

Export a deterministic Markdown reading plan for selected papers.

Inputs: paper_ids (required), focus, max_candidates_per_paper.

workspace_export_paper_reading_reportC

Export a deterministic Markdown reading report for one stored paper.

Inputs: paper_id (required), max_candidates.

workspace_export_reading_bundleC

Export a paper-level evidence bundle for paper-reading consumers.

Inputs: paper_id (required).

workspace_export_reading_session_summaryC

Export a deterministic recovery summary for a reading session.

Inputs: session_id (required).

workspace_export_reference_expansionC

Return saved JSON or Markdown without writing client files or using network.

Inputs: run_id (required), format.

workspace_export_result_reading_contextB

Export focused evidence context for reading one result's proof.

Inputs: result_id (required).

workspace_get_citationsC

Return incoming or outgoing citation evidence for a stored paper.

Inputs: paper_id (required), direction, include_unresolved. Returns: result

workspace_get_dependenciesC

Return dependencies of a globally identified stored theorem.

Inputs: global_theorem_id (required), recursive. Returns: result

workspace_get_dependency_diagnosticsC

Explain how workspace dependencies were extracted for one theorem.

Inputs: global_theorem_id (required), recursive.

workspace_get_dependency_readingC

List main-result candidates or read a user-selected target with evidence.

Statement references and proof-local dependencies remain separate. External references produce reviewable plans only; empty evidence is not independence.

Inputs: paper_id (required), detail, recursive, max_candidates, +1 more.

workspace_get_evidenceC

Return metadata and source spans for one evidence node or edge.

Inputs: node_or_edge_id (required).

workspace_get_external_result_mentionsB

Return external result mentions from a result's proof evidence.

Inputs: result_id (required). Returns: result

workspace_get_paperA

Return metadata and counts for one stored paper.

Inputs: paper_id (required).

workspace_get_paper_mapC

Return an evidence-first first-load map for one stored paper.

Inputs: paper_id (required), max_candidates.

workspace_get_proof_dependenciesC

Return proof dependency evidence for one stored evidence result.

Inputs: result_id (required), recursive.

workspace_get_reading_queueB

Return one persistent reading queue with ordered items.

Inputs: queue_id (required).

workspace_get_reading_sessionB

Return one persistent reading session with checkpoints and notes.

Inputs: session_id (required).

workspace_get_reference_expansionB

Read saved graph, counts, decisions and continuation actions without network.

Inputs: run_id (required).

workspace_get_resultB

Return one stored evidence result with source spans.

Inputs: result_id (required).

workspace_get_result_proofC

Return proof evidence for one stored evidence result.

Inputs: result_id (required).

workspace_get_result_reading_pathB

Return deterministic local reading paths for one result.

Inputs: result_id (required), recursive.

workspace_get_source_sliceC

Return bounded source text around one span, result, or proof.

Inputs: context, span_id, proof_id, result_id.

workspace_import_doi_candidateB

Import a selected root DOI PDF only after explicit review/confirmation.

This is not permission to download newly discovered external references. Candidate provider identity is evidence, not a verification of PDF contents.

Inputs: doi (required), candidate_id (required), confirmed.

workspace_list_external_reference_resolutionsC

List recorded external reference resolutions and selection provenance.

Inputs: paper_id.

workspace_list_external_reference_searchesC

List scholarly reference search runs and candidates.

Inputs: paper_id, blocked_id.

workspace_list_papersB

List all papers stored in the active workspace.

Inputs: no named parameters. Returns: result

workspace_list_reading_queuesC

List persistent reading queues in the active workspace.

Inputs: status, paper_id. Returns: result

workspace_list_reading_sessionsB

List persistent reading sessions in the active workspace.

Inputs: status, paper_id. Returns: result

workspace_list_reference_expansionsC

List saved expansion summaries, optionally filtered by state.

Inputs: state.

workspace_list_resultsC

List a stable result page (limit 1..100). Advance offset by returned count.

A full page may be truncated; continue until a page has fewer than limit results. This is not an unbounded complete list.

Inputs: kind, limit, offset, paper_id. Returns: result

workspace_pause_reference_expansionC

Pause scheduling after the active step. Advance explicitly to resume.

Inputs: run_id (required).

workspace_plan_external_imports_for_paperC

Plan external arXiv imports visible in one stored paper.

Inputs: paper_id (required).

workspace_plan_external_imports_for_queueC

Plan external arXiv imports referenced by one reading queue.

Inputs: queue_id (required).

workspace_plan_external_imports_for_resultC

Plan external arXiv imports for one result's reading path.

Inputs: result_id (required), recursive.

workspace_plan_starter_projectC

Plan a Workspace Starter run without writing files.

Inputs: papers (required), artifact_dir (required), workspace_path (required), focus, +5 more.

workspace_read_source_blocksB

Read raw source blocks from a slice locator; follow next until null.

Blocks are source text, with no inferred proof ownership. Works for legacy imports without changing reading data. A changed extraction needs new locators.

Inputs: span_id (required), limit.

workspace_record_reading_checkpointC

Create or update a reading checkpoint in the active workspace.

Inputs: status (required), target_id (required), session_id (required), target_kind (required), +2 more.

workspace_resolve_external_referenceC

Resolve a blocked external reference to a user-confirmed target.

Inputs: target (required), paper_id (required), blocked_id (required), artifact_dir, +1 more.

workspace_resolve_external_reference_candidateC

Apply a searched candidate as an explicit reference resolution.

Inputs: paper_id (required), blocked_id (required), candidate_id (required), overwrite, +2 more.

workspace_search_external_referenceC

Search scholarly metadata providers for a blocked external reference.

Inputs: paper_id (required), blocked_id (required), refresh, providers, +2 more.

workspace_search_theoremsB

Search theorem titles and bodies across the active workspace.

Inputs: query (required), kind, limit, paper_id. Returns: result

workspace_update_reference_expansion_policyB

Explicitly revise numeric budgets; cumulative usage is retained.

Inputs: limits (required), run_id (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.5/5.0

    Scored across 68 tools

    Disambiguation2/5

    Many tools have overlapping functionality, particularly around loading papers (load_arxiv_paper, load_arxiv_request, workspace_add_arxiv_paper, validate_arxiv_request) and reading sessions/queues/expansions that are difficult to distinguish without deep domain knowledge. The descriptions provide some guidance, but the distinctions between many workspace_* tools remain subtle and prone to misselection.

    Naming Consistency3/5

    The naming is generally snake_case but mixes conventions: some tools use workspace_ prefix, others do not; verbs vary between load_, add_, get_, list_, create_, plan_, export_ in inconsistent patterns. The verb_noun structure is mostly present, but the inconsistency in prefixing and verb selection makes it only borderline readable.

    Tool Count1/5

    With 68 tools, this server is far too large for a coherent toolset, likely causing context overload and increased error rates. The sheer number suggests a monolithic design where many operations could be consolidated or moved to separate specialized servers.

    Completeness3/5

    The domain appears to be academic paper reading and theorem graph analysis. The tool surface covers many operations (loading, searching, reading sessions, reference expansion, exports), but it's unclear if core CRUD for all entities is complete. Some operations like updating or deleting papers/notes are missing, and the reference expansion lifecycle seems complex but potentially incomplete for all use cases.

    Maintenance

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      C
      maintenance
      Remotely-callable MCP server for academic paper search, full-text retrieval and image to LaTeX conversion across arXiv, Semantic Scholar, and OpenAlex.
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server for semantic search over 9.27 million mathematical statements from sources like arXiv and Stacks Project, offering 5 tools for filtered search, citation weighting, and dependency graph traversal.
      MIT