Lightweight, on-demand MCP server for structured methods extraction and reproducibility heuristics on academic papers.
Project description
methods-mcp
Lightweight, on-demand MCP server for structured methods extraction + reproducibility heuristics on academic papers. Built for the Worldwide AI Science Fellowship build challenge.
⚠️ Status: alpha (0.1.x). The tool surface and output shapes may shift between minor versions. Pin to an exact version in production. Bug reports very welcome via GitHub Issues.
methods-mcp is a small, sharply-scoped Model Context Protocol server. It gives any AI agent (Claude Code, Claude Desktop, your Agent SDK script, etc.) eight tools that turn an academic paper URL into:
- canonical metadata,
- best-effort full text + section split,
- a Pydantic-validated structured methods object (steps / reagents / equipment / analyses),
- the paper's associated code repository (best-effort discovery),
- a no-execution-required reproducibility verdict for that repo, and
- a multi-mode summary.
The wedge: heavyweight pipelines like Paper2Agent (Stanford) take 30 minutes to hours to digest a paper into agent-ready tools. methods-mcp is the agent-callable, on-demand complement — every tool returns in seconds, no clone, no execution.
Install
uv add methods-mcp
# or, install globally:
uv tool install methods-mcp
# or, classic pip:
pip install methods-mcp
Set your Anthropic API key (used by the LLM-driven extraction tools):
export ANTHROPIC_API_KEY=sk-ant-...
# Optional — raises GitHub REST API rate limit for repro assessment:
export GITHUB_TOKEN=ghp_...
Use it from Claude Code
/mcp add methods-mcp methods-mcp
Then in any Claude Code chat:
Take https://arxiv.org/abs/2509.06917 and run
methods_repro_review. Summarise what the paper does, the methods steps, and how reproducible the repo looks.
See examples/claude_code_demo.md for more session prompts.
Use it from the Claude Agent SDK
from claude_agent_sdk import ClaudeAgentOptions, ClaudeSDKClient
options = ClaudeAgentOptions(
mcp_servers={
"methods-mcp": {
"type": "stdio",
"command": "methods-mcp",
"args": [],
}
},
allowed_tools=["mcp__methods-mcp__methods_repro_review"],
)
async with ClaudeSDKClient(options=options) as client:
await client.query(
"Run methods_repro_review on https://arxiv.org/abs/2509.06917 "
"and tell me whether the repo looks reproducible."
)
async for msg in client.receive_response():
print(msg)
A complete runnable example lives in examples/reflexive_demo.py.
Tools
| Tool | What it does |
|---|---|
health |
Server liveness + config check. |
get_paper_metadata(input_str) |
Resolve URL / arXiv ID / DOI to canonical metadata. arXiv inputs hit the arXiv export API for title/authors/abstract. |
fetch_paper_text(input_str, prefer="auto"|"html"|"pdf") |
Full text + section split. Defaults to ar5iv HTML for arXiv papers (cheap, structured), PDF fallback otherwise. |
extract_methods(input_str, model=None) |
LLM-driven, Pydantic-validated structured methods extraction. Returns {steps, reagents, equipment, analyses, confidence}. |
find_code_repo(input_str) |
Discover the paper's code repo via paper text → abstract → Papers With Code. |
assess_repo_reproducibility(repo_url, paper_id=None) |
Heuristic, no-clone reproducibility assessment via the GitHub REST API. Weighted signals (README, deps, fixtures, notebooks, figure scripts, recent maintenance, license) → {verdict, score, recommended_entrypoint}. |
summarize_paper(input_str, mode="tldr"|"abstract"|"exec") |
LLM summary in three depths. |
methods_repro_review(input_str) |
Composite — metadata + methods + repo + repro in one call. |
All tools return Pydantic v2 models (validated, JSON-serialisable). See src/methods_mcp/schemas.py for the full type surface.
Design notes
extract_methodsuses Anthropic tool-use to coerce the model into emitting an instance of theMethodsStructuredPydantic schema. On validation failure we send one repair message with the validation error and try again before raising.assess_repo_reproducibilitydoes not clone or execute anything. It scores the repo from publicly-readable GitHub metadata + the recursive tree listing. This is the deliberate wedge against batch tools that try to actually rerun the paper.fetch_paper_textprefers ar5iv HTML over PDF parsing for arXiv papers. Falls back topypdffor non-arXiv inputs.- The default model is
claude-sonnet-4-6. Override viaMETHODS_MCP_MODELenv var or per-callmodel=arg.
Security & limitations
What this server actually does when you install and run it:
- Network calls only to:
export.arxiv.org,ar5iv.labs.arxiv.org,arxiv.org(PDFs),api.github.com,paperswithcode.com,api.anthropic.com. No telemetry, no analytics, no phone-home. - Reads
ANTHROPIC_API_KEY(required for LLM tools) and optionallyGITHUB_TOKENfrom environment variables. These are sent only to Anthropic / GitHub respectively. Never logged, never persisted to disk. - Writes nothing to your filesystem. No cache directories, no downloaded PDFs, no temp files.
- Executes no user-supplied code. No
eval,exec,subprocess,pickle.loads, or shell-outs. The reproducibility tool deliberately does not clone or run repositories — it scores from the GitHub REST API only.
Limitations to be aware of:
- Adversarial papers may produce misleading structured output. The
extract_methodstool sends paper text to Claude. A paper containing prompt-injection content could yield wrong (but schema-valid) structured methods. Treat the output as a research aid, not ground truth. - The reproducibility verdict is a heuristic, not a proof. A high score means the repo looks well-structured for reproduction; it does not guarantee that running the code reproduces the paper. For full validation see Paper2Agent.
- Intended for local stdio use. The HTTP/SSE transports are provided for development convenience but should only be exposed on trusted networks (no SSRF protection beyond what httpx provides).
Reporting issues:
Security issues: please email flynnlachendro@hotmail.co.uk (also see SECURITY.md). Functional bugs: open a GitHub issue.
Pair with paper-mcp
For broader paper search / citation graph tooling, run paper-mcp (Bhvaik) alongside in the same Claude Code session. paper-mcp does title-keyed search, full-text fetch, citations, and references; methods-mcp adds the structured-methods + reproducibility layer on top. The two were intentionally designed to compose.
Develop locally
git clone https://github.com/FlynnLachendro/methods-mcp
cd methods-mcp
uv sync --extra dev --extra agent
uv run pytest # 29 tests, offline
uv run ruff format .
uv run ruff check . --fix
uv run mypy src
uv run methods-mcp --help
Project notes
project-thoughts.md (in this repo) is a running log of what we tried, what stuck, and what we cut while building this. Honest write-up for the WWSF Loom narration.
License
MIT — see LICENSE.
Acknowledgements
Built for the Worldwide AI Science Fellowship inaugural cohort. Thanks to Michael Raspuzzi for the open-ended brief.
Built on:
- FastMCP 3.x — the MCP server scaffold.
- Claude Agent SDK — the agent loop in the demo.
- ar5iv.labs.arxiv.org — clean HTML for arXiv papers.
- Anthropic Claude — the LLM behind structured extraction.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file methods_mcp-0.1.2.tar.gz.
File metadata
- Download URL: methods_mcp-0.1.2.tar.gz
- Upload date:
- Size: 137.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b08271928d1ccde4d827498250188717bfdb1fccbb63ce3284bfebdce3e67d0
|
|
| MD5 |
58e745660043d054dc91b5750d87ad90
|
|
| BLAKE2b-256 |
dd66846eea6323bf8aa777acd9543e1440383ed41b6d513567508057af546710
|
File details
Details for the file methods_mcp-0.1.2-py3-none-any.whl.
File metadata
- Download URL: methods_mcp-0.1.2-py3-none-any.whl
- Upload date:
- Size: 27.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7fdb38735c9982d2b1794a15b0100ebfec4f7a917ec055a0ed03c3202a6d7df8
|
|
| MD5 |
ffe31f3afc3fa431b3a3479ddfbb3dc0
|
|
| BLAKE2b-256 |
50b6e7b1b85841e50ba48796bc400181bae71f8cd3622aee1f1828298c67175e
|