r-packagedev-mcp
v1.0.1
Published
MCP server for R package development using usethis, devtools, renv, and testthat
Downloads
51
Maintainers
Readme
r-packagedev-mcp
A standalone Model Context Protocol (MCP) server that exposes advanced R package development capabilities to AI assistants through natural language.
Overview
r-packagedev-mcp wraps the four most important R package development packages into a unified MCP tool surface:
| Package | Purpose | Tools provided |
|---------|---------|----------------|
| usethis | Automate package setup and configuration | create_package, use_r, use_test, use_readme_md, use_vignette, use_mit_license, use_gpl3_license, use_package, use_testthat, use_git, use_github, use_data, use_pipe |
| devtools | Full package development cycle | load_all, document, test, check, install, build, build_readme, spell_check |
| renv | Reproducible environments | renv_init, renv_snapshot, renv_restore, renv_status, renv_install, renv_update, renv_clean |
| testthat | Unit testing | test_file, test_dir |
Why a standalone server instead of an add-on?
Existing R MCP servers (e.g. rmcp) focus on statistical analysis – running arbitrary R code, fitting models, generating plots. They are not designed for the package development workflow.
Building a standalone server allows:
- Purpose-built tool interfaces with clear parameter names and defaults that match package development conventions.
- No dependency on a third-party R MCP server that may have a different architecture, authentication model, or update cadence.
- Portability – the server is a single Node.js binary that proxies calls to
Rscript; it works anywhere R is installed. - Safety – tools are scoped to specific, well-defined package development operations rather than unrestricted R code execution.
Requirements
Node.js ≥ 18
R ≥ 4.1 with the following packages installed:
install.packages(c("usethis", "devtools", "renv", "testthat"))
Installation
From source
git clone https://github.com/B0ydT/r-packagedev-mcp.git
cd r-packagedev-mcp
npm install
npm run buildRunning the server
node dist/index.jsThe server communicates over stdio (standard input/output), which is the default transport used by Claude Desktop, VS Code Copilot, Cursor, and most MCP clients.
Configuration
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"r-packagedev": {
"command": "node",
"args": ["/path/to/r-packagedev-mcp/dist/index.js"]
}
}
}VS Code / Cursor (.mcp.json or settings)
{
"servers": {
"r-packagedev": {
"type": "stdio",
"command": "node",
"args": ["/path/to/r-packagedev-mcp/dist/index.js"]
}
}
}Tool reference
usethis
| Tool | Description |
|------|-------------|
| create_package | Scaffold a new R package at a given path |
| use_r | Create R/<name>.R in an existing package |
| use_test | Create a matching test file under tests/testthat/ |
| use_readme_md | Add README.md to the package root |
| use_vignette | Create a vignette stub under vignettes/ |
| use_mit_license | Add MIT LICENSE and update DESCRIPTION |
| use_gpl3_license | Add GPL-3 LICENSE and update DESCRIPTION |
| use_package | Add a dependency to DESCRIPTION |
| use_testthat | Configure testthat testing infrastructure |
| use_git | Initialise a Git repo and make an initial commit |
| use_github | Create a GitHub remote and push |
| use_data | Export R objects as package data under data/ |
| use_pipe | Add the %>% pipe operator to the package |
devtools
| Tool | Description |
|------|-------------|
| load_all | Simulate library(pkg) for interactive testing |
| document | Run roxygen2 and update NAMESPACE |
| test | Run the test suite (optionally filtered) |
| check | Run R CMD check |
| install | Install the package into the local library |
| build | Build a source tarball |
| build_readme | Render README.Rmd → README.md |
| spell_check | Spell-check documentation and vignettes |
renv
| Tool | Description |
|------|-------------|
| renv_init | Initialise an renv project library |
| renv_snapshot | Record current dependencies to renv.lock |
| renv_restore | Restore packages from renv.lock |
| renv_status | Check library vs lockfile sync status |
| renv_install | Install packages into the renv library |
| renv_update | Update packages in the renv library |
| renv_clean | Remove unused packages / temp files |
testthat
| Tool | Description |
|------|-------------|
| test_file | Run a single test file |
| test_dir | Run all tests in a directory |
Development
# Type-check without emitting
npm run lint
# Build
npm run build
# Run in dev mode (ts-node, no build step)
npm run devArchitecture
src/
├── index.ts # Entry point – starts stdio MCP server
├── server.ts # Registers all tools with the MCP SDK
├── r-executor.ts # Spawns Rscript subprocesses & formats results
└── tools/
├── usethis.ts # usethis tool schemas + handlers
├── devtools.ts # devtools tool schemas + handlers
├── renv.ts # renv tool schemas + handlers
└── testthat.ts # testthat tool schemas + handlersEach tool module exports:
- A schema map (
z.ZodObjectper tool) that defines input validation. - A handler map that translates validated inputs into an
Rscript -ecall and returns the formatted output as MCP text content.
License
CC BY 4.0
