Skip to main content

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

  1. Configure the MCP server: The project includes a .mcp.json configuration file that tells Claude Code how to run the server.

  2. Set your Barista token: You'll need to set the BARISTA_TOKEN environment variable before starting Claude Code:

    export BARISTA_TOKEN="your-barista-token-here"
    claude-code /path/to/noctua-mcp
    
  3. 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_TOKEN environment variable
  • Configure the default Barista endpoints

Environment Variables

  • BARISTA_TOKEN (required) – Barista API token for privileged operations
  • BARISTA_BASE (default: http://barista-dev.berkeleybop.org) – Barista server URL
  • BARISTA_NAMESPACE (default: minerva_public_dev) – Minerva namespace
  • BARISTA_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 term
  • add_fact(model_id, subject_id, object_id, predicate_id) – Add a relation between individuals
  • add_evidence_to_fact(model_id, subject_id, object_id, predicate_id, eco_id, sources, with_from) – Add evidence to a fact
  • remove_individual(model_id, individual_id) – Remove an individual
  • remove_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 unit
  • add_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 JSON
  • model_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:

  1. Exposes noctua-py functionality through MCP tools
  2. Manages client singleton
  3. 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_TOKEN and 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

noctua_mcp-0.1.0.tar.gz (197.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

noctua_mcp-0.1.0-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

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

Hashes for noctua_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8d8bd4a3be1bf021ce66c891187d94b1a606ebaae5c541336d55ccf89dbcb7bd
MD5 5989d5f25649d0d67f956ecb8f02dfbc
BLAKE2b-256 108126fec50f085f6b6475ae9c273e580f54898782bb7b9a3a9e74f8c2e7f7a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for noctua_mcp-0.1.0.tar.gz:

Publisher: pypi-publish.yaml on geneontology/noctua-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for noctua_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 24bd0b7688b1d9e5c792a098ebffd8b08a02e679017b22af7e8ae89f191f5712
MD5 3b656e7a58042d543393f126e5d5e97e
BLAKE2b-256 c0efa4a534c856ce8b75697e5951565e574e5ed88e90b8ae4a87a7030011c3c3

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page