R&D data infrastructure

MCP for scientific data: what a good bio server looks like

How do you build an MCP server for life science data that an autonomous agent can actually use well?

Mostly by getting the reporting right, not the fetching. A good bio server names its tools after the questions researchers ask, takes few and typed parameters, states the scope it does not cover, and returns the query it actually ran alongside the record count and the database version. The eight rules below come from the protocol specification, the published bioinformatics MCP literature, and the servers we run in production.

By PharosBioPublished on 9 min read

Key takeaways

  • An MCP server exposes a data source to an AI agent as named, typed, callable tools.
  • For scientific data the hard part is not fetching. It is telling the agent what happened.
  • Name tools after the question a researcher asks, not after the API endpoint.
  • Return the query you actually ran, the record count and the database version in every response.
  • An empty result and a broken query must not look identical to a model.
  • Agent accuracy degrades past three or four simultaneous filters, so keep tools narrow.
  • The MCP specification treats tool output as untrusted, so do not put instructions in it.
  • State what your server does not cover; it saves the agent a whole class of wasted calls.

What MCP actually is, and why biology is a hard case

Definition

The Model Context Protocol (MCP) is an open standard that lets an AI application connect to external data and tools over JSON-RPC. A server advertises named, typed tools; a client discovers them and the model calls them mid-task. The point is that the model queries a live source instead of relying on what it memorised.

The protocol itself is not complicated. Servers offer three things: resources (context and data), prompts (templated workflows), and tools (functions the model can execute). The current specification is dated 25 November 2025.

What makes biology a hard case is not volume. It is that a wrong answer is often indistinguishable from a right one. If a sequence retrieval returns 15 records when the correct count is 266, nothing about the response looks broken. The agent proceeds, the phylogeny gets built, and the error surfaces downstream as a date that is off by ninety years. We wrote about that failure class in more detail in identifier hell and ontology mapping.

This is why the useful design question is not “how do I expose my API to a model.” It is “how do I make it impossible for the model to be confidently wrong about what it just received.” Everything below follows from that.

The field agrees this matters. Julio Saez-Rodriguez of EMBL-EBI framed the appeal directly in December 2025: letting models query trusted sources such as EMBL-EBI databases reduces hallucination and makes answers more reproducible. The open problems he names are security and sustainability of hosted servers, and community agreement on metadata standards.

Eight rules for a good bio MCP server

These are ordered roughly by how often we see them missed. The first two are about discovery, the middle four about honesty in the response, and the last two about restraint.

Most of the value sits in the rules about what the server tells you, not what it fetches.

Scope it, and say what you exclude

The best single paragraph in any bio MCP server we use is the one in the PubMed server that says, in effect: this indexes biomedical and life sciences literature, it does not contain physics, mathematics or computer science, use arXiv for those. That paragraph costs nothing and prevents a whole category of empty searches, because the agent stops before it starts.

Scope statements are also how you avoid being the wrong tool in a crowded client. An agent with ten servers connected picks by reading descriptions. Make yours easy to rule out.

Name tools after questions

A tool called search_by_eligibility or analyze_endpoints tells an agent what it is for. One called query_v2 does not, and the agent will guess. This sounds trivial and is the single highest-leverage naming decision you will make, because tool selection happens before any documentation gets read.

Return what you did, not just what you found

This is the rule we would put first if we were writing it again. Here is a real example from building this post. Searching PubMed for a paper by exact title returned zero results:

query: "Obstacles to the reuse of study metadata in ClinicalTrials.gov[Title]"
→ 0 results

The paper exists. What saved the search was that the server also returned the query it had actually executed, and the fragment AND to the[Author]made the problem obvious instantly: the phrase had been parsed into field tags, and “to the” had become an author name. Rephrasing found the paper in one call.

Without that echoed query, the only available conclusion was “this paper is not in PubMed,” which was false. Echo the resolved query, the filters applied, the total count, and the database version. It costs a few bytes and it converts silent wrong answers into visible ones.

Keep each call to a few filters

Anthropic’s VirBench work found agent retrieval accuracy degrading noticeably past three or four simultaneous filters (Luebbert, 2026). That is a design constraint, not a model complaint. Prefer several composable tools over one tool with twelve optional parameters, and stage the work: filter first, fetch second. The same work found that a deterministic retrieval layer lifted every tested agent above 90% accuracy and largely collapsed the difference between models, which is the strongest available argument that this layer is worth building carefully.

Version every answer

Stamp the registry release, build, or snapshot date into the response body. Not the README. Reproducibility has to be a property of the payload, because the payload is the only thing that survives into the transcript an agent reasons over three steps later.

