Skip to main content
Glama
README.md
# MCP Refana Server

Model Context Protocol (MCP) server for Mu2e refana analysis workflows. Exposes core analysis functions as MCP tools for integration with agentic frameworks.

## Environment Setup

This project requires the Mu2e analysis environment. On Mu2e gpvm's, activate the environment first:

```bash
source /cvmfs/mu2e.opensciencegrid.org/env/ana/current/bin/activate
```

This provides:
- `pyutils` - Python interface to EventNtuple
- `uproot` - ROOT file handling
- `awkward` - Ragged array support
- `numpy`, `scipy`, `scikit-learn`, `xgboost`, `matplotlib`

## Features

- **Event Counting**: Signal/background extraction in kinematic regions
- **Cut Analysis**: Definition and application of analysis cuts
- **Sensitivity Computation**: Discovery significance, CLs limits, Feldman-Cousins intervals
- **ML Selection**: BDT-based signal/background discrimination setup
- **Analysis Summaries**: Dataset-level analysis results

## Installation

```bash
# Activate Mu2e analysis environment
source /cvmfs/mu2e.opensciencegrid.org/env/ana/current/bin/activate

# Install mcp-refana in development mode
cd mcp-refana
pip install -e .
```

## Running the Server

**Important**: Always activate the Mu2e environment before running.

```bash
# Source Mu2e environment
source /cvmfs/mu2e.opensciencegrid.org/env/ana/current/bin/activate

# Start server with stdio transport (default)
mcp-refana-server --transport stdio
```

Or with HTTP transport:

```bash
source /cvmfs/mu2e.opensciencegrid.org/env/ana/current/bin/activate
mcp-refana-server --transport streamable-http
```

## Available Tools

### `healthcheck()`
Returns server status.

### `count_signal_background(mom_list, time_list, mc_list, mom_range, time_range, sign)`
Extract signal and background event counts in a defined kinematic window.

**Parameters:**
- `mom_list`: Reconstructed momentum values
- `time_list`: Reconstructed time values  
- `mc_list`: MC truth labels
- `mom_range`: [min, max] momentum window
- `time_range`: [min, max] time window
- `sign`: "minus" (electrons) or "plus" (positrons)

**Returns:** Signal/background counts and statistics

### `analyze_cuts(cut_definitions, sign)`
Initialize analysis cut configuration.

### `compute_sensitivity(s_expected, b_expected, b_sys_uncertainty, exposure, efficiency)`
Compute physics sensitivity metrics:
- Asimov significance Z
- 95% CLs upper limit
- 90% Feldman-Cousins confidence interval

### `initialize_ml_selector()`
Set up machine learning event selector.

### `get_cut_efficiency(cuts_applied, n_total, n_surviving)`
Calculate efficiency metrics for applied cuts.

### `summarize_analysis(dataset_name, sign, n_events_processed, signal_count, background_count, ml_score_mean)`
Generate analysis summary for a dataset.

## Integration with HEP-Multiagent

Register this server in the multiagent's `config.py`:

```python
"refana": {
    "command": ["mcp-refana-server", "--transport", "stdio"],
    "description": "Mu2e refana analysis server",
}
```

Then use in worker nodes for agentic analysis workflows.

## Architecture

```
src/mcp_refana/
├── __init__.py
├── server.py              # FastMCP server setup
└── mcp_tools/
    ├── __init__.py
    └── refana_wrappers.py # Tool definitions wrapping refana code
```

The server wraps the core refana analysis classes (Count, Analyze, MLSelect, SensitivityAnalyzer) as MCP tools, making them accessible to agents via tool calls.

## Dependencies

- **mcp**: Model Context Protocol framework
- **refana**: Core analysis code (count, analyze, ML selection, sensitivity)
- **numpy, scipy**: Numerical computing
- **scikit-learn, xgboost**: Machine learning
- **uproot, awkward**: ROOT file handling
- **matplotlib**: Visualization

## Development

Run tests:
```bash
pytest tests/
```

Format code:
```bash
ruff check . --fix
```

## Contact

Sophie Middleton, Huma Jafree

TDQS

A4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct purpose: listing datasets, retrieving dataset info, creating filelists, and summarizing analysis results. No overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, making them predictable and easy to navigate.

Tool Count5/5

Four tools is appropriate for a specialized analysis server, covering key steps without being excessive or insufficient.

Completeness4/5

The set covers dataset discovery, preparation, and result summarization, but lacks a tool to trigger or configure an actual analysis run, which is a minor gap.

Maintenance

ActivitySlowing
ResponsivenessNo issues