Spec 006: hosting reactome-mcp - #209
Merged
Merged
Conversation
Three questions: is it the right server, does it have what we want, and where should it run. It is, and I owe a correction. Spec 005 called it "just a prototype" -- that was the GitHub description field, not the code. It registers 40+ tools and 10 resources across the Content and Analysis Services, and 1.4.0 fetches the graph schema live via APOC. The stale sentence was an argument against adopting it, which is the second time this week a description was trusted over the thing itself. Analysis is the capability that justifies the work and it is there: gene list in, over-representation out, with p-values and FDR. No bundle at any freshness produces that, because it is a computation over the user's list rather than a lookup. Direct Neo4j stays off, and verifiably rather than by convention: the Cypher tools are registered inside `if (isNeo4jConfigured())`, so with NEO4J_URI unset they are absent from the tool list, not merely disabled. Five other Reactome MCP servers exist; ours is the most recently pushed and the only one Reactome controls. Depending on a third party for the interface to our own knowledgebase would be the strange choice. The blocker is transport. reactome-mcp is stdio-only, which is a local subprocess protocol -- one client, one process, over pipes. It cannot be publicly accessible as written. The SDK ships server/streamableHttp and the existing ^1.12.0 pin already resolves to a version that has it, so the change is supported rather than custom, and it belongs in that repository. Hosting it rather than spawning it removes Node from our Python image, removes process supervision, and makes it useful to any MCP client instead of one chatbot process -- which is the argument for running it alongside the website. Recorded as unverified: nobody has run it from here. Every number is a count of code, not a measurement. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
D3, settled: reactome-mcp stays in its own repository. Hosting does not change that, because HTTP is an additional transport rather than a replacement -- main() branches on an environment variable, so stdio and HTTP coexist in one codebase. The people who clone it and point Claude at it keep working unchanged, and the two modes serve different users: cloning is the only route to the Cypher tools, which need a local Neo4j. A separate repository is right independently of hosting anyway: different toolchain, different audience, different cadence. Deployment configuration is not a reason to merge -- the manifest belongs to whoever operates it and points at a built image. D4, deferred: npm publishing would give local users npx instead of clone-plus-build, but it is being done once across reactome-mcp, the website and the other repositories together. Publishing one in isolation sets a precedent the rest must match. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three questions answered: is it the right server, does it have what we want, and where should it run.
A correction I owe
Spec 005 called
reactome-mcp"just a prototype". That was the GitHub description field, not the code. It registers 40+ tools and 10 resources across the Content and Analysis Services, and 1.4.0 fetches the graph schema live via APOC, cached per session.That stale sentence was an argument against adopting it. Second time this week I trusted a description over the thing itself.
It has the capability that justifies the work
Analysis. Gene list in, over-representation out, with p-values, FDR and found/not-found identifiers. No bundle at any freshness produces that — it is a computation over the user's list, not a lookup of stored text.
Direct Neo4j stays off, verifiably — not by convention:
With the variable unset, the Cypher tools are absent from the tool list, not merely disabled. The model cannot see them.
The alternatives
Six Reactome MCP servers exist. Ours is the most recently pushed and the only one Reactome controls — depending on a third party for the interface to our own knowledgebase would be the strange choice.
tc2fh/reactome-db-mcpgoes direct to MySQL, which is exactly the coupling you ruled out.The blocker is transport, and it is in the other repo
reactome-mcpis stdio-only —src/index.tsconstructs aStdioServerTransportand nothing else. That is a local subprocess protocol: one client, one process, over pipes. It cannot be publicly accessible as written.The fix is supported, not custom: the SDK ships
server/streamableHttp, and the existing^1.12.0pin already resolves to 1.30.0, which has it.Hosting it beats spawning it on every axis:
That last row is why it is worth doing properly: a hosted
reactome-mcpis a Reactome service, not a chatbot implementation detail. Which is the instinct behind running it alongside the website.Two decisions
D1 — who adds Streamable HTTP to
reactome-mcp? It blocks everything and lives in that repository.D2 — where does it run? Recommendation: alongside the website, public, rate-limited. The chatbot then becomes its first client rather than its owner.
Recorded as unverified: nobody has run it from here. Every number is a count of code, not a measurement of behaviour. A plan should open by running it once.
🤖 Generated with Claude Code