Skip to main content

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

Docker Deployment

Building the Container

docker build -t noctua-mcp .

Running with Docker

docker run -e BARISTA_TOKEN="your-token" noctua-mcp

Environment Variables

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):

  1. Install the noctua-mcp server from smithery.ai
  2. Configure your BARISTA_TOKEN in your MCP client settings
  3. The 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:

  1. Users provide their credentials in their MCP client configuration
  2. The client passes these credentials to the server when starting it
  3. 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

  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 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-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.

Release files for noctua-mcp 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for noctua-mcp 0.2.0
File Size Uploaded
noctua_mcp-0.2.0.tar.gz 284.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for noctua-mcp 0.2.0
File Interpreter ABI Platform
noctua_mcp-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 320.7 kB

Release files / noctua_mcp-0.2.0.tar.gz

Download URL noctua_mcp-0.2.0.tar.gz
Size 284.1 kB
Tags Source
SHA-256 checksum
How to use checksums
fe97a898db1d9b1598d58c72c0bbfc4d685b3cc91fe44d7579def0a9a2252649
BLAKE2b-256 checksum
How to use checksums
7e0375be9181714992e3aeb704f0ee1c75a0360ad36fab86aa7c167163ec1cf7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2025.

Transparency log

Release files / noctua_mcp-0.2.0-py3-none-any.whl

Download URL noctua_mcp-0.2.0-py3-none-any.whl
Size 36.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f514d6c96ec5d489b1d6c687edfe3b50d0cb53129c5001259a89b1da6c09f1a
BLAKE2b-256 checksum
How to use checksums
d226458ee805e102b869c34a48fa94a802f8584fb21f37071fea436e1cda46a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 25, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page