Skip to main content
Glama

bioc-mcp

CI Deploy License: Apache 2.0

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.

Endpoint

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)

Related MCP server: TogoMCP

What is live today

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).

Connect

Run the export above first. Each client below says whether it was tested against the live server, and when.

Claude Code

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.

Claude Desktop and claude.ai

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 CLI

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 CLI

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.

R (ellmer + mcptools)

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.

Any Streamable HTTP client

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"}'

Load one module only

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.

First questions to ask

  • "Is edgeR propagated in Bioconductor release, and did its last check pass?" (pkg_status)

  • "Why is package failing check on devel? Show the failing part of the log." (pkg_status, then pkg_check_output)

  • "BBS says trackViewer is fine; does the registry agree on every platform?" (pkg_legacy_status)

  • "What image and dependency versions did that check run with?" (pkg_build_environment)

  • "Which Bioconductor versions are current release and devel, and which R does each use?" (pkg_release_info)

  • "How many downloads did edgeR have this year?" (pkg_downloads)

  • "Which release packages does the registry serve at a different version from bioconductor.org, and why?" (pkg_repo_diff)

  • "If S4Vectors fails today, what is blocked downstream?" (pkg_revdeps)

  • "Which packages depend on something that cannot be installed?" (pkg_missing_deps)

  • "Which workflows in the seandavi/bioc-* infrastructure repos are failing right now?" (ops_activity)

  • "Why does the registry poll r-universe instead of receiving webhooks? Cite the page." (docs_search, then docs_read)

REST quickstart

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.

Principles

  • Public data only. Every tool is a thin adapter over an endpoint anyone can curl. No secrets, no private logs, no writes.

  • Provenance on every answer. Results carry the upstream URL and its freshness.

  • Small results. Check logs are cut to their failing sections; lists are capped or paginate.

Run it locally

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.

Contributing

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.

License

Apache 2.0, see LICENSE.

Tool Schema Changelog

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

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      A high-performance MCP server that gives LLMs access to 25 biomedical tools federated across 50+ upstream APIs for genes, variants, drugs, diseases, literature, clinical trials, and structural biology.
      43
      179 npm
      12
      Apache 2.0
    • A
      license
      A
      quality
      A
      maintenance
      An MCP server that gives AI assistants access to biological and biomedical RDF databases via SPARQL at the RDF Portal, as well as selected REST APIs (NCBI E-utilities, UniProt, ChEMBL, PDB, Reactome, Rhea, MeSH, and more).
      2
      29
      21
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      An MCP server that exposes authoritative, read-only Conda ecosystem metadata for AI agents, enabling package search, dependency resolution, and other packaging queries without side effects.
      5
      BSD 3-Clause
    • A
      license
      Not graded
      quality
      D
      maintenance
      Read-only MCP server for Jenkins CI, enabling AI agents to securely query job/build status, logs, artifacts, and generate verification reports for loop workflows.
      17 npm
      ISC