MCP server for Barista to control Noctua editing
Project description
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:
uvx noctua-mcp
For development:
uv run noctua-mcp serve
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: You'll need to set the
BARISTA_TOKENenvironment variable before starting Claude Code:export BARISTA_TOKEN="your-barista-token-here" claude-code /path/to/noctua-mcp
-
Verify 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-mcp - Pass through the
BARISTA_TOKENenvironment variable - Configure 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:
MCP Client (e.g., Claude)
↓
noctua-mcp (this package)
↓
noctua-py library
↓
Barista API / Noctua
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:
# Run all tests
uv run pytest
# Run unit tests only
uv run pytest tests/test_unit.py
# Run MCP integration tests
uv run pytest tests/test_mcp.py
# Run with coverage
uv run pytest --cov=noctua_mcp --cov-report=term-missing
Tests are divided into:
- Unit tests (
test_unit.py): Direct function testing with mocks - MCP tests (
test_mcp.py): Server startup and tool invocation via FastMCP client - Live tests: Optional tests that require
BARISTA_TOKENand network access
Development
# Install dependencies including noctua-py from local path
uv sync
# Run the server
uv run noctua-mcp serve
# Run tests
uv run pytest
# Type checking
uv run mypy src/
# Linting
uv run ruff check src/
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.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file noctua_mcp-0.1.0.tar.gz.
File metadata
- Download URL: noctua_mcp-0.1.0.tar.gz
- Upload date:
- Size: 197.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d8bd4a3be1bf021ce66c891187d94b1a606ebaae5c541336d55ccf89dbcb7bd
|
|
| MD5 |
5989d5f25649d0d67f956ecb8f02dfbc
|
|
| BLAKE2b-256 |
108126fec50f085f6b6475ae9c273e580f54898782bb7b9a3a9e74f8c2e7f7a0
|
Provenance
The following attestation bundles were made for noctua_mcp-0.1.0.tar.gz:
Publisher:
pypi-publish.yaml on geneontology/noctua-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
noctua_mcp-0.1.0.tar.gz -
Subject digest:
8d8bd4a3be1bf021ce66c891187d94b1a606ebaae5c541336d55ccf89dbcb7bd - Sigstore transparency entry: 581979830
- Sigstore integration time:
-
Permalink:
geneontology/noctua-mcp@3dbbd40071084e530199c924c406b1e7b5cc3acd -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/geneontology
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yaml@3dbbd40071084e530199c924c406b1e7b5cc3acd -
Trigger Event:
release
-
Statement type:
File details
Details for the file noctua_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: noctua_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24bd0b7688b1d9e5c792a098ebffd8b08a02e679017b22af7e8ae89f191f5712
|
|
| MD5 |
3b656e7a58042d543393f126e5d5e97e
|
|
| BLAKE2b-256 |
c0efa4a534c856ce8b75697e5951565e574e5ed88e90b8ae4a87a7030011c3c3
|
Provenance
The following attestation bundles were made for noctua_mcp-0.1.0-py3-none-any.whl:
Publisher:
pypi-publish.yaml on geneontology/noctua-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
noctua_mcp-0.1.0-py3-none-any.whl -
Subject digest:
24bd0b7688b1d9e5c792a098ebffd8b08a02e679017b22af7e8ae89f191f5712 - Sigstore transparency entry: 581979832
- Sigstore integration time:
-
Permalink:
geneontology/noctua-mcp@3dbbd40071084e530199c924c406b1e7b5cc3acd -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/geneontology
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yaml@3dbbd40071084e530199c924c406b1e7b5cc3acd -
Trigger Event:
release
-
Statement type: