noctua-mcp
MCP server for GO-CAM model editing via the Barista API.
This package provides a thin MCP (Model Context Protocol) wrapper around the noctua-py library, exposing GO-CAM editing capabilities through a standardized interface.
Quick Start
Once published:
For development:
Docker Deployment
Building the Container
Running with Docker
Environment Variables
BARISTA_TOKEN: Authentication token for Barista API (required)BARISTA_BASE: Barista base URL (default: http://barista-dev.berkeleybop.org)BARISTA_NAMESPACE: Minerva namespace (default: minerva_public_dev)BARISTA_PROVIDED_BY: Provided-by agent (default: http://geneontology.org)
Smithery.ai Deployment
This server is configured for deployment on smithery.ai using the included smithery.yaml configuration.
How it Works
When installed via smithery.ai, users configure their credentials through their MCP client (like Claude Desktop):
Install the noctua-mcp server from smithery.ai
Configure your
BARISTA_TOKENin your MCP client settingsThe token is passed to the server when it starts
The smithery.yaml configuration:
Defines how users provide their Barista API token
Specifies Docker-based deployment
Uses stdio-based MCP protocol communication
Allows users to optionally configure the Barista server URL and namespace
How MCP Servers Work with Credentials
MCP servers receive configuration from the client (e.g., Claude Desktop, Claude Code), not from environment variables on the server side. This means:
Users provide their credentials in their MCP client configuration
The client passes these credentials to the server when starting it
The server receives credentials as environment variables at startup
This keeps credentials secure and user-specific - each user provides their own API token.
Using with Claude Code
Configure the MCP server: The project includes a
.mcp.jsonconfiguration file that tells Claude Code how to run the server.Set your Barista token in your MCP configuration:
For Claude Desktop, add to your config:
{ "noctua-mcp": { "type": "stdio", "command": "uvx", "args": ["noctua-mcp"], "env": { "BARISTA_TOKEN": "your-barista-token-here" } } }Or set it in your shell before starting Claude Code:
export BARISTA_TOKEN="your-barista-token-here" claude-code /path/to/noctua-mcpVerify the connection: Once Claude Code starts, the MCP server will be available. You can ask Claude to use the Noctua tools to interact with GO-CAM models.
The .mcp.json configuration is already set up to:
Run the server using
uv run noctua-mcpPass through the
BARISTA_TOKENenvironment variableConfigure the default Barista endpoints
Environment Variables
BARISTA_TOKEN(required) – Barista API token for privileged operationsBARISTA_BASE(default: http://barista-dev.berkeleybop.org) – Barista server URLBARISTA_NAMESPACE(default: minerva_public_dev) – Minerva namespaceBARISTA_PROVIDED_BY(default: http://geneontology.org) – Provider identifier
Available Tools
Model Editing
add_individual(model_id, class_curie, assign_var)– Add an instance of a GO/ECO termadd_fact(model_id, subject_id, object_id, predicate_id)– Add a relation between individualsadd_evidence_to_fact(model_id, subject_id, object_id, predicate_id, eco_id, sources, with_from)– Add evidence to a factremove_individual(model_id, individual_id)– Remove an individualremove_fact(model_id, subject_id, object_id, predicate_id)– Remove a fact
Model Patterns
add_basic_pathway(model_id, pathway_curie, mf_curie, gene_product_curie, cc_curie)– Add a basic GO-CAM unitadd_causal_chain(model_id, mf1_curie, mf2_curie, gp1_curie, gp2_curie, causal_relation)– Add causally linked activities
Model Query
get_model(model_id)– Retrieve full model JSONmodel_summary(model_id)– Get model statistics and summary
Configuration
configure_token(token)– Set Barista token at runtime (not echoed)
Architecture
This server is designed as a thin shim layer:
All core logic resides in the noctua-py library. This MCP server only:
Exposes noctua-py functionality through MCP tools
Manages client singleton
Provides prompts for common patterns
Testing
The package includes comprehensive tests:
Tests are divided into:
Unit tests (
test_unit.py): Direct function testing with mocksMCP tests (
test_mcp.py): Server startup and tool invocation via FastMCP clientLive tests: Optional tests that require
BARISTA_TOKENand network access
Development
Protocol Overview
This project implements an MCP server using FastMCP. MCP (Model Context Protocol) standardizes how tools/resources are exposed to LLMs and agent clients.
Useful links:
Best Practices
stdio transport by default with single entry point
Rich docstrings for all tools (parameters, returns, examples)
No secrets echoed in outputs (Barista token handled securely)
Comprehensive async testing using fastmcp.Client
Thin wrapper pattern - core logic in upstream library
Credits
This project uses the monarch-project-copier template.