Fail loudly and specifically

No matches, malformed query, rate limit, and upstream timeout are four different situations. To a model receiving [] they are one situation. Distinguish them, return the reason, and suggest the next action. A good error is a tool call the agent does not have to waste.

Ship a tool-selection guide

Server-level instructions are cheap and they change how well the whole server gets used. The bio servers we get most value from open with a short guide naming which tool to use first, which to escalate to, and a two-step or three-step workflow for the common question. It reads like documentation and it functions like a policy.

Keep instructions out of the payload

The specification is explicit that descriptions of tool behaviour should be treated as untrusted unless they come from a trusted server. That principle points somewhere uncomfortable: text your server puts in a result is data, and well-behaved clients treat it as data rather than as instructions.

We see servers embed licensing and attribution requirements in every response payload. The underlying need is legitimate; attribution genuinely matters. But repeating a compliance directive inside each result puts it in exactly the channel the specification says is untrusted, where it competes for attention with the user’s actual request. Server instructions and resource metadata are the right home for it. That way a client can surface the requirement once, deliberately, instead of the model re-encountering it on every call.

The same tool, defined twice

Almost everything above shows up in the shape of a single tool definition. Here is the difference concretely.

Both reach the same database. Only one lets an agent notice it asked the wrong question.

The landscape: what already exists

You often do not need to build. A useful amount of biology is already reachable over MCP, from academic projects and community efforts. This is our reading of the current landscape rather than an exhaustive registry.

ProjectWhat it coversWhy it is interesting
MCPmedGEO, STRING, UCSC Cell BrowserAdapts MCP to bioinformatics web server backends and publishes templates plus lightweight breadcrumbs for services not yet MCP-enabled
BioContextAIUniProt, Open Targets, Reactome, STRING, OmniPath, ClinicalTrials.govOne server spanning the core annotation and target-evidence stack, referenced in EMBL's own coverage of MCP
BioinfoMCP38 converted command-line bioinformatics toolsAuto-generates servers from tool documentation; 94.7% of converted tools executed complex workflows across three agent platforms
PubMed serversLiterature search, metadata, full text, citation lookupThe scope statement and the echoed query translation are both worth copying
ChEMBL serversCompounds, bioactivity, targets, mechanisms, ADMETGood example of splitting one database into question-shaped tools rather than one search endpoint
ClinicalTrials.gov serversTrials, sponsors, investigators, eligibility, endpointsEndpoint and eligibility tools show what naming after the research question looks like
Open Targets serversTarget-disease evidence via GraphQLExposes schema introspection as its own tool, so the agent discovers the query shape instead of guessing
bioRxiv / medRxiv serversPreprints by date, category, funderHonest about limits: states plainly that it has no keyword, author or full-text search

Two patterns in that table are worth stealing outright. Open Targets exposing schema introspection as a tool means the agent can learn the query shape at runtime rather than working from a frozen assumption. And the bioRxiv server stating what it cannot do is the cheapest reliability feature in the whole list.

The direction of travel is clear. MCPmed argues that bioinformatics web servers are built for humans and that this human-centric design limits machine readability for language models and research agents (Flotho et al., 2026). BioinfoMCP makes the complementary point that converting hundreds of tools by hand is unsustainable, and automates it (Widjaja et al., 2025). Both are worth reading before you write a line of your own server.

What we built: clinical trial evidence as an MCP server

The rules above are not abstract for us. In a custom build with Gubra, a preclinical biotech serving 15 of the top 20 pharma companies worldwide, we built a service that augments in vivo results with clinical evidence: it extracts measurements from clinical trials, PubMed and a company’s in-house records, scores compound similarity by target and mechanism, and lines an internal compound’s animal effect size up against compounds that reached the clinic to predict a likely outcome. On a retrospective set of 37 drugs across 10 diseases it correctly flagged 84.21% of failures. We expose that pipeline to Hydra as an MCP server, so the whole workflow is callable as a set of typed tools rather than wired in as bespoke code. The full case study has the method and the numbers.

Building it as a server rather than an integration is what made the eight rules above concrete. Three of them did real work here, and they are the three we would defend hardest.

RuleHow it appliedWhat it cost or saved
Return what you didEvery extracted endpoint carries what was measured, in what units, at what timepoint, in what population and by what methodMakes a non-comparable endpoint visible instead of silently averaged into the result
Fail loudlyAn endpoint that cannot be resolved into the schema is excluded and flagged, never coerced into the nearest matchCosts recall: sensitivity is 33.33% against 84.21% specificity. We think that is the right trade here
Name after the questionSimilarity is scored on target and mechanism, not on the drug name stringStops semaglutide, liraglutide and dulaglutide collapsing into one another because their names rhyme

