Read-only MCP server and REST API for Bioconductor: package build, check and propagation state, release info, downloads and ops activity. Docs search coming.
Developer toolsTypeScriptGitHub @seandaviOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A public, read-only Model Context Protocol server, and the equivalent REST API, for Bioconductor. Connect an AI agent (Claude, Codex, Gemini, …) to one URL and it can check a package's build and propagation state, read why a check failed, see release dates and downloads, see what is happening across the seandavi/bioc-* infrastructure repos, and search the infrastructure docs and ADRs for why it works that way, with every answer linked to the public source it came from.
Status: pre-alpha. Deploys from
main; expect breaking changes. The REST API is unstable until v1. The design is in the spec (bioc-infrastructure#122); progress is tracked in #1.
The hostname is temporary and will move to a Bioconductor domain. This block is the only place in this README to change; every command below reads it.
export BIOC_MCP=https://bioc-mcp.seandavi.workers.dev
| Path | What |
|---|---|
$BIOC_MCP/mcp | MCP, all modules (Streamable HTTP, no auth, no session) |
$BIOC_MCP/mcp/{module} | one module, e.g. /mcp/pkg |
$BIOC_MCP/mcp/{a}+{b} | several, e.g. /mcp/pkg+ops |
$BIOC_MCP/api/v1/… | REST, same results as JSON |
$BIOC_MCP/api/openapi.json | OpenAPI document |
$BIOC_MCP/api/v1/about | modules, tools, upstream sources (MCP: resource bioc://about) |
| Module | Tool | Answers |
|---|---|---|
meta | meta_ping | Is the server up? |
pkg | pkg_status | Is this package propagated, and did its latest build and check pass? |
pkg | pkg_legacy_status | What does the legacy build system (BBS) report for this package, and where does it disagree with the registry? |
pkg | pkg_check_output | Why did the check fail? The failing part of the log. |
pkg | pkg_build_environment | What image, repositories and dependency versions did a build job use? |
pkg | pkg_release_info | Which release and devel versions are current, on which R, and when was the release? |
pkg | pkg_downloads | How many downloads, and from how many distinct IPs, did this package get each month of a year? |
pkg | pkg_repo_diff | How many packages does the registry serve at the same version as bioconductor.org, and which differ? |
pkg | pkg_revdeps | Which packages depend on this one, directly or transitively? What breaks downstream if it fails? |
pkg | pkg_missing_deps | Which published packages have a hard dependency that is in none of the propagation index, base R, CRAN or the Bioconductor data repositories? |
ops | ops_activity | What is open, failing or stale across the seandavi/bioc-* infrastructure repos? |
docs | docs_search | Which sections of the infrastructure docs (site pages, ADRs, component docs) match these words? |
docs | docs_read | The full text of one docs page or section, from a docs_search URL. |
The docs module also serves each page as an MCP resource (bioc://docs/…) and an
explain-decision prompt.
The pkg module serves a triage-failing-package prompt, which uses pkg_status,
pkg_check_output and the docs tools, so it is offered only where both modules are (/mcp,
/mcp/pkg+docs).
Run the export above first. Each client below says whether it was tested against the live server, and when.
claude mcp add --transport http --scope user bioc "$BIOC_MCP/mcp"
Drop --scope user to add it to the current project only; claude mcp remove bioc removes it.
Tested: Claude Code 2.1.302, 2026-10-22.
Settings → Connectors → Add custom connector. Name it Bioconductor, set the URL to the URL above
followed by /mcp, and leave the OAuth fields empty.
Not tested.
codex mcp add bioc --url "$BIOC_MCP/mcp"
This writes a [mcp_servers.bioc] table with url to ~/.codex/config.toml (Streamable HTTP);
edit or delete it there.
Tested: Codex CLI 0.146.0, 2026-10-22.
gemini mcp add --scope user --transport http bioc "$BIOC_MCP/mcp"
Without --scope user it goes to ./.gemini/settings.json.
Tested: Gemini CLI 0.38.2, 2026-10-22.
install.packages("mcptools", repos = c("https://posit-dev.r-universe.dev", getOption("repos")))
CRAN mcptools 1.0.3 and earlier fail on any tool result containing null
(posit-dev/mcptools#135); use the r-universe
build until the next CRAN release.
# BIOC_MCP comes from the shell; if R was not started there, run
# Sys.setenv(BIOC_MCP = "<the URL above>") first.
config <- tempfile(fileext = ".json")
jsonlite::write_json(
list(mcpServers = list(bioc = list(url = paste0(Sys.getenv("BIOC_MCP"), "/mcp")))),
config, auto_unbox = TRUE
)
chat <- ellmer::chat_google_gemini() # any ellmer chat_*() works; chat_google_gemini() reads GEMINI_API_KEY (or GOOGLE_API_KEY)
chat$set_tools(mcptools::mcp_tools(config))
chat$chat("Is edgeR passing check in Bioconductor release? Cite the source URL.")
For a permanent setup, put the same JSON in ~/.config/mcptools/config.json and call
mcptools::mcp_tools() with no argument.
Tested: ellmer 0.4.2 with mcptools 1.0.3.9000, 2026-10-22.
POST $BIOC_MCP/mcp with JSON-RPC. No auth, no session.
curl -s -X POST "$BIOC_MCP/mcp" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Point any of the above at $BIOC_MCP/mcp/pkg (or /mcp/docs, /mcp/ops, /mcp/pkg+docs) instead of /mcp.
The client loads fewer tools into its context.
pkg_status)pkg_status, then
pkg_check_output)pkg_legacy_status)pkg_build_environment)pkg_release_info)pkg_downloads)pkg_repo_diff)pkg_revdeps)pkg_missing_deps)ops_activity)docs_search,
then docs_read)curl -s "$BIOC_MCP/api/v1/meta/ping"
curl -s "$BIOC_MCP/api/v1/pkg/status?package=edgeR&universe=bioc-release"
curl -s "$BIOC_MCP/api/v1/pkg/revdeps?package=S4Vectors&depth=1"
curl -s "$BIOC_MCP/api/v1/ops/activity?kind=failures"
curl -s "$BIOC_MCP/api/v1/docs/search?query=propagation+gate"
curl -s -G "$BIOC_MCP/api/v1/docs/read" --data-urlencode 'id_or_url=https://seandavi.github.io/bioc-infrastructure/propagation-gate.html#why-the-registry-polls'
Every body is { data, summary, sources }. sources is a list of { url, as_of }: the upstream
URL and when its data was current. MCP returns the same object as structuredContent (and as
text). Trimmed from the edgeR call:
{
"data": { "package": "edgeR", "universe": "bioc-release", "…": "…" },
"summary": "edgeR (bioc-release) is propagated at 4.10.7 …",
"sources": [
{ "url": "https://bioc-release.r-universe.dev/api/packages/edgeR", "as_of": "2026-10-22T23:07:08.000Z" }
]
}
Rate limit: 120 requests per minute per client address (an IPv6 /64 counts as one address;
approximate, per Cloudflare location). Over it, the server answers HTTP 429 with retry-after: 60
and error code rate_limited. This applies to /mcp too.
curl. No
secrets, no private logs, no writes.With Node ≥ 22.12:
npm ci
npm run dev
npm run dev serves the Worker at http://127.0.0.1:8787. Point an MCP client that speaks
Streamable HTTP at http://127.0.0.1:8787/mcp (or /mcp/<module> for one module), or call the
REST API: curl http://127.0.0.1:8787/api/v1/meta/ping.
ops_activity reads the GitHub API. Without a token GitHub allows 60 requests an hour, and one
all-repo summary uses about 49. Put GITHUB_TOKEN=<a GitHub token with no repository permissions>
in .dev.vars (gitignored), restart npm run dev, and try
curl 'http://127.0.0.1:8787/api/v1/ops/activity?kind=workflows&repo=bioc-website'.
More commands are in AGENTS.md.
New modules, docs sources and evaluation questions are welcome. Start with CONTRIBUTING.md; report problems with the issue forms, and security issues as described in SECURITY.md. By participating you agree to the Code of Conduct.
Cite it: see CITATION.cff.
Apache 2.0, see LICENSE.