# ImmunoGraph MCP (oci · ghcr.io/ajey95/immuno-graph)

Provenance-aware computational epitope research tools with reproducible offline demonstrations.

- Trust score: 40/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- oci · `ghcr.io/ajey95/immuno-graph`: 40/100 (this document), [markdown](https://verifymcp.io/servers/ajey95-immunograph/ghcr-io-ajey95-immuno-graph.md), [page](https://verifymcp.io/servers/ajey95-immunograph/ghcr-io-ajey95-immuno-graph)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/ajey95/immuno-graph`
- Version: `0.2.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 0/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 4 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 64/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 7653 tokens (~166/item across 46 items; 46 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 17/100
  - Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "remove_duplicate_candidates" implies "remove" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 46 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the ImmunoGraph MCP server?

ImmunoGraph MCP runs locally as a container image, launched with docker run --rm -i ghcr.io/ajey95/immuno-graph:0.2.1. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add ajey95-immunograph -- docker run --rm -i ghcr.io/ajey95/immuno-graph:0.2.1
```

### Cursor

```json
{
  "mcpServers": {
    "ajey95-immunograph": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/ajey95/immuno-graph:0.2.1"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "ajey95-immunograph": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/ajey95/immuno-graph:0.2.1"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add ajey95-immunograph -- docker run --rm -i ghcr.io/ajey95/immuno-graph:0.2.1
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ajey95-immunograph": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/ajey95/immuno-graph:0.2.1"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  ajey95-immunograph:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/ajey95/immuno-graph:0.2.1"]
```

### Netclaw

```json
{
  "McpServers": {
    "ajey95-immunograph": {
      "Transport": "stdio",
      "Command": "docker",
      "Arguments": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/ajey95/immuno-graph:0.2.1"
      ]
    }
  }
}
```

### Other

```json
{
  "mcpServers": {
    "ajey95-immunograph": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/ajey95/immuno-graph:0.2.1"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 40, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 39, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 38)

First indexed and scored.

## MCP tools (46)

### `validate_sequence` (~100 tokens)

Validate one protein FASTA record and return its normalized sequence, length, header, and SHA-256 identity. Use before peptide generation or prediction; this checks sequence syntax, not structure or biological activity. Invalid input returns a structured validation error.

Input parameters:

- `fasta` (string, required): One protein FASTA record with header and amino-acid sequence.
- `profileVersion` (string, required): Version of the sequence validation profile; mvp-v1.0 is the current profile.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `generate_candidate_peptides` (~155 tokens)

Enumerate one-based peptide windows from a supplied protein sequence for MHC-I or MHC-II exploration. Use after validate_sequence and before prediction; this creates candidates, not binding scores. Returns each window with peptide, start, end, and length.

Input parameters:

- `candidateType` (string, required): MHC class or candidate category this operation applies to.
- `peptideLengths` (array, required): Peptide window lengths in amino-acid residues for the selected MHC class.
- `runId` (string): Caller-chosen identifier linking this call to one research run.
- `sequence` (string, required): Protein amino-acid sequence without a FASTA header.
- `sequenceHash` (string): Optional SHA-256 identity of the supplied protein sequence.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `predict_mhci` (~219 tokens)

Get MHC-I peptide-binding observations for supplied class-I alleles and peptide lengths through the configured IEDB connector or an allowed exact fixture. Use for class-I evidence, not MHC-II or B-cell evidence. LIVE_ONLY requires the live connector; results include method and source provenance, and unavailable sources return a structured failure.

Input parameters:

- `alleles` (array, required): HLA allele identifiers relevant to the selected MHC class.
- `fallbackPolicy` (string): Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.
- `methods` (array): Named predictor methods to run or replay; availability depends on configuration.
- `peptideLengths` (array, required): Peptide window lengths in amino-acid residues for the selected MHC class.
- `proteinRef` (string): Stable protein reference or exact fixture key for this prediction.
- `runId` (string): Caller-chosen identifier linking this call to one research run.
- `sequence` (string): Protein amino-acid sequence without a FASTA header.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `predict_mhcii` (~220 tokens)

Get MHC-II peptide-binding observations for supplied class-II alleles and peptide lengths through the configured IEDB connector or an allowed exact fixture. Use for class-II evidence rather than predict_mhci or predict_bcell. LIVE_ONLY requires the live connector; results include method and source provenance, and unavailable sources return a structured failure.

Input parameters:

- `alleles` (array, required): HLA allele identifiers relevant to the selected MHC class.
- `fallbackPolicy` (string): Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.
- `methods` (array): Named predictor methods to run or replay; availability depends on configuration.
- `peptideLengths` (array, required): Peptide window lengths in amino-acid residues for the selected MHC class.
- `proteinRef` (string): Stable protein reference or exact fixture key for this prediction.
- `runId` (string): Caller-chosen identifier linking this call to one research run.
- `sequence` (string): Protein amino-acid sequence without a FASTA header.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `predict_bcell` (~205 tokens)

Score linear B-cell sequence positions using configured live IEDB BepiPred-3.0, local Parker hydrophilicity, or an exact GraphBepi fixture. Choose the method explicitly: Parker is a physicochemical proxy and GraphBepi is fixture-only in this release. Returns residue scores, regions, and provenance; live IEDB access may fail or time out.

Input parameters:

- `fallbackPolicy` (string, required): Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.
- `methods` (array, required): Named predictor methods to run or replay; availability depends on configuration.
- `parameters` (object, required): Method-specific predictor settings; allowed keys depend on selected methods.
- `proteinRef` (string, required): Stable protein reference or exact fixture key for this prediction.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `sequence` (string): Protein amino-acid sequence without a FASTA header.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `predict_synthetic_binding` (~212 tokens)

Create deterministic synthetic MHC binding values for demos and software tests from supplied candidates and alleles. Use only when teaching or testing the pipeline; use predict_mhci or predict_mhcii for configured scientific prediction. Output is marked synthetic and must not be treated as binding evidence.

Input parameters:

- `alleles` (array, required): HLA allele identifiers relevant to the selected MHC class.
- `candidateType` (string, required): MHC class or candidate category this operation applies to.
- `candidates` (array, required): Caller-supplied candidate records; required nested fields depend on this operation.
- `datasetVersion` (string, required): Version label for the synthetic demonstration dataset.
- `method` (string, required): Algorithm or provider method selected for this operation; inspect allowed schema values.
- `methodVersion` (string, required): Version of the selected calculation method.
- `proteinHash` (string, required): SHA-256 identity of the protein sequence associated with these candidates.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `normalize_scores` (~109 tokens)

Transform supplied raw observations into comparable unit-interval values using a named versioned normalization registry. Use after evidence collection and before consensus or ranking; this does not fetch predictors or improve source quality. Returns normalized observations and records the applied transformation.

Input parameters:

- `observations` (array, required): Caller-supplied evidence observations; this tool does not fetch them.
- `registryVersion` (string, required): Version of the score normalization profile registry.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `compute_consensus` (~137 tokens)

Combine one candidate group of normalized observations into weighted consensus, agreement, and completeness. Use after normalize_scores when the group and required weight are known; use compute_consensus_batch for several independent groups. It calculates from caller-supplied evidence and does not make a new prediction.

Input parameters:

- `configuredRequiredWeight` (number, required): Total weight of evidence methods required by the consensus profile.
- `groupKey` (string, required): Stable identifier for one independent consensus group.
- `observations` (array, required): Caller-supplied evidence observations; this tool does not fetch them.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `compute_consensus_batch` (~93 tokens)

Compute weighted consensus separately for multiple candidate groups in one call. Use instead of repeated compute_consensus calls when groups are already assembled; groups are not pooled together. Returns one result per supplied group, based only on its input observations.

Input parameters:

- `groups` (array, required): Independent candidate groups, each with its own observations and weights.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `calculate_population_coverage` (~175 tokens)

Estimate HLA population coverage for supplied peptide-allele associations using a configured authoritative IEDB service or an explicitly allowed exact fixture. Use when the allele restrictions and population IDs are known; use calculate_synthetic_population_coverage only for demonstrations. LIVE_ONLY requires the live service and the result carries source provenance.

Input parameters:

- `associations` (array, required): Peptide-to-HLA restrictions used for population coverage calculation.
- `classMode` (string): Whether coverage uses class-I, class-II, or combined associations.
- `fallbackPolicy` (string): Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.
- `populationIds` (array, required): Population identifiers requested from the coverage source or synthetic dataset.
- `runId` (string): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `calculate_synthetic_population_coverage` (~134 tokens)

Calculate deterministic demonstration coverage from synthetic HLA-frequency inputs. Use for teaching or testing the coverage pipeline, never as a population estimate; use calculate_population_coverage for a configured authoritative source. The output remains synthetic regardless of its numeric values.

Input parameters:

- `associations` (array, required): Peptide-to-HLA restrictions used for population coverage calculation.
- `classMode` (string): Whether coverage uses class-I, class-II, or combined associations.
- `populationIds` (array, required): Population identifiers requested from the coverage source or synthetic dataset.
- `runId` (string): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `rank_candidates` (~196 tokens)

Calculate preliminary candidate scores or final stable ranks from supplied evidence snapshots and completion flags. Use PRELIMINARY before final constraints and FINAL only after base and final constraints are complete; this does not call predictors. Returns ranked candidates and applies the versioned ranking profile to the supplied values.

Input parameters:

- `baseConstraintsComplete` (boolean, required): Whether all required base constraint results are present.
- `candidates` (array, required): Caller-supplied candidate records; required nested fields depend on this operation.
- `finalConstraintsComplete` (boolean, required): Whether required final constraint results are present for final ranking.
- `phase` (string, required): PRELIMINARY scores incomplete work; FINAL requires completed base and final constraints.
- `rankingProfileVersion` (string, required): Versioned weighting profile applied to candidate scoring.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `thresholds` (object): Named score or decision cutoffs supplied by the caller.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `optimize_shortlist_coverage` (~255 tokens)

Select a deterministic T-cell shortlist from eligible ranked candidates using supplied population coverage and construct constraints. Use after final ranking when shortlist size or coverage is the decision; use optimize_construct_genetic for seeded construct search. The result depends on the supplied coverage matrix and is not an independently measured population outcome.

Input parameters:

- `candidates` (array): Caller-supplied candidate records; required nested fields depend on this operation.
- `eligibleCandidateIds` (array, required): IDs of finally eligible candidates considered for the shortlist.
- `finalRankingSnapshotHash` (string, required): SHA-256 identity of the final ranking snapshot supplying these candidates.
- `linker` (string): Peptide linker sequence used when assembling construct proposals.
- `maximumShortlistSize` (integer): Upper limit on candidates selected for the shortlist.
- `method` (string, required): Algorithm or provider method selected for this operation; inspect allowed schema values.
- `populationIds` (array, required): Population identifiers requested from the coverage source or synthetic dataset.
- `populationWeights` (object): Caller-supplied weights for combining named population coverage values.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `targetCoverage` (number): Desired population coverage fraction used by optimization.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `optimize_construct_genetic` (~245 tokens)

Run seeded genetic-style search over supplied candidates to balance construct size, coverage, redundancy, and manufacturability terms. Use after final ranking when searching construct arrangements; use optimize_shortlist_coverage for simpler deterministic shortlist selection. Returns a computed proposal, not a validated vaccine construct.

Input parameters:

- `candidates` (array, required): Caller-supplied candidate records; required nested fields depend on this operation.
- `finalRankingSnapshotHash` (string, required): SHA-256 identity of the final ranking snapshot supplying these candidates.
- `linker` (string, required): Peptide linker sequence used when assembling construct proposals.
- `maximumConstructSize` (integer, required): Upper limit on construct size for genetic-style search.
- `maximumGenerations` (integer, required): Maximum optimization generations before returning a proposal.
- `populationIds` (array, required): Population identifiers requested from the coverage source or synthetic dataset.
- `populationSize` (integer, required): Number of candidate construct genomes per optimization generation.
- `populationWeights` (object): Caller-supplied weights for combining named population coverage values.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `targetCoverage` (number, required): Desired population coverage fraction used by optimization.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `calibrate_confidence` (~158 tokens)

Fit Platt or isotonic calibration on labeled samples and evaluate on separate labeled outcomes, or emit rule-based confidence. Use fitted modes only with real calibration and evaluation labels; rule-based mode has no measured reliability. Returns calibrated probabilities and metrics only where the input labels support them.

Input parameters:

- `calibrationSamples` (array): Labeled examples used only to fit a calibration model.
- `evaluationSamples` (array): Held-out labeled samples used to evaluate fitted calibration.
- `method` (string, required): Algorithm or provider method selected for this operation; inspect allowed schema values.
- `predictions` (array, required): Predicted values to calibrate or score using the selected method.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `detect_overlapping_epitopes` (~111 tokens)

Find positional overlap competitors and connected components among candidate intervals. Use before apply_constraint_rules when overlaps need review; this tool does not choose a winner or deduplicate identities. Returns interval relationships from caller-supplied coordinates.

Input parameters:

- `candidates` (array, required): Caller-supplied candidate records; required nested fields depend on this operation.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `threshold` (number, required): Numeric cutoff for the selected overlap or decision operation.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `remove_duplicate_candidates` (~109 tokens)

Group candidates with identical positional identity and choose canonical records. Use before apply_constraint_rules to remove true duplicates; identical peptide strings at different coordinates remain separate. Returns canonical and duplicate relationships without changing source evidence.

Input parameters:

- `candidates` (array, required): Caller-supplied candidate records; required nested fields depend on this operation.
- `proteinHash` (string, required): SHA-256 identity of the protein sequence associated with these candidates.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `validate_thresholds` (~110 tokens)

Evaluate the versioned hard biological threshold profile against supplied candidates. Use before categorization or final constraint application; this reports rule outcomes rather than ranking candidates. Missing evidence is represented in the rule results instead of invented as a pass.

Input parameters:

- `candidates` (array, required): Caller-supplied candidate records; required nested fields depend on this operation.
- `ruleProfileVersion` (string, required): Version of the biological constraint rule profile.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `categorize_candidates` (~109 tokens)

Assign provisional decision categories and blocking conditions from supplied scores, rules, and thresholds. Use after scoring and rule evaluation; use rank_candidates for numeric ordering, not category assignment. Returns deterministic categories that retain the input evidence boundaries.

Input parameters:

- `candidates` (array, required): Caller-supplied candidate records; required nested fields depend on this operation.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `thresholds` (object, required): Named score or decision cutoffs supplied by the caller.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `apply_constraint_rules` (~188 tokens)

Apply base, duplicate, and overlap rules to one immutable candidate snapshot and return final rule outcomes. Use after validate_thresholds, remove_duplicate_candidates, and detect_overlapping_epitopes when their inputs are ready. The snapshot hash binds the decision to supplied evidence; this tool does not fetch new evidence.

Input parameters:

- `baseConstraints` (array, required): Previously evaluated base rule inputs for final constraint application.
- `duplicateCandidates` (array, required): Candidate records to evaluate for exact positional duplication.
- `overlapCandidates` (array, required): Candidate records whose positional overlaps enter final constraint rules.
- `overlapThreshold` (number, required): Minimum overlap fraction used by the final overlap rule.
- `ruleProfileVersion` (string, required): Version of the biological constraint rule profile.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `snapshotHash` (string, required): SHA-256 identity of the immutable evidence snapshot.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `fetch_structure` (~170 tokens)

Retrieve PDB coordinates from RCSB or an AlphaFold model from the configured provider, or replay an exact fixture. Use when a structure accession is known and before coordinate-based analyses; this is not sequence prediction. LIVE_ONLY requires network access and returns source provenance plus coordinate artifact bytes.

Input parameters:

- `accession` (string, required): Provider accession, such as an RCSB PDB ID or AlphaFold accession, matching source.
- `fallbackPolicy` (string, required): Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `source` (string, required): Selected remote provider or exact fixture source.
- `targetId` (string, required): Caller-chosen identifier for the target protein or structure.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `validate_structure` (~184 tokens)

Check supplied structure metadata and, when PDB bytes are provided, parse actual atoms, chains, and residues. Use before mapping, accessibility, or docking preparation; this does not evaluate model confidence or binding. Mismatched metadata returns a structured failure.

Input parameters:

- `chainIds` (array, required): Protein chain identifiers selected from the supplied structure.
- `format` (string, required): Requested structure or export format, as enumerated by this tool.
- `residueCount` (integer, required): Expected protein residue count for metadata consistency checks.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `sourceStatus` (string, required): Provenance label for the supplied structure or compound.
- `structureId` (string, required): Stable identifier of the supplied or retrieved structure.
- `structurePdbBase64` (string): Base64-encoded protein PDB coordinate bytes for direct computation.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `map_epitopes_to_structure` (~192 tokens)

Align supplied candidate sequence positions to residue coordinates in a PDB structure, or replay an exact fixture. Use after validate_structure when mapping sequence evidence onto a model; use calculate_surface_accessibility for solvent exposure. Direct-coordinate mode requires reference sequence and PDB bytes and returns mapped positions.

Input parameters:

- `candidates` (array, required): Caller-supplied candidate records; required nested fields depend on this operation.
- `mappingMode` (string, required): DIRECT_COORDINATE uses supplied PDB and reference sequence; FIXTURE replays an exact case.
- `referenceSequence` (string): Protein sequence whose positions are aligned to PDB residues.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `structureId` (string, required): Stable identifier of the supplied or retrieved structure.
- `structurePdbBase64` (string): Base64-encoded protein PDB coordinate bytes for direct computation.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `calculate_surface_accessibility` (~162 tokens)

Calculate relative solvent accessibility for mapped residues with FreeSASA on supplied PDB coordinates, or replay an exact fixture. Use after map_epitopes_to_structure when asking whether residues are exposed; use calculate_structure_confidence for model pLDDT instead. Live computation requires FreeSASA and PDB bytes; output is computed accessibility, not epitope probability.

Input parameters:

- `mappings` (array, required): Candidate-to-structure residue intervals used to calculate accessibility.
- `method` (string, required): Algorithm or provider method selected for this operation; inspect allowed schema values.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `structurePdbBase64` (string): Base64-encoded protein PDB coordinate bytes for direct computation.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `calculate_structure_confidence` (~214 tokens)

Extract per-residue AlphaFold pLDDT from supplied AlphaFold PDB bytes or summarize supplied confidence metrics. Use to inspect local model confidence, not solvent exposure or epitope probability; experimental PDB B-factors are not accepted as pLDDT. Returns residue scores or a metric summary with source context.

Input parameters:

- `confidenceMetrics` (object): Caller-supplied confidence metrics when no AlphaFold PDB is parsed.
- `modelSource` (string): Origin of a confidence model; AlphaFold pLDDT requires ALPHAFOLD_DB.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `sourceStatus` (string, required): Provenance label for the supplied structure or compound.
- `structureArtifactRef` (string): Reference identifying the supplied structure-coordinate artifact.
- `structureId` (string, required): Stable identifier of the supplied or retrieved structure.
- `structurePdbBase64` (string): Base64-encoded protein PDB coordinate bytes for direct computation.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `detect_binding_pockets` (~164 tokens)

Run fpocket on supplied PDB coordinates to identify geometric binding pockets, or replay an exact fixture. Use after structure validation for pocket exploration; use run_docking to score a prepared receptor-ligand pair. Live mode needs the fpocket binary and PDB bytes; pocket scores are computational descriptors.

Input parameters:

- `method` (string, required): Algorithm or provider method selected for this operation; inspect allowed schema values.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `structureArtifactRef` (string, required): Reference identifying the supplied structure-coordinate artifact.
- `structureId` (string, required): Stable identifier of the supplied or retrieved structure.
- `structurePdbBase64` (string): Base64-encoded protein PDB coordinate bytes for direct computation.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `create_molstar_view` (~213 tokens)

Package supplied protein and optional ligand PDB coordinates into an interactive Mol* HTML viewer, or return an exact fixture reference. Use when a client needs a 3D visualization after structure or docking work; this does not calculate a new pose. Returns HTML bytes whose viewer loads its library from a CDN.

Input parameters:

- `ligandArtifactRef` (string): Reference identifying the ligand coordinate artifact represented in the view.
- `ligandPdbBase64` (string): Base64-encoded ligand PDB coordinates to embed in a 3D view.
- `mode` (string, required): Execution or visualization mode; inspect enum choices and required inputs for each.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `structureArtifactRef` (string, required): Reference identifying the supplied structure-coordinate artifact.
- `structurePdbBase64` (string): Base64-encoded protein PDB coordinate bytes for direct computation.
- `viewId` (string, required): Caller-chosen identifier for the generated Mol* view.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `fetch_compound` (~137 tokens)

Retrieve compound identity and SMILES from configured PubChem access or replay an exact fixture. Use with a known compound reference before validation or ligand preparation; this does not calculate descriptors. LIVE_ONLY requires PubChem access and returns source provenance.

Input parameters:

- `compoundRef` (string, required): Provider compound reference or exact fixture key; PubChem uses its CID.
- `fallbackPolicy` (string, required): Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `source` (string, required): Selected remote provider or exact fixture source.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `validate_compound` (~136 tokens)

Parse and canonicalize supplied SMILES with RDKit for live-sourced compounds, or validate an explicit fixture record. Use before deduplication, descriptors, or ligand preparation; this checks chemical syntax and identity, not biological activity. RDKit unavailability returns a structured failure for the live path.

Input parameters:

- `compoundId` (string, required): Stable identifier for the supplied compound within this run.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `smiles` (string, required): Chemical structure encoded as a SMILES string.
- `sourceStatus` (string, required): Provenance label for the supplied structure or compound.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `deduplicate_compounds` (~101 tokens)

Compare supplied compounds by RDKit canonical isomeric SMILES and InChIKey when live chemistry is requested. Use after validate_compound to collapse chemical identity duplicates; this is distinct from remove_duplicate_candidates, which handles epitope positions. Returns canonical groups and preserves input provenance.

Input parameters:

- `compounds` (array, required): Compound records to compare by canonical chemical identity.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `calculate_molecular_descriptors` (~138 tokens)

Calculate molecular descriptor values for a supplied SMILES using the selected RDKit or lightweight method. Use after validate_compound for chemistry features; this does not predict binding or prepare 3D ligand coordinates. RDKit mode requires its runtime, while lightweight estimates are explicitly identified as such.

Input parameters:

- `compoundId` (string, required): Stable identifier for the supplied compound within this run.
- `method` (string, required): Algorithm or provider method selected for this operation; inspect allowed schema values.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `smiles` (string, required): Chemical structure encoded as a SMILES string.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `prepare_ligand` (~149 tokens)

Generate a 3D SDF and Meeko PDBQT from supplied SMILES using configured RDKit and Meeko, or return an exact fixture reference. Use before run_docking for a ligand; calculate_molecular_descriptors does not produce docking coordinates. Live preparation returns artifact bytes and hashes and fails if a required runtime is absent.

Input parameters:

- `compoundId` (string, required): Stable identifier for the supplied compound within this run.
- `preparationMethod` (string, required): Preparation backend, such as configured Meeko or exact fixture mode.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `smiles` (string, required): Chemical structure encoded as a SMILES string.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `prepare_receptor` (~163 tokens)

Convert supplied protein PDB coordinates and selected chains into receptor PDBQT with Meeko, or return an exact fixture reference. Use before run_docking for the receptor; validate_structure checks coordinates but does not prepare charges or PDBQT. Live preparation requires the Meeko runtime and returns artifact bytes.

Input parameters:

- `chainIds` (array, required): Protein chain identifiers selected from the supplied structure.
- `preparationMethod` (string, required): Preparation backend, such as configured Meeko or exact fixture mode.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `structureId` (string, required): Stable identifier of the supplied or retrieved structure.
- `structurePdbBase64` (string): Base64-encoded protein PDB coordinate bytes for direct computation.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `validate_docking_box` (~140 tokens)

Validate the center and size of a proposed docking search box and calculate its volume. Use before run_docking to catch invalid box geometry; this does not run Vina or establish a binding site. Returns validated dimensions or a structured validation failure.

Input parameters:

- `center` (object, required): Docking-box center coordinates x, y, and z in angstroms.
- `dockingBoxId` (string, required): Caller-chosen identifier for the validated docking search box.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `size` (object, required): Docking-box edge lengths x, y, and z in angstroms.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `run_docking` (~345 tokens)

Run configured AutoDock Vina on receptor and ligand PDBQT bytes inside a supplied box, or replay an exact fixture. Use after prepare_receptor, prepare_ligand, and validate_docking_box; LIVE_ONLY requires Vina and never silently substitutes a fixture. Returns scored coordinate poses, viewer HTML, and ZIP bytes; runtime can be substantial and scores are computational estimates.

Input parameters:

- `box` (object): Docking search-box center and size in receptor-coordinate angstroms.
- `cpu` (integer): Number of CPU workers to request for the Vina run.
- `dockingBoxId` (string, required): Caller-chosen identifier for the validated docking search box.
- `exhaustiveness` (integer): Vina search-effort parameter; larger values may take longer.
- `fallbackPolicy` (string, required): Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.
- `ligandId` (string, required): Caller-chosen ligand identifier for this docking run.
- `ligandPdbqtBase64` (string): Base64-encoded prepared ligand PDBQT bytes for Vina.
- `mode` (string, required): Execution or visualization mode; inspect enum choices and required inputs for each.
- `numModes` (integer): Maximum Vina ligand poses to return.
- `receptorId` (string, required): Caller-chosen receptor identifier for this docking run.
- `receptorPdbqtBase64` (string): Base64-encoded prepared receptor PDBQT bytes for Vina.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `seed` (integer): Random seed for reproducible Vina search when supplied.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `cluster_docking_poses` (~202 tokens)

Group supplied Vina ligand poses by coordinate RMSD using DBSCAN or hierarchical clustering, or replay an exact fixture. Use after run_docking to summarize pose diversity; this does not redock or measure affinity. Direct mode requires matching pose records and PDBQT bytes and returns cluster assignments.

Input parameters:

- `dockingRunId` (string, required): Identifier of the docking run whose poses or complex are analyzed.
- `method` (string, required): Algorithm or provider method selected for this operation; inspect allowed schema values.
- `poses` (array, required): Pose records whose IDs and coordinates correspond to the supplied PDBQT models.
- `posesPdbqtBase64` (string): Base64-encoded multi-model Vina pose PDBQT bytes for RMSD clustering.
- `rmsdThresholdAngstrom` (number): Ligand RMSD distance cutoff in angstroms for grouping poses.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `extract_interactions` (~173 tokens)

Run PLIP on a supplied protein-ligand complex PDB to identify computed contact geometry, or replay an exact fixture. Use after run_docking when a representative pose has been exported; this does not experimentally measure binding. Live mode requires PLIP and returns structured contacts plus the original XML artifact.

Input parameters:

- `complexPdbBase64` (string): Base64-encoded protein-ligand complex PDB bytes from a representative pose.
- `dockingRunId` (string, required): Identifier of the docking run whose poses or complex are analyzed.
- `method` (string, required): Algorithm or provider method selected for this operation; inspect allowed schema values.
- `representativePoseIds` (array, required): Pose IDs whose complex should be examined for contacts.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `generate_report` (~165 tokens)

Render the supplied approved report snapshot into requested JSON, Markdown, or CSV artifacts. Use after evidence review when a report is needed; export_candidates is for candidate rows and export_research_package is for a ZIP. Returns inline file bytes with lengths and SHA-256 hashes; it does not independently fetch evidence.

Input parameters:

- `idempotencyKey` (string, required): Caller-supplied stable key for repeatable export identity.
- `outputFormats` (array, required): File formats to render from the supplied report snapshot.
- `reportSnapshot` (object): Caller-supplied approved report data to render; no evidence retrieval occurs.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `templateVersion` (string, required): Version of the report layout used to render artifacts.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `export_candidates` (~148 tokens)

Serialize supplied candidate records into JSON or CSV with raw and normalized scores kept separate. Use after candidate review for a table export; generate_report produces a broader report. Returns file bytes and checksum metadata, not new scientific scores.

Input parameters:

- `candidateSnapshot` (array): Caller-supplied reviewed candidate rows to serialize; no new scores are calculated.
- `categories` (array, required): Candidate categories to include in the export.
- `format` (string, required): Requested structure or export format, as enumerated by this tool.
- `idempotencyKey` (string, required): Caller-supplied stable key for repeatable export identity.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `visualize_results` (~120 tokens)

Build a deterministic visualization view model from supplied evidence for the selected chart or graph type. Use when a UI will render results; create_molstar_view is for coordinate-based 3D HTML. Returns view-model data, not a PNG or an independent scientific analysis.

Input parameters:

- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `visualizationSnapshot` (object): Caller-supplied data for building a view model; no image is rendered.
- `visualizationType` (string, required): Named chart or graph view-model type to construct.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `explain_candidate` (~226 tokens)

Explain a fixed candidate category and score from supplied component scores, rule outcomes, and provenance. Use after ranking and constraints when a researcher needs a decision rationale; this cannot change scientific values. Deterministic mode uses only supplied evidence; optional LLM paraphrase needs its configured runtime.

Input parameters:

- `audience` (string, required): Intended reader of the candidate explanation.
- `candidateKey` (string, required): Stable key identifying one epitope candidate across evidence stages.
- `category` (string, required): Final candidate decision category being explained.
- `componentScores` (object, required): Named score components that contributed to the fixed final score.
- `explanationMode` (string, required): Choose deterministic explanation or configured LLM paraphrase.
- `finalScore` (number, required): Already computed final candidate score in the unit interval.
- `provenanceStatuses` (array, required): Source-status labels associated with the candidate evidence.
- `ruleOutcomes` (array, required): Previously computed rule outcomes supporting an explanation.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `trackRank` (integer, required): Existing rank within the candidate track.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `export_workflow_trace` (~135 tokens)

Serialize supplied ordered workflow events into a redacted JSON trace artifact. Use for audit or reproducibility after a workflow; generate_report is for the scientific summary. Returns inline bytes and SHA-256 metadata while omitting secrets and private reasoning.

Input parameters:

- `idempotencyKey` (string, required): Caller-supplied stable key for repeatable export identity.
- `redactionProfile` (string, required): Named policy for omitting private trace content from export.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `traceEvents` (array): Ordered caller-supplied events to serialize after redaction.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `describe_agentic_workflow` (~114 tokens)

Describe the bounded workflow manifest, stage permissions, and approval gates without running tools. Use to inspect orchestration before run_agentic_workflow; this is a description, not a live scientific call. Returns the declared stages and tool permissions.

Input parameters:

- `includeFutureInterfaces` (boolean, required): Whether to describe declared future interfaces as well as current stages.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `runIntent` (string, required): Short description of the planned research workflow to inspect.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `run_agentic_workflow` (~191 tokens)

Execute caller-supplied approved typed toolCalls in bounded stage order, or return a plan if no calls are supplied. Use when the client has already selected inputs and allowed tools; describe_agentic_workflow only inspects the manifest. The tool does not autonomously invent calls, and approval gates pause rather than self-approve.

Input parameters:

- `agentMode` (string, required): Choose deterministic policy execution or an enabled LLM-assisted mode.
- `approvedToolNames` (array, required): Exact tool names the caller permits this workflow to invoke.
- `objective` (string, required): Research objective supplied by the caller to label the bounded workflow.
- `requireHumanApproval` (boolean, required): Pause at gated workflow stages until the caller supplies approval.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.
- `toolCalls` (array): Typed, caller-selected tool invocations to execute in stage order.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `chat_with_research_agent` (~142 tokens)

Answer a researcher question from the supplied evidence summary under the bounded agent policy. Use for an explanation after evidence has been assembled; this tool does not independently retrieve papers, predict epitopes, or run the workflow. Deterministic mode cites supplied evidence; LLM mode requires configured model access.

Input parameters:

- `agentMode` (string, required): Choose deterministic policy execution or an enabled LLM-assisted mode.
- `evidenceSummary` (object, required): Evidence already assembled by the caller; no retrieval is performed.
- `question` (string, required): Researcher question to answer using only evidenceSummary.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

### `export_research_package` (~189 tokens)

Build a checksummed research ZIP from a supplied package snapshot and selected sections. Use after reports and artifacts are ready for handoff; generate_report exports individual report files. It serializes supplied evidence and metadata rather than launching predictors or docking.

Input parameters:

- `idempotencyKey` (string, required): Caller-supplied stable key for repeatable export identity.
- `includeAgentTrace` (boolean, required): Whether to include supplied agent trace data in the package.
- `includeChemistry` (boolean, required): Whether to include supplied chemistry artifacts in the package.
- `includeDocking` (boolean, required): Whether to include supplied docking artifacts in the package.
- `includeStructure` (boolean, required): Whether to include supplied structure artifacts in the package.
- `packageSnapshot` (object): Complete caller-supplied research snapshot to serialize into the ZIP.
- `runId` (string, required): Caller-chosen identifier linking this call to one research run.

Output parameters:

- `data` (object): Tool-specific result fields on success.
- `error` (object): Structured failure on unsuccessful execution.
- `meta` (object): Run identifiers, timings, and input/output hashes.
- `ok` (boolean): Whether execution completed successfully.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/ajey95-immunograph/ghcr-io-ajey95-immuno-graph#diagnostics

## Score history

- 2026-11-05: 40
- 2026-11-04: 39
- 2026-11-03: 39
- 2026-11-02: 39
- 2026-11-01: 38
- 2026-10-31: 38

## Common questions

### What is the ImmunoGraph MCP server?

ImmunoGraph MCP is listed in the public MCP registry as io.github.Ajey95/immunograph. Provenance-aware computational epitope research tools with reproducible offline demonstrations. This page covers its container image (ghcr.io/ajey95/immuno-graph).

### Is the ImmunoGraph MCP server safe to use?

ImmunoGraph MCP scores 40 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the ImmunoGraph MCP server expose?

ImmunoGraph MCP exposes 46 tools: validate_sequence, generate_candidate_peptides, predict_mhci, predict_mhcii, predict_bcell, and 41 more. Their descriptions and schemas cost roughly 7,653 tokens of context every time the server is loaded.

### Is the ImmunoGraph MCP server still maintained?

ImmunoGraph MCP is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the ImmunoGraph MCP server under?

ImmunoGraph MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- GitHub Container Registry: https://ghcr.io/ajey95/immuno-graph
- Repository: https://github.com/Ajey95/immuno-graph
- Changelog RSS feed: https://verifymcp.io/servers/ajey95-immunograph/ghcr-io-ajey95-immuno-graph.xml
- Changelog JSON feed: https://verifymcp.io/servers/ajey95-immunograph/ghcr-io-ajey95-immuno-graph.json
- HTML version of this page: https://verifymcp.io/servers/ajey95-immunograph/ghcr-io-ajey95-immuno-graph
