Server data from the Official MCP Registry
Deterministic Artifact Evaluation preflight and run-path grader for research repositories.
Deterministic Artifact Evaluation preflight and run-path grader for research repositories.
Valid MCP server (2 strong, 3 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
13 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-tom409114-rrdoctor": {
"args": [
"--from",
"rrdoctor",
"rrdoctor"
],
"command": "uvx"
}
}
}From the project's GitHub README.
Get your research artifact ready for Artifact Evaluation before the deadline: scan the repo, scaffold the easy fixes, verify the run path, and generate the appendix.
Web demo for public repos: https://research-repo-doctor-bckncrcwwmg6jrbsrd6btj.streamlit.app/ If the hosted demo is waking up or reinstalling dependencies, the local zero-install command below is the reliable fallback:
uvx rrdoctor scan .
Maintainers can check anonymous demo access with
python scripts/check_live_demo.py https://research-repo-doctor-bckncrcwwmg6jrbsrd6btj.streamlit.app/.

rrdoctor is a local CLI and GitHub Action for research artifact preparation. It audits
whether a repo is reviewable, citable, and close to runnable; scaffolds safe mechanical
fixes; maps findings to an AE-style readiness level; and turns the rest into a checklist
any coding agent or human can finish.
The GitHub Action is the main adoption path: run the CLI while preparing the artifact, then keep the same deterministic preflight on every pull request.
name: Reproducibility preflight
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
jobs:
rrdoctor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: Tom409114/research-repo-doctor@v0.2.23
with:
profile: standard
fail-on: error
The full GitHub Action guide covers sticky PR comments, new-finding baselines, agent plans, appendices, and complete AE prep packets.
uvx rrdoctor prepare . --profile acm --out-dir rrdoctor-prep
# Or run the pieces explicitly:
uvx rrdoctor scan . --profile acm
uvx rrdoctor fix . --write
uvx rrdoctor appendix . --profile acm --output ARTIFACT_APPENDIX.md
uvx rrdoctor verify . --profile acm
uvx rrdoctor verify . --profile acm --run --timeout 600 --fail-on error # trusted repos only
# Or pin the official quickstart command as the dynamic gate:
uvx rrdoctor verify . --profile acm --command "python train.py config/default.py" --run --timeout 600 --fail-on error
For trusted repositories, rrdoctor verify --run can go beyond static checks. For supported
Python repositories it creates a temporary isolated environment, installs declared
dependencies, and executes the declared entrypoint there under a timeout. Other ecosystems
retain an explicit resolver preflight. With the default gate (--fail-on error), failed or
blocked dynamic L2/L3 steps return a nonzero exit code. Use --command when the artifact has
a specific smoke-test or quickstart command that reviewers should run. Dynamic mode may run
dependency build/install hooks as well as the entrypoint, so never use it on untrusted code.
rrdoctor prepare writes the report, agent plan, artifact appendix, and verification ladder
into one local evidence directory.
Artifact Evaluation chairs and lab maintainers can use the AE chair guide for optional pre-submission wording and CI examples.
For public calibration evidence, see the 80-repository data brief and the nanoGPT first-run regression case study.
--seed flag does nothing." RRD052 spots code that declares a seed option but
never calls random.seed, np.random.seed, torch.manual_seed, tf.random.set_seed, or
random_state=seed.Run once, without installing:
uvx rrdoctor scan .
Alternatives:
pipx run rrdoctor scan .
pip install rrdoctor
rrdoctor scan .
Developer install from source:
git clone https://github.com/Tom409114/research-repo-doctor.git
cd research-repo-doctor
python -m pip install -e ".[dev]"
rrdoctor scan .
Let rrdoctor create the safe scaffolding for you. It is deterministic, idempotent, and
never overwrites existing files.
rrdoctor fix . --write
It can scaffold missing governance docs, citation metadata, data/results provenance notes,
a reproducible-seed helper, changelog entries, and common research .gitignore entries.
The hard parts become a reviewable plan:
rrdoctor plan . --output plan.md
Paste this into Claude Code, Cursor, GitHub Copilot, or any other coding agent:
Use rrdoctor as the deterministic, offline, no-API-key grader for this research repo.
Run:
rrdoctor scan . --format json --output baseline.json
rrdoctor plan . --output plan.md
Work through plan.md without weakening rrdoctor checks.
Definition of done:
rrdoctor scan . --baseline baseline.json --fail-on-new error
The final command is the objective gate: it verifies the agent's work against the starting baseline and fails only on newly introduced errors.
Copyable agent templates are available for Agent Skills / Claude Code-style workflows and Cursor project rules under integrations/.
Keywords: research software, reproducibility, artifact evaluation, repository audit, auto-fix, coding agents, AGENTS.md, GitHub Action, notebooks, data availability, citation metadata.
The fastest way to improve rrdoctor is real scan feedback from real research repositories. After one scan, the low-friction 10-minute trial report asks only what was useful, wrong or missing, and whether the tool fits a real deadline. For a focused rule report, please open a false-positive, false-negative, scan-case, or new-rule issue. Include the rule ID, command, rrdoctor version, and a sanitized minimal repo shape. See feedback and calibration for the short checklist.
Research code often lands on GitHub under deadline pressure. A reviewer or future lab member finds a promising repository and then loses hours because the environment is underspecified, data paths are local, notebooks contain stale outputs, dependencies are unpinned, or the citation is unclear.
Research Repo Doctor turns those recurring release blockers into deterministic checks with concrete remediation - and, where it is safe to do so, scaffolds the mechanical starting points. It is built to sit in the ordinary maintenance path: run locally while preparing a release, then run automatically on pull requests through GitHub Actions.
The audit runs without an AI API key, network access, or hosted service. That same determinism makes it an honest grader: it can verify fixes made by a person or a coding agent.
audit -> fix -> plan -> (your coding agent / you) -> verify -> PR
| | | |
| | rrdoctor plan rrdoctor scan --baseline
| rrdoctor fix --write --fail-on-new error
rrdoctor scan
v0.2.23 is published as
io.github.Tom409114/rrdoctor,
with MCP support remaining an optional extra rather than a core scanner
dependency. Registry inclusion is distribution metadata, not endorsement or
evidence of adoption.rrdoctor verify --run now creates
a temporary isolated venv, installs the repository's declared dependencies,
and runs L3 with that interpreter and PATH instead of stopping at a resolver
dry run.PYTHONHOME and PYTHONPATH values
are removed, and versioned launchers such as python3.10 are redirected to
the temporary environment.RRD050 and verify now recognize
common model-release entrypoints such as demo.py, inference.py,
predict.py, sample.py, and generate.py in root, scripts/, and
tools/ layouts.RRD063 and RRD090 now require stronger
entropy evidence for generic api_key/token/secret/password
assignments while still flagging provider-shaped keys.RRD010 now recognizes
common license filenames such as LICENSE.txt, and RRD043 ignores
CI/devcontainer paths, tests/fixtures, URL path segments, and documented
placeholder/example absolute paths.RRD050 no longer treats
mature package/library projects, including common nested package/ layouts,
as missing paper experiment entrypoints, and RRD090 ignores URL query
tokens, local function-call or method-call token variables, generic fake
tokens in test helpers, and provider-looking substrings embedded inside
longer biological/test sequences.RRD010 and RRD043; scikit-image,
JAX, NetworkX, Keras, Transformers, PyTorch Lightning, Biopython,
torchvision, MDAnalysis, QuTiP, ESM, stable-diffusion, detectron2,
DINO, StyleGAN2-ADA PyTorch, instant-ngp, Big Vision, latent-diffusion,
taming-transformers, generative-models, pytorch-image-models, Brax, ArviZ,
PyMC, Pyro, TensorFlow Probability, statsmodels, Optax, and the remaining
corpus entries now add first-run trust gates or focused review evidence. The
latest 80-repository corpus gate has 0 expected-absent regressions, 80
reviewed notes, and 0 repositories still awaiting focused review.rrdoctor fix --write can now read
simple literal setup.py metadata statically, without executing repository
code, when generating citation and provenance scaffolds.rrdoctor appendix reuses the
same local metadata inference to pre-fill repository URLs and versions for
legacy setup.py/setup.cfg projects.rrdoctor verify --run now resolves
common nested Python requirement files such as requirements/base.txt and
requirements/main.txt, plus .yaml Conda environment files, instead of
skipping those repository layouts.RRD063 now shares the test/fixture
generic fake-token suppression used by RRD090, while still flagging
standalone provider-style keys.RRD050 now recognizes
package-level research binaries such as t5x/train.py, documented
python3 ${T5X_DIR}/t5x/train.py commands, and notebook-first artifacts with
clearly named demo/example/reproduce notebooks such as graphcast_demo.ipynb.RRD034 now parses Python AST imports
instead of regex-matching source text, so comments, docstrings, and prose
examples do not look like missing packages.conftest.py, build-system requirements, and local
sibling modules are filtered out before dependency-gap reporting.rrdoctor verify reports now lead with
the gate outcome, failure threshold, timeout, trust boundary, rerun command,
and the source of any L3 dynamic command.rrdoctor appendix now pre-fills
local README/project metadata, dependency manifests, data/results docs,
config files, and detected entrypoint commands where available.rrdoctor fix --write carries over
candidate dataset URLs, DOIs, README data commands, and local data scripts
when scaffolding DATA.md.python scripts/check.py and
python scripts/check_public_readiness.py provide cross-platform local checks
for release, JOSS, Artifact Evaluation, and public outreach readiness.rrdoctor prepare writes the static
report, agent fix plan, Artifact Appendix, and verification ladder into one
local directory for deadline handoff.prepare: "true"
and prepare-output, so pull requests and release gates can upload the same
reviewer-ready packet.verify --command "...", the Action
verify-command input, and the MCP verify tool let maintainers pin the
official quickstart command and timeout as the L3 gate.main_*.py scripts, AlphaFold-style
random_seed= plumbing, test-file randomness, and placeholder absolute paths
are handled more conservatively.rrdoctor plan, rrdoctor appendix,
static rrdoctor verify, and trusted-only dynamic verify --run.AGENTS.md files now include the
scan -> plan -> baseline verification loop, and generated results-provenance
notes include local repository context, current result files, and a structured
result inventory table.verify-run: "true" plus verify-fail-on: error so trusted dynamic
verification blocks CI while still uploading the verification report.rrdoctor verify --run --fail-on error now exits
nonzero when dependency resolution or the detected run path fails or is blocked.git clone times out, keeping first-run
trust checks less dependent on flaky transport.rrdoctor doctor now reports optional MCP
integration availability only when the package and import-time dependencies
actually load.rrdoctor --version now reports the
installed package version, and running bare rrdoctor prints the root help
page successfully.python -m package.train ... commands now count as experiment entrypoints
when they map to local repository modules.rrdoctor verify now
recognizes module-runner commands such as
python -m torch.distributed.run train.py ... when they include a local
Python entrypoint.rrdoctor fix --write now reads structured
PEP 621 and Poetry metadata, preserves multiple authors, normalizes SSH git
remotes, and handles git worktree origin URLs when generating CITATION.cff.RRD034 now understands PEP 621 environment
markers and Poetry dependency groups, reducing undeclared-import false positives.Generator token markers and public
pkgdown docsearch.api_key search configuration no longer trigger RRD090,
while generic credential-like API keys still do.git clone transport is flaky, without
installing or executing target repositories.python scripts/*.py /
python tools/*.py commands and pyproject-declared CLI commands now count as
experiment entrypoints, reducing first-run false positives on repositories
such as Segment Anything and Whisper.tools/train.py, tools/test.py, and
related ML framework commands now count for RRD050.rrdoctor fix --write can scaffold a
reproducible set_global_seed(seed) helper for RRD052 without overwriting
project code.expected_absent checks in the public evaluation corpus.train.py/main.py/run.py,
Snakemake/Nextflow workflows, and README run commands count as experiment entrypoints.rrdoctor fix provides deterministic, idempotent auto-fix for common gaps (governance
docs, citation metadata, data/results provenance, seed helper scaffolding, changelog, ignore
entries). Never overwrites.rrdoctor plan emits a tool-agnostic fix plan you can hand to any coding agent; every
task names the deterministic check that verifies it.rrdoctor scan --baseline report.json --fail-on-new error fails only
on newly introduced findings, so large repos can adopt the audit incrementally.rrdoctor badge emits a Shields.io endpoint or SVG artifact-readiness badge.Available,
Functional, or Reproduced-ready. The numeric score remains as a secondary
triage signal.GITHUB_TOKEN.rrdoctor scan . # deterministic audit (Markdown report)
rrdoctor fix . --write # apply safe scaffolding for easy gaps
rrdoctor plan . --output plan.md # tool-agnostic work order for the rest
rrdoctor scan . --format json --output baseline.json --fail-on none
rrdoctor scan . --baseline baseline.json --fail-on-new error # gate regressions
Stricter gate and report file:
rrdoctor scan . --profile strict --fail-on warning --output rrdoctor-report.md
Machine-readable and agent output:
rrdoctor scan . --format sarif --output rrdoctor.sarif --fail-on none
rrdoctor scan . --format agent --output fix-plan.md
Before a submission deadline:
rrdoctor prepare . --profile acm --out-dir rrdoctor-prep # one local AE packet
rrdoctor appendix . --profile acm --output ARTIFACT_APPENDIX.md # appendix + checklist mapping
rrdoctor verify . --profile neurips # L1/L2/L3 ladder (static)
rrdoctor verify . --run --timeout 600 --fail-on error # build + run gate (trusted repos)
rrdoctor verify . --command "python train.py config/default.py" --run --timeout 600
Submission profiles: acm, neurips, icml, ml-paper, fair4rs, joss (alongside the
general minimal/standard/strict/ml tiers). Static dependency and runtime checks also
understand R, Julia, Rust/Cargo, CMake-based builds, containers, and Nix environments, not just
Python and JavaScript.
A deterministic checker is reproducible and trustworthy but cannot write prose or judge intent. A coding agent edits well but needs a precise specification and an objective definition of done. Research Repo Doctor gives you both:
rrdoctor scan produces deterministic findings.rrdoctor fix --write scaffolds governance docs, citation metadata,
provenance notes, a seed helper, a changelog, and ignore entries (idempotent, never
overwriting).rrdoctor plan emits a tool-agnostic work order. Paste it into the
coding agent of your choice, attach it to an issue, or work it by hand.See docs/agent-workflows.md and docs/autofix.md.
Add one workflow to many repositories and get consistent reproducibility reports on pull requests and pushes. The Action requires no API key.
name: Reproducibility audit
on:
pull_request:
permissions:
contents: read
pull-requests: write
jobs:
rrdoctor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: Tom409114/research-repo-doctor@v0.2.23
with:
profile: standard
fail-on: none
comment-pr: "true" # sticky PR comment with the report
step-summary: "true" # report in the job summary
plan: "true" # attach an agent-ready fix plan
appendix: "true" # attach an Artifact Evaluation appendix
verify: "true" # attach the L1/L2/L3 verification ladder
prepare: "true" # upload a complete AE prep packet directory
# For trusted repos, add verify-run: "true" and verify-fail-on: error
For new-finding gating and a committed baseline, see docs/pull-request-automation.md.
Research Repo Doctor Summary
Profile: standard
Readiness: Functional
Score: 64/100
Errors: 0
Warnings: 5
Rules evaluated: 32
How to fix first:
- RRD030 No dependency manifest found: Add pyproject.toml, requirements.txt, or another manifest.
- RRD040 Data availability documentation missing: Add DATA.md, docs/data.md, or a README section.
Worked examples live in examples/reports/, including a fix plan and a self-scan report.
| Command | Purpose |
|---|---|
rrdoctor scan | Run the deterministic audit; supports --baseline and --fail-on-new. |
rrdoctor fix | Apply safe, idempotent scaffolding for common gaps (--write to apply). |
rrdoctor plan | Emit a tool-agnostic fix plan (Markdown or JSON). |
rrdoctor prepare | Write a local AE prep packet: report, plan, appendix, and verification. |
rrdoctor verify | Reproducibility ladder L1/L2/L3; --command pins the official quickstart; --run actually builds and executes. |
rrdoctor appendix | Generate an ACM Artifact Appendix + ACM/NeurIPS checklist mapping. |
rrdoctor badge | Emit an artifact-readiness badge (Shields.io endpoint or SVG). |
rrdoctor mcp | Run the MCP server (scan/verify/appendix as agent tools). |
rrdoctor init | Write a documented .rrdoctor.yml. |
rrdoctor list-rules | List all registered rules. |
rrdoctor explain RRD0xx | Explain a rule and how to remediate it. |
rrdoctor doctor | Self-diagnostics. |
rrdoctor --version | Show the installed package version. |
Documentation, environment, data, experiments, notebooks, citation, governance, testing, CI, security, release, and metadata. The full table is in docs/checks.md; auto-fixable rules are marked there.
Research Repo Doctor does not claim to prove a paper is reproducible. It checks release hygiene that makes reproduction possible to attempt. Reports are heuristic and should be reviewed by maintainers. Generated fixes are starting points and contain placeholders to complete before release.
Deterministic first. The scanner is understandable, testable, and useful with no network access. The core scanner will not add network calls, require a hosted-service API key, or fabricate adoption metrics. AI is something you bring to act on the output - never a dependency of the audit itself, and never tied to a single tool.
version: 1
profile: standard
paths:
exclude: [".git", ".venv", "node_modules", "__pycache__"]
thresholds:
large_file_mb: 50
large_notebook_output_kb: 1024
rules:
RRD032:
enabled: false
RRD042:
severity: warning
fail_on: error
Contributions are welcome. Start with CONTRIBUTING.md and AGENTS.md, open a rule request or false-positive report, and include a minimal fixture when possible.
Do not report suspected credential exposure in a public issue. See SECURITY.md.
Use the included CITATION.cff or cite the archived v0.2.23
release DOI: 10.5281/zenodo.21287310.
For the complete version lineage, use the
concept DOI 10.5281/zenodo.21045161.
A JOSS-style draft manuscript is available in paper/ for review. It is not a submitted manuscript and intentionally avoids unverified adoption claims; formal submission metadata will be updated only when it is true.
@software{research_repo_doctor_2026,
title = {Research Repo Doctor},
author = {{Research Repo Doctor Maintainers}},
version = {0.2.23},
year = {2026},
doi = {10.5281/zenodo.21287310},
url = {https://github.com/Tom409114/research-repo-doctor}
}
MIT. See LICENSE.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.