That second row is the honest one. Strict schema resolution throws away real signal along with the noise, and the results show it. A false “this will fail” costs a programme you might have run; a false “this will succeed” costs a Phase 2 or 3. For this use case we take that trade deliberately, and we would rather publish the sensitivity number than bury it.

The general lesson is the one worth carrying into your own build. The interesting decisions in a scientific MCP server are not about transport or framework. They are about what you refuse to return.

Hydra

Skip the plumbing and start asking questions

Hydra ships with roughly 100 scientific databases and more than 200 codified skills already connected and validated, so you can test a hypothesis today instead of building the retrieval layer first. Sign up and run your first analysis.

Glossary

TermWhat it means
MCPModel Context Protocol: an open standard for connecting AI applications to external data and tools
ServerThe service exposing tools, resources and prompts to a client
ClientThe connector inside a host application that talks to one server
HostThe AI application that initiates connections and runs the model
ToolA named, typed function the model can call, with a description it selects on
ResourceContext or data offered to the model or user, addressed by URI
Server instructionsServer-level guidance shown to the model once, the right home for scope and usage policy
Schema introspectionA tool that returns the query schema, letting an agent learn the shape at runtime
Deterministic retrieval layerA component making every lookup versioned, logged and repeatable
Query translationThe engine's reinterpretation of a submitted query, which should be echoed back

Frequently asked questions

What is an MCP server?

An MCP server is a small service that exposes a data source or tool to an AI model through the Model Context Protocol, an open standard using JSON-RPC. It advertises a set of named, typed tools the model can call, so the model queries a real database instead of relying on what it remembers.

Why build an MCP server for biological data instead of using an API directly?

An API is designed for a developer who reads documentation first. An MCP server is designed for an agent that selects a tool by reading its name and description mid-task. The protocol layer adds discovery, typed parameters and a consistent error surface, which is what makes autonomous use reliable.

What are the most common mistakes in a scientific MCP server?

Returning a bare empty array so no-match and malformed-query look identical; omitting the database version so results cannot be reproduced; naming tools after endpoints rather than questions; accepting a free-text filter string; and packing one tool with a dozen optional parameters.

Should tool output contain instructions for the model?

No. The MCP specification states that descriptions of tool behaviour should be considered untrusted unless they come from a trusted server. Licensing and attribution requirements belong in server instructions or resource metadata, not repeated inside every result payload where they compete with the user's actual request.

Which MCP servers exist for life science data today?

Community and academic efforts cover a lot of ground: MCPmed targets bioinformatics web servers including GEO, STRING and the UCSC Cell Browser; BioContextAI connects UniProt, Open Targets, Reactome, STRING, OmniPath and ClinicalTrials.gov; and BioinfoMCP auto-converts command-line bioinformatics tools.

Sources and further reading

  1. 01Model Context Protocol specification, version 2025-11-25. modelcontextprotocol.io/specification/2025-11-25 Source for the architecture summary and for the statement that tool behaviour descriptions should be considered untrusted.
  2. 02Flotho M, Diks IF, Flotho P, Molano LG, Hirsch P, Keller A (2026). MCPmed: a call for Model Context Protocol-enabled bioinformatics web services for LLM-driven discovery. Briefings in Bioinformatics 27(1): bbag076. doi.org/10.1093/bib/bbag076
  3. 03Widjaja F, Chen Z, Zhou J (2025). BioinfoMCP: A Unified Platform Enabling MCP Interfaces in Agentic Bioinformatics. arXiv:2510.02139. arxiv.org/abs/2510.02139 Source for the 38 converted tools and the 94.7% figure.
  4. 04EMBL (2025). Connecting AI to biology: Model Context Protocol. Published 2 December 2025, quoting Julio Saez-Rodriguez, Head of Research at EMBL-EBI. embl.org
  5. 05Luebbert L (2026). Paving the way for agents in biology. Anthropic. anthropic.com/research/agents-in-biology Source for the filter-count degradation and the accuracy gain from a deterministic retrieval layer.
  6. 06PharosBio (2026). Can you predict a drug’s clinical outcome from its in vivo data? pharos.bio/case-studies/augmenting-in-vivo Source for the Gubra build and its performance numbers.
  7. 07Observations about specific server behaviour, including the PubMed query-translation example, are the author’s, from servers connected during the writing of this post in August 2026. Server behaviour changes; verify before relying on it.

Related reading