Skip to main content
Glama
Ajey95

ImmunoGraph MCP

ImmunoGraph MCP

A standard Model Context Protocol server for computational epitope research. Call 46 typed tools for sequence processing, immune evidence, structure and chemistry analysis, docking, and reviewable exports. Results carry provenance so a live provider result stays distinct from a fixture or synthetic demonstration.

Problem · Who it is for · User flow · Get started · 3D outcomes · All 46 tools · Contribute

IMPORTANT

ImmunoGraph supportscomputational research, not clinical or experimental validation. A predicted epitope, docking pose, score, or exported 3D model does not establish binding, vaccine efficacy, or safety. Fixture and synthetic results are demonstrations and are labelled as such.

The problem

An epitope research workflow crosses different kinds of software: sequence processing, immune predictors, HLA coverage, structure databases, molecular preparation, docking, interaction analysis, and reporting. Each step has its own input format, runtime, and scientific assumptions. When an LLM or research application chains them together, it must also keep track of which inputs and methods produced each result. A plausible looking score or 3D view is easy to misread if its source is missing.

ImmunoGraph gives an MCP host one typed interface for these steps. The host can discover and call individual tools, pass outputs between them, and inspect explicit source labels and exported bytes. This reduces custom integration code for a reviewable computational workflow; it does not replace scientific judgment or validate a prediction by itself.

Related MCP server: FlowProof

Who it is for

Audience

Typical use

Computational immunology and vaccine research teams

Assemble and review sequence, MHC, B-cell, coverage, and structural evidence for candidate exploration

Structural bioinformatics and medicinal chemistry researchers

Prepare coordinates, run configured docking tools, inspect poses and contacts, and export the actual files

Developers building LLM research assistants

Expose typed scientific operations through standard MCP instead of writing a separate adapter for every step

Educators and reproducibility reviewers

Demonstrate a workflow with clearly marked fixtures, then inspect method boundaries, provenance, and artifacts

The outputs are for research and education. Clinical decisions, efficacy claims, and experimental validation require independent methods and evidence.

What you can do

Explore

Analyze

Review and share

Validate FASTA, generate peptide windows, retrieve PDB structures and PubChem compounds

Call enabled IEDB predictors; calculate consensus and coverage; run RDKit, FreeSASA, fpocket, Meeko, Vina, and PLIP where installed

Rank caller-supplied evidence; export CSV, PDB, SDF, PDBQT, docking poses, Mol* or docking viewers, and a checksummed research ZIP

This is one server with 46 tools, not 46 independent live data providers. Each tool is callable on its own. A client passes results between calls when building a workflow.

User flow

The researcher works in an MCP-enabled chat or application. The client chooses the calls and carries evidence forward; ImmunoGraph executes each requested operation and returns a typed result.

Step

Researcher or client action

ImmunoGraph response

1. Connect

Add the stdio server to an MCP host; enable only the live connectors needed for the study

The host discovers 46 tools and their input schemas

2. Define inputs

Provide a FASTA sequence and study criteria

validate_sequence checks and hashes the sequence; generate_candidate_peptides enumerates real peptide windows

3. Gather evidence

Request available MHC-I/II, B-cell, population, or other calculations

Each call returns scores or a structured failure with source status; live predictors require their configured service

4. Prioritize

Pass selected evidence, thresholds, and coverage data into the scoring and constraint tools

Normalized scores, consensus, exclusions, and ranked candidates depend on the supplied evidence

5. Inspect structure

Optionally fetch PDB/compound data and run accessibility, pocket, ligand, docking, or contact tools

Coordinate-based outputs, pose files, 3D viewer HTML, and analysis data where the scientific runtime is installed

6. Review and export

Inspect source labels and parameters, then request reports, CSV, trace, or research ZIP

File bytes with lengths and SHA-256 hashes for independent saving and verification

This flow is modular: a user can call one tool without running every stage. run_agentic_workflow executes caller-supplied, approved tool calls; without those calls it returns a plan rather than silently launching a full study. See architecture and the tool reality matrix for exact execution boundaries.

Get started

Install the public release

Node.js 20 or newer is required. The versioned tarball is hosted on GitHub and installs with npm; the immunograph-mcp name is not yet published on the npm registry.

npm install --global https://github.com/Ajey95/immuno-graph/releases/download/v0.2.1/immunograph-mcp-0.2.1.tgz

Register the installed command in an MCP host that supports stdio servers:

{
  "mcpServers": {
    "immunograph": {
      "command": "immunograph-mcp"
    }
  }
}

The server speaks MCP on stdio, so launch it through your host. If the host cannot find the globally installed command, configure its absolute path. The GitHub release also includes the source and a SHA-256 checksum for the tarball. The downloaded public tarball matched that checksum.

Run the public container

The official MCP Registry entry points to the public OCI image. For a local stdio host, use:

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

The container also supports guarded Streamable HTTP at /mcp. See HTTP deployment for its required security settings.

Build from source

git clone https://github.com/Ajey95/immuno-graph.git
cd immuno-graph
npm ci
npm run check
npm start

npm start serves stdio MCP. npm run check runs the software tests, build, all-tool example calls, semantic audit, dependency audit, and package dry run. For a host, point command at node and args at the absolute path to dist/index.js.

How it works

flowchart LR
    A["FASTA · PDB · SMILES"] --> H["MCP host"]
    H --> S["ImmunoGraph<br/>46 typed tools"]
    S --> D["Local calculations<br/>and exact fixtures"]
    S --> L["Optional live<br/>connectors"]
    D --> R["Results + provenance"]
    L --> R
    R --> O["Reports · 3D files · ZIP"]

The host chooses which tools to call. ImmunoGraph validates typed inputs, executes a handler, and returns structured success or failure data with run metadata and source labels. The server does not silently run a full study or treat fixture values as live evidence. See architecture for transport and module details.

Technical design

Concern

Implementation

Why it matters

Client interoperability

Official MCP SDK; stdio for local hosts and guarded Streamable HTTP for deployments

One discoverable tool contract works across MCP-capable clients

Input and result contracts

Zod schemas, typed handlers, structured MCP results, explicit errors

Clients can validate arguments and handle failures programmatically

Scientific provenance

Source status, method/run metadata, and versioned exact-match fixtures

Reviewers can distinguish configured live work from offline demonstrations

Export integrity

Inline artifact bytes, byte lengths, and SHA-256 digests

A host can save actual PDB/PDBQT/CSV/ZIP files and verify them

Operational boundaries

Optional connectors and local scientific binaries are configured separately

Missing providers fail explicitly or use only the requested, labelled fallback

The registry entry points to the published OCI image. Optional scientific binaries, model downloads, and third-party service availability remain separate runtime requirements.

A research workflow

flowchart LR
    FASTA["Protein FASTA"] --> V["Peptide windows"]
    V --> E["Immune evidence"]
    E --> R["Constraints + ranking"]
    R --> X["Reviewable exports"]
    E -.->|Optional| S["Structure + docking"]
    S -.-> X

These are separate MCP calls. Rankings and reports depend on the evidence the client supplies. With live prediction disabled, an arbitrary new protein has no automatic scientific binding result.

Docking and 3D files

Configured live tools can use actual coordinates rather than decorative models:

flowchart LR
    P["Protein PDB"] --> R["Meeko receptor<br/>PDBQT"]
    L["Compound / SMILES"] --> M["RDKit + Meeko ligand<br/>SDF + PDBQT"]
    R --> V["AutoDock Vina"]
    M --> V
    V --> POSE["Pose PDBQT<br/>complex PDB"]
    POSE --> VIEW["3D viewer HTML"]
    POSE --> PLIP["PLIP contacts"]
    POSE --> ZIP["Research ZIP"]

Real 3D outcomes

1IEP + imatinib: exported top Vina pose. This figure is rendered from a saved complex PDB produced by a LIVE_ONLY MCP docking call. Panel A traces the protein Cα coordinates and shows the ligand; panel B shows the ligand and protein atoms within 5 Å. The render script reproduces the image from those coordinates. This is a docking capability example, not an epitope candidate; the pose score is a computational estimate, not measured affinity.

Two coordinate-based 3D views of the 1IEP protein and a docked imatinib pose: a protein C-alpha trace and a close view of ligand atoms near protein atoms.

1UYD + PubChem CID 2244: three computed poses. This figure comes from the live docking research ZIP, which includes the receptor, ligand, Vina poses, complex, and image. Its run provenance and summary identify the sources and nine generated poses; the image shows three of them. The callouts show distances calculated from the coordinates; dashed polar contacts are inferred geometry, not experimentally established bonds.

The live docking guide documents inputs, runtime requirements, example files, and verification of the exported pose chain. An interactive 3D viewer visualizes returned coordinate data; neither image establishes experimental binding.

Provenance you can inspect

Result path

Meaning

Scientific use

LIVE

A configured external provider or local scientific runtime executed on supplied inputs

Review its method, parameters, and limitations

FIXTURE

An approved, exact-match offline replay

Demonstration only

SYNTHETIC

Deterministic teaching data generated by a demo tool

Demonstration only

Caller-supplied calculations

Ranking, constraints, calibration, and reporting transform supplied evidence

Depends on the quality and provenance of that evidence

The 46-tool reality matrix records what each tool actually computes or fetches and the verification performed. In particular, GraphBepi is fixture-only in this release; Parker is a hydrophilicity calculation; BepiPred-3.0 is the supported live B-cell option when enabled.

Tool catalog

Group

Tools

Examples

Prediction

6

FASTA validation, peptide windows, MHC-I/II, B-cell

Evidence and prioritization

9

Score normalization, consensus, HLA coverage, ranking

Constraints

5

Overlap, duplicates, thresholds, candidate rules

Structure

7

RCSB/AlphaFold, accessibility, pockets, Mol*

Chemistry

5

PubChem, RDKit descriptors, ligand preparation

Docking

5

Receptor preparation, Vina, pose clustering, PLIP

Reports and utilities

9

CSV/report data, explanations, workflow trace, ZIP

Total

46

One MCP server

See the complete tool catalog and input contracts. To try one call, invoke validate_sequence with:

{
  "fasta": ">protein\nACDEFGHIK",
  "profileVersion": "mvp-v1.0"
}

It returns the normalized sequence, length, and SHA-256 identity, or a structured validation error.

Enable live connectors

Most live connectors are disabled by default. Set flags in the MCP server's environment and install the relevant provider runtime or allow its network endpoint. .env.example lists the settings.

Capability

Switch

Additional requirement

IEDB MHC-I/II, BepiPred-3.0, population coverage

IEDB_LIVE_ENABLED, IEDB_BCELL_ENABLED, IEDB_POPULATION_COVERAGE_ENABLED

Access to the relevant IEDB APIs

RCSB PDB, AlphaFold DB, PubChem

RCSB_PDB_ENABLED, ALPHAFOLD_DB_ENABLED, PUBCHEM_ENABLED

Provider network access

RDKit, Meeko, FreeSASA, fpocket

See environment configuration

Installed Python packages or native binaries

AutoDock Vina and PLIP

VINA_ENABLED, PLIP_ENABLED

Installed runtimes and valid coordinate inputs

If a required provider or binary is unavailable, the tool returns an explicit failure or a labelled fallback according to the requested policy. The npm tarball and container do not bundle optional scientific binaries or model downloads.

HTTP deployment

npm run start:http serves http://127.0.0.1:3000/mcp locally, with GET /health as a health probe. For a remote endpoint, set HOST=0.0.0.0, a long IMMUNOGRAPH_API_KEY, exact IMMUNOGRAPH_ALLOWED_HOSTS and IMMUNOGRAPH_ALLOWED_ORIGINS, and terminate TLS at your ingress. The image runs the HTTP entry point by default; publishing the image does not create a managed endpoint. Read SECURITY.md before deployment.

Verification and scope

The CI workflow checks Windows and Linux on Node.js 20 and 22. A standard MCP client has exercised all 46 documented examples; the semantic audit checks calculations, provenance, and artifact hashes. The v0.2.1 container release run tested 46-tool discovery and a real call over Docker stdio, guarded HTTP, and a test TLS ingress. The protocol audit also checks that every tool advertises parameter descriptions and a structured result schema. These checks establish software behavior and packaging, not the accuracy of every scientific method or continuous availability of third-party services.

The motivation is familiar in epitope research: studies such as Grifoni et al. (2020) and Ferreira et al. (2021) combine sequence analysis, prediction, conservation, and other evidence across tools. ImmunoGraph makes computational handoffs easier to inspect; independent review and experimental validation remain necessary.

Contribute and get help

Contributions and reproducible bug reports are welcome. Start with CONTRIBUTING.md, open an issue, and report security concerns through SECURITY.md. Released changes are in CHANGELOG.md. ImmunoGraph is available under the MIT license.

Available Tools

46 tools
apply_constraint_rulesA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
snapshotHashYesSHA-256 identity of the immutable evidence snapshot.
baseConstraintsYesPreviously evaluated base rule inputs for final constraint application.
overlapThresholdYesMinimum overlap fraction used by the final overlap rule.
overlapCandidatesYesCandidate records whose positional overlaps enter final constraint rules.
ruleProfileVersionYesVersion of the biological constraint rule profile.
duplicateCandidatesYesCandidate records to evaluate for exact positional duplication.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety/idempotency profile is covered. The description adds real context beyond that: the snapshot hash binds the decision to supplied evidence and the tool performs no data fetching, clarifying that this is a pure deterministic evaluation over provided inputs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose, prerequisites/ordering, and a scope/immutability constraint. The key information (what it does) is front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the schema is fully documented. The description supplies the pipeline context and immutability/no-fetch semantics needed to call it correctly; only edge behavior on rule failure is unmentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters and baseline is 3. The description goes beyond it by explaining the semantic role of snapshotHash (binding the decision to supplied evidence) and by framing the three candidate arrays as the rule inputs for a single snapshot.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (apply), the exact rule set (base, duplicate, overlap), and the scope (one immutable candidate snapshot returning final rule outcomes). It is clearly distinguishable from the three sibling tools it consumes, since this is the terminal aggregation step rather than a detection/validation step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the prerequisite tool sequence: use after validate_thresholds, remove_duplicate_candidates, and detect_overlapping_epitopes when their inputs are ready. It also sets a negative scope boundary ('does not fetch new evidence'), though it doesn't say what to do if prerequisites are unmet.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_molecular_descriptorsA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
methodYesAlgorithm or provider method selected for this operation; inspect allowed schema values.
smilesYesChemical structure encoded as a SMILES string.
compoundIdYesStable identifier for the supplied compound within this run.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only and idempotent semantics, and the description adds real context beyond them: RDKit mode has a runtime dependency, and lightweight mode produces estimates that are explicitly labeled as such (a quality/provenance disclosure). It does not say what happens if the RDKit runtime is absent, which is the one remaining behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action and followed by placement and exclusions; every clause carries information. Slight density in the second sentence ('does not predict binding or prepare 3D ligand coordinates') bundles two distinct exclusions, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values needn't be described, and the description covers prerequisites, method trade-offs, and scope exclusions. What's missing is modest: whether descriptor coverage varies by method, and the failure mode when RDKit is unavailable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: 'method' selects between RDKit and lightweight algorithms with different fidelity, and 'smiles' is the sole structure input to the calculation. It still doesn't enumerate allowed method values or explain how runId/compoundId scope the result.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (calculate) plus a specific resource (molecular descriptor values) with the input medium (SMILES) and the two method families (RDKit vs lightweight). It draws clear boundaries against siblings such as predict_synthetic_binding and prepare_ligand by saying it does not predict binding or prepare 3D coordinates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly positions the call in the workflow ('Use after validate_compound') and adds two negative conditions (no binding prediction, no 3D ligand prep). It stops short of naming the specific sibling tools to use for those excluded jobs, so routing is implied rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_population_coverageA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdNoCaller-chosen identifier linking this call to one research run.interactive-run
classModeNoWhether coverage uses class-I, class-II, or combined associations.COMBINED
associationsYesPeptide-to-HLA restrictions used for population coverage calculation.
populationIdsYesPopulation identifiers requested from the coverage source or synthetic dataset.
fallbackPolicyNoAllowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.LIVE_THEN_CACHE_THEN_FIXTURE

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover read-only/idempotent safety, and the description adds real behavioral context beyond them: results carry source provenance, and LIVE_ONLY mandates the live service with no cache/fixture substitution. It stops short of describing failure behavior when the live service is unavailable or how partial coverage is reported.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: what it does first, when to use it second, source semantics last. There is no filler and no restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations plus 100% schema coverage handle safety and parameters. The description supplies the remaining essentials: calculation scope, source authority, provenance, and sibling disambiguation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the fallbackPolicy enum semantics, so the schema already carries parameter meanings and the baseline of 3 applies. The description only echoes the popular concept of 'allele restrictions and population IDs' without adding format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Estimate HLA population coverage for supplied peptide-allele associations,' with the input domain narrowed to peptide-allele associations. It also explicitly contrasts with the sibling calculate_synthetic_population_coverage, so the agent can discriminate without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States the precondition for use ('when the allele restrictions and population IDs are known') and routes the demonstration case to calculate_synthetic_population_coverage explicitly. The LIVE_ONLY/fixture caveat adds a second usage constraint rather than leaving it to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_structure_confidenceA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
modelSourceNoOrigin of a confidence model; AlphaFold pLDDT requires ALPHAFOLD_DB.
structureIdYesStable identifier of the supplied or retrieved structure.
sourceStatusYesProvenance label for the supplied structure or compound.
confidenceMetricsNoCaller-supplied confidence metrics when no AlphaFold PDB is parsed.
structurePdbBase64NoBase64-encoded protein PDB coordinate bytes for direct computation.
structureArtifactRefNoReference identifying the supplied structure-coordinate artifact.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the read-only and idempotent profile, and the description adds genuine behavioral context: the AlphaFold-only provenance constraint and the rejection of experimental B-factors. It also hints at the output shape (residue scores vs. metric summary with source context), which goes beyond what the annotations declare.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primary action and mode, followed by the disambiguation clause, then the return summary. The final sentence largely restates what the output schema already declares, so it is slightly less tight than it could be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full parameter descriptions, and annotations, the description only needs to supply routing and constraint context — which it does. The main omission is untested edge behavior, e.g. what happens if both PDB bytes and confidence metrics are supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's framing of the two input modes (PDB bytes vs. caller-supplied metrics) mildly reinforces the branch semantics between structurePdbBase64 and confidenceMetrics, but adds no formats, limits, or mutual-exclusivity rules beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Extract per-residue AlphaFold pLDDT') and covers the second mode ('summarize supplied confidence metrics'). It explicitly distinguishes itself from adjacent tools (solvent exposure, epitope probability), so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use ('inspect local model confidence') plus explicit exclusions — not solvent exposure, not epitope probability — and a hard input constraint ('experimental PDB B-factors are not accepted as pLDDT'). It stops short of naming the sibling tools it defers to, so the exclusion is descriptive rather than a direct routing instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_surface_accessibilityA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
methodYesAlgorithm or provider method selected for this operation; inspect allowed schema values.
mappingsYesCandidate-to-structure residue intervals used to calculate accessibility.
structurePdbBase64NoBase64-encoded protein PDB coordinate bytes for direct computation.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the description isn't needed for safety. It still adds real context: the live path requires FreeSASA and PDB bytes, and the output is computed accessibility rather than epitope probability. It stops short of saying what happens when FreeSASA is unavailable or how the fixture-replay path is selected, which keeps it off a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler: capability and engine first, usage and routing second, prerequisites and output caveat last. Every clause carries information an agent needs to select and invoke correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value detail is correctly omitted, and the description covers prerequisites, the computed-not-probability caveat, and sibling routing. The one gap is the "replay an exact fixture" mode, which is asserted but never tied to a concrete parameter or condition, leaving the agent to infer how that path is invoked.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already documented and the baseline is 3. The description does not clarify the weakly-specified `method` parameter (it only echoes the schema's "inspect allowed schema values" and there are no enums) nor how fixture replay is triggered relative to `structurePdbBase64`. It adds little meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (calculate relative solvent accessibility) plus the engine (FreeSASA) and the two operating modes (live computation on supplied PDB coordinates, or replay of a fixture). It also names the sibling it is not (calculate_structure_confidence for pLDDT), so an agent can distinguish it without reading either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit ordering constraint ("Use after map_epitopes_to_structure when asking whether residues are exposed") and an explicit alternative for the adjacent question ("use calculate_structure_confidence for model pLDDT instead"). Both the when and the when-not are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_synthetic_population_coverageA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdNoCaller-chosen identifier linking this call to one research run.interactive-run
classModeNoWhether coverage uses class-I, class-II, or combined associations.COMBINED
associationsYesPeptide-to-HLA restrictions used for population coverage calculation.
populationIdsYesPopulation identifiers requested from the coverage source or synthetic dataset.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description adds real behavioral context beyond them: the computation is deterministic ('demonstration'), and the result is synthetic regardless of how plausible the numbers look. That last caveat is exactly the kind of misinterpretation risk a mutation-free tool would otherwise leave open. It stops short of describing the numeric output itself, which the output schema covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero redundancy: what it does, the use/avoid rule with an alternative, then the output caveat. The critical warning that the output is synthetic is front-loaded and reinforced at the end.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations cover the safety profile, the output schema covers return shape, and the description supplies the one thing structured fields cannot express: that these numbers must never be read as a population estimate. Complete for an agent to call it correctly and interpret it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so associations, populationIds, runId and classMode are all documented in the schema. The description characterises the input domain ('synthetic HLA-frequency inputs') but adds no per-parameter semantics such as how populationIds resolve against the synthetic dataset versus the authoritative source. Baseline 3 is appropriate when the schema carries the detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Calculate deterministic demonstration coverage') plus the input domain (synthetic HLA-frequency inputs), and explicitly names the sibling it is not — calculate_population_coverage — so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Covers when to use ('teaching or testing the coverage pipeline'), when not to use ('never as a population estimate'), and the concrete alternative ('use calculate_population_coverage for a configured authoritative source'). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calibrate_confidenceA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
methodYesAlgorithm or provider method selected for this operation; inspect allowed schema values.
predictionsYesPredicted values to calibrate or score using the selected method.
evaluationSamplesNoHeld-out labeled samples used to evaluate fitted calibration.
calibrationSamplesNoLabeled examples used only to fit a calibration model.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, idempotent operation. The description adds meaningful behavioral context: fitted modes depend on real labels, rule-based output is not measured reliability, and metrics are only returned where labels support them. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences with the purpose front-loaded and the critical method caveat immediately following. Every sentence adds actionable information with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 5-parameter schema, full schema description coverage, output schema, and read-only annotations, the description covers the key mode-selection and label requirements well. It omits sample-size details, but those are already documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all parameters. The description adds semantic meaning for the method enum by distinguishing fitted Platt/isotonic behavior from rule-based confidence and by tying fitted modes to calibration and evaluation labels.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fitting Platt or isotonic calibration, evaluating on labeled outcomes, or emitting rule-based confidence. It is clear what the tool does, but it does not explicitly differentiate this tool from nearby siblings such as normalize_scores or rank_candidates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear conditional guidance: fitted modes require real calibration and evaluation labels, while rule-based mode has no measured reliability. That is useful when-to-use context, though it does not name sibling alternatives or state explicit when-not-to-use conditions beyond the reliability caveat.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

categorize_candidatesA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
candidatesYesCaller-supplied candidate records; required nested fields depend on this operation.
thresholdsYesNamed score or decision cutoffs supplied by the caller.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful behavioral context by stating the output is deterministic and that categories retain the input evidence boundaries, though it does not discuss validation failures or category edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the action and result, followed immediately by sequencing and a sibling-tool distinction. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex nested-input tool with an output schema, the description covers purpose, timing, determinism, and routing to the correct sibling. A minor gap is that it does not clarify relationships to adjacent steps like validate_thresholds or apply_constraint_rules, but the output schema handles return-value explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters and their nested structure. The description only echoes the broad input categories ('scores, rules, and thresholds') and adds no parameter-specific semantics beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and result ('Assign provisional decision categories and blocking conditions') plus the inputs that drive it ('supplied scores, rules, and thresholds'). It also explicitly separates itself from rank_candidates, which handles numeric ordering rather than category assignment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit sequencing condition ('Use after scoring and rule evaluation') and names the alternative tool for a nearby but different need ('use rank_candidates for numeric ordering, not category assignment'). This is exactly the when-to-use / when-not-to-use guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

chat_with_research_agentA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
questionYesResearcher question to answer using only evidenceSummary.
agentModeYesChoose deterministic policy execution or an enabled LLM-assisted mode.
evidenceSummaryYesEvidence already assembled by the caller; no retrieval is performed.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so safety is covered; the description adds the non-obvious prerequisite that LLM mode requires configured model access, which is real operational guidance. 'Bounded agent policy' and 'deterministic mode cites supplied evidence' hint at behavior but stay abstract, so it does not reach a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: what it does, when to use it, and the mode constraint — front-loaded with zero filler. The only soft cost is the unexplained phrase 'bounded agent policy', which costs a small amount of clarity without wasting space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations cover the safety profile, so the description only needs to frame scope and prerequisites — which it does, including the ordering constraint and the LLM-access requirement. The residual gap is that the 'bounded agent policy' governing answers is never defined, so an agent knows the boundary exists but not where it lies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds value by contrasting the two agentMode paths (deterministic cites supplied evidence, LLM needs model access) and by stressing that evidenceSummary must already be assembled. It does not explain the shape of the evidenceSummary object, but the schema's additionalProperties leaves that open by design.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Answer a researcher question from the supplied evidence summary') and immediately bounds the scope. It goes further than most definitions by naming what the tool explicitly does NOT do (retrieve papers, predict epitopes, run the workflow), which cleanly separates it from run_agentic_workflow and the predict_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use for an explanation after evidence has been assembled' gives a clear triggering condition and ordering constraint relative to the rest of the workflow. The negative list reinforces when not to use it, but no sibling is named as the explicit alternative for the excluded cases, keeping it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cluster_docking_posesA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
posesYesPose records whose IDs and coordinates correspond to the supplied PDBQT models.
runIdYesCaller-chosen identifier linking this call to one research run.
methodYesAlgorithm or provider method selected for this operation; inspect allowed schema values.
dockingRunIdYesIdentifier of the docking run whose poses or complex are analyzed.
posesPdbqtBase64NoBase64-encoded multi-model Vina pose PDBQT bytes for RMSD clustering.
rmsdThresholdAngstromNoLigand RMSD distance cutoff in angstroms for grouping poses.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful behavioral context beyond that: it clarifies that the operation is purely analytical, that direct mode requires matching pose records and PDBQT bytes, and that it returns cluster assignments.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences carry the purpose, workflow position, exclusion, mode prerequisite, and return shape with no filler. The core action is front-loaded before the caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full schema coverage, and read-only/idempotent annotations, the description supplies everything an agent needs to decide to call it and how to satisfy direct mode. It stops short of explaining what 'replay an exact fixture' entails, which is a minor semantic gap for the FIXTURE method.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all six parameters and the enum values. The description still adds value by stating the cross-parameter constraint for direct mode ('matching pose records and PDBQT bytes') and by naming the clustering methods in prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Group supplied Vina ligand poses by coordinate RMSD') and names the supported algorithms. It explicitly distinguishes itself from the sibling run_docking by noting that it 'does not redock or measure affinity', so an agent can tell the two apart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear placement in the workflow ('Use after run_docking to summarize pose diversity') and an explicit exclusion ('does not redock or measure affinity'). What is missing is guidance on when to pick DBSCAN versus HIERARCHICAL versus FIXTURE, which is left to the enum alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compute_consensusA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
groupKeyYesStable identifier for one independent consensus group.
observationsYesCaller-supplied evidence observations; this tool does not fetch them.
configuredRequiredWeightYesTotal weight of evidence methods required by the consensus profile.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the description's added value is scope boundaries: it works only from caller-supplied evidence and does not make a new prediction. That is useful disambiguation for an agent that might expect prediction behavior, but it stops short of noting what happens when required weight is unmet beyond the implied 'completeness' output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and its outputs, then the sequencing and alternative. Every clause earns its place; no repetition of name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values need no explanation, annotations cover the safety profile, and the schema fully documents all four required parameters. The remaining need for an agent is sequencing and scope, both of which are supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, including descriptions for runId, groupKey, observations, and configuredRequiredWeight, so the schema carries parameter meaning. The description only implies that 'group' and 'required weight' must be known before calling and adds no format or constraint detail beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: combine one candidate group of normalized observations into weighted consensus, agreement, and completeness. It distinguishes itself from compute_consensus_batch by scope (one group vs. several independent groups), so an agent can differentiate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ('use after normalize_scores when the group and required weight are known') and names the alternative for the multi-group case. Both the when-to-use and the routing rule are stated, nothing left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compute_consensus_batchA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
groupsYesIndependent candidate groups, each with its own observations and weights.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and an output schema exists, so the safety and return-shape burden is largely carried elsewhere. The description still adds real behavioral context: independence of per-group computation and a one-result-per-group contract. It stops short of mentioning failure behavior when required weight is unmet or the ordering of returned results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what it does, then when to use it, then the return contract. No restatement of the name and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, a full-coverage input schema, and an output schema, the description covers what an agent needs to select and call the tool. Minor omissions remain, e.g. how a group whose observations fail the configured weight requirement is reported, but nothing essential to invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every nested parameter (runId, groupKey, observations, configuredRequiredWeight) is documented in the schema itself. The description's "groups are not pooled" line adds a useful semantic nuance about the groups array but no format or constraint detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Compute weighted consensus") plus the key scope modifier: separately, for multiple candidate groups, in one call. It explicitly contrasts itself with the sibling compute_consensus, so an agent can distinguish the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (repeated compute_consensus calls) and the condition that selects this tool (groups are already assembled). It also rules out an incorrect mental model by stating groups are not pooled together, which is exactly the inference an agent would otherwise make.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_molstar_viewA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
modeYesExecution or visualization mode; inspect enum choices and required inputs for each.
runIdYesCaller-chosen identifier linking this call to one research run.
viewIdYesCaller-chosen identifier for the generated Mol* view.
ligandPdbBase64NoBase64-encoded ligand PDB coordinates to embed in a 3D view.
ligandArtifactRefNoReference identifying the ligand coordinate artifact represented in the view.
structurePdbBase64NoBase64-encoded protein PDB coordinate bytes for direct computation.
structureArtifactRefYesReference identifying the supplied structure-coordinate artifact.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint and idempotentHint already set, the description adds meaningful context: output is HTML bytes and the viewer loads its library from a CDN, a network dependency. It also notes the optional ligand and fixture-reference alternative, though it does not explain when that alternative is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences with no filler; the scope and exclusion are stated up front. The fixture-reference phrase is slightly opaque but does not bloat the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations cover the side-effect profile, so the description need not explain return values in detail. However, the unexplained 'fixture reference' fallback leaves a behavioral branch underspecified for an otherwise complete definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters and the mode enum. The description only restates protein/ligand coordinates and does not clarify artifactRef versus base64 inputs or mode-specific requirements.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Package') and resource ('protein and optional ligand PDB coordinates into an interactive Mol* HTML viewer') and explicitly excludes pose calculation. It does not name or contrast the closest visualisation sibling, visualize_results, so sibling differentiation is incomplete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context ('after structure or docking work') and an exclusion ('this does not calculate a new pose'). It stops short of naming alternatives or prerequisites such as the required runId and viewId, so it is not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deduplicate_compoundsA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
compoundsYesCompound records to compare by canonical chemical identity.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so safety is covered; the description adds real value by disclosing the comparison keys, that output is canonical groups, and that input provenance is preserved. It also flags a dependency on live chemistry, which is behavioral context not present in annotations. It doesn't state what happens if the live chemistry call fails, leaving a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact clauses with zero filler: the mechanism, the ordering/alternative guidance, and the return/provenance behavior. The distinguishing information against the sibling is front-loaded rather than buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and the description nonetheless signals canonical groups plus provenance preservation. For a two-parameter read-only tool this is nearly sufficient; only the failure/fallback behavior of the live-chemistry path is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both runId and compounds (including sourceStatus and smiles) are already documented. The description's mention of preserving input provenance lightly reinforces sourceStatus and canonicalization, but adds no syntax, format, or constraint detail beyond the schema — baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (compare/collapse duplicates) plus resource (compounds) and names the matching criteria (RDKit canonical isomeric SMILES and InChIKey). It explicitly names the sibling it is not — remove_duplicate_candidates, which handles epitope positions — so the agent can disambiguate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit sequencing instruction ("Use after validate_compound") and a condition ("when live chemistry is requested"), plus a clear boundary against remove_duplicate_candidates. It stops short of saying what to do when live chemistry is unavailable or when inputs are already known-unique, so it is strong but not fully exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_agentic_workflowA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
runIntentYesShort description of the planned research workflow to inspect.
includeFutureInterfacesYesWhether to describe declared future interfaces as well as current stages.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered; the description adds meaningful non-execution semantics ("without running tools," "not a live scientific call") and states what it returns (declared stages and tool permissions). It stops short of describing pagination or how approval gates are represented, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and immediately followed by the usage routing. No redundant restatement of the name or filler content; every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full parameter documentation, the description needn't explain return values, and annotations cover safety. It is nearly complete for a read-only inspection tool; the only thin spot is not clarifying what 'bounded' or 'future interfaces' mean behaviorally.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so runId, runIntent, and includeFutureInterfaces are already documented in the schema. The description adds no parameter-level meaning (e.g., how includeFutureInterfaces changes the described output), so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: describing the bounded workflow manifest, stage permissions, and approval gates. It explicitly distinguishes itself from run_agentic_workflow by noting it does not run tools, so an agent can pick it apart from its execution sibling without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use to inspect orchestration before run_agentic_workflow" gives both the timing (before execution) and the alternative tool it complements. The clarifying clause "this is a description, not a live scientific call" reinforces when-not-to-expect-execution, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_binding_pocketsA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
methodYesAlgorithm or provider method selected for this operation; inspect allowed schema values.
structureIdYesStable identifier of the supplied or retrieved structure.
structurePdbBase64NoBase64-encoded protein PDB coordinate bytes for direct computation.
structureArtifactRefYesReference identifying the supplied structure-coordinate artifact.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered; the description adds the genuinely non-obvious operational requirement that live mode needs the fpocket binary installed plus PDB bytes, and warns that pocket scores are computational descriptors rather than validated affinities. It does not describe failure behavior when the binary is absent or what a fixture replay returns, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with purpose, then sequencing/alternative, then operational caveat. No filler and no restatement of the tool name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values needn't be explained, and the description covers the two modes, the prerequisite step, the runtime dependency, and the interpretive caveat on scores. It leaves minor gaps around which mode is default and how artifact refs behave, but nothing that would cause a mis-call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description earns extra credit by implying conditional parameter needs: 'Live mode needs the fpocket binary and PDB bytes' effectively ties method=fpocket to structurePdbBase64, a dependency the schema does not state. It stops short of naming the parameters or spelling out what the fixture method requires.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run fpocket on supplied PDB coordinates to identify geometric binding pockets') and explicitly covers the second operating mode ('replay an exact fixture'). It is clearly distinguishable from the closest sibling, run_docking, which it names by role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit sequencing rule ('Use after structure validation for pocket exploration') and an explicit alternative with its selection condition ('use run_docking to score a prepared receptor-ligand pair'). An agent knows both when to pick this tool and when not to.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_overlapping_epitopesA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
thresholdYesNumeric cutoff for the selected overlap or decision operation.
candidatesYesCaller-supplied candidate records; required nested fields depend on this operation.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so safety is covered; the description still adds real value by clarifying that the tool reports relationships rather than resolving them (no winner selection, no identity dedup) and that output derives from caller-supplied coordinates rather than external lookup. It does not explain how 'connected components' are formed or how threshold affects grouping, which keeps it from 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose first, then usage/sequencing, then output scope. No filler, no restatement of the tool name, and the key routing constraint appears before the caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't describe return values, and annotations plus full schema coverage handle safety and fields. What remains under-explained is the domain meaning of threshold in this specific operation and the shape of the 'connected components' notion, a modest but real gap for a 3-parameter analysis tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents runId, threshold, and the candidate record fields, making 3 the baseline. The description adds no threshold semantics specific to overlap detection (e.g. what value means strict vs. permissive overlap) and says nothing about candidate ordering or the required nested fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource: "Find positional overlap competitors and connected components among candidate intervals." It also rules out two confusable behaviors (choosing a winner, deduplicating identities), which separates it from remove_duplicate_candidates and rank_candidates, though it does not name those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use before apply_constraint_rules when overlaps need review" gives explicit ordering and a triggering condition, and "does not choose a winner or deduplicate identities" implicitly routes deduplication elsewhere. No explicit when-not-to-use case or named alternative tool, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_candidateA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
audienceYesIntended reader of the candidate explanation.
categoryYesFinal candidate decision category being explained.
trackRankYesExisting rank within the candidate track.
finalScoreYesAlready computed final candidate score in the unit interval.
candidateKeyYesStable key identifying one epitope candidate across evidence stages.
ruleOutcomesYesPreviously computed rule outcomes supporting an explanation.
componentScoresYesNamed score components that contributed to the fixed final score.
explanationModeYesChoose deterministic explanation or configured LLM paraphrase.
provenanceStatusesYesSource-status labels associated with the candidate evidence.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds real behavioral context beyond that: results are non-mutating of scientific values, DETERMINISTIC mode consumes only supplied evidence, and LLM_PARAPHRASE requires a configured runtime — a genuine availability caveat.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler, front-loaded with what the tool does followed by when to use it. The mode/runtime caveat is reasonably placed, though it slightly crowds the usage sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 required parameters, an output schema, and full schema coverage, the description only needs to convey intent, sequencing, and mode semantics — which it does. The one gap is that it doesn't characterize how the two explanation modes differ in output, but the output schema likely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter carries a description or enum, so the schema does the heavy lifting. The description only restates the input categories at a high level without adding format or constraint detail beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Explain a fixed candidate category and score' — and enumerates the exact inputs (component scores, rule outcomes, provenance). The word 'fixed' plus the explicit note that it 'cannot change scientific values' separates it cleanly from siblings like rank_candidates, categorize_candidates, and apply_constraint_rules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use after ranking and constraints when a researcher needs a decision rationale' gives a clear pipeline position and trigger condition. It doesn't name specific alternative siblings to use instead if the agent is upstream of ranking, but the sequencing guidance is concrete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_candidatesA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
formatYesRequested structure or export format, as enumerated by this tool.
categoriesYesCandidate categories to include in the export.
idempotencyKeyYesCaller-supplied stable key for repeatable export identity.
candidateSnapshotNoCaller-supplied reviewed candidate rows to serialize; no new scores are calculated.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety/idempotency profile is covered. The description adds genuine value by clarifying that it outputs file bytes and checksum metadata and produces "not new scientific scores", and that raw and normalized scores stay separate — key behavioral facts an agent won't infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the purpose, routing, and output nature each front-loaded and no filler. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description needn't explain return values, yet it still summarizes them. It is nearly complete; a small gap is that it doesn't clarify why candidateSnapshot is optional relative to the required filters, but that is covered by the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all five parameters (runId, categories, format, idempotencyKey, candidateSnapshot) are documented in the schema. The description only echoes format options and the raw/normalized separation; it adds little beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (serialize) and resource (supplied candidate records) plus the exact output formats (JSON or CSV). It also names the sibling it is not (generate_report produces a broader report), so an agent can distinguish it without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it ("after candidate review for a table export") and names the alternative that covers the other case ("generate_report produces a broader report"). The routing decision is fully specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_research_packageA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
idempotencyKeyYesCaller-supplied stable key for repeatable export identity.
includeDockingYesWhether to include supplied docking artifacts in the package.
packageSnapshotNoComplete caller-supplied research snapshot to serialize into the ZIP.
includeChemistryYesWhether to include supplied chemistry artifacts in the package.
includeStructureYesWhether to include supplied structure artifacts in the package.
includeAgentTraceYesWhether to include supplied agent trace data in the package.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds real context beyond that: the output is checksummed, and the tool serializes supplied data rather than deriving it ('serializes supplied evidence and metadata rather than launching predictors or docking') – an important expectation that a missing section cannot be regenerated. It says nothing about failure modes when required sections are absent, which keeps it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what the tool produces, then when to use it, then a scope boundary. No filler and nothing repeated from structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with deep nested objects, the description covers purpose, timing, the sibling alternative, and the non-computing nature; an output schema exists so return values need no explanation, and the schema documents every field. The remaining gap is behavior when the supplied snapshot is missing a section flagged by an include* boolean, which cannot be inferred from either structured field.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including per-flag text ('Whether to include supplied ... artifacts'), so the schema carries the parameter burden and baseline 3 applies. The phrase 'selected sections' hints that the include* booleans gate package contents, but it adds no format, default, or interaction detail beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and artifact ('Build a checksummed research ZIP') plus the inputs it consumes ('supplied package snapshot and selected sections'). The closing clause explicitly separates it from compute tools ('rather than launching predictors or docking') and from generate_report, so an agent can place it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use after reports and artifacts are ready for handoff' gives a clear precondition, and 'generate_report exports individual report files' names the nearest alternative with the distinction that selects between them. It does not cover the other export siblings (export_candidates, export_workflow_trace), so the when-not guidance is incomplete rather than absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_workflow_traceA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
traceEventsNoOrdered caller-supplied events to serialize after redaction.
idempotencyKeyYesCaller-supplied stable key for repeatable export identity.
redactionProfileYesNamed policy for omitting private trace content from export.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description adds genuinely new behavioral facts: the artifact contains inline bytes plus SHA-256 metadata, and secrets/private reasoning are omitted. It does not state size limits or what happens when traceEvents is empty/omitted, but the redaction and identity behavior are real added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, routing second, return/redaction behavior last. No filler and nothing repeated from the schema verbatim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the safety profile is covered by annotations; the description still adds the redaction and digest guarantees an agent needs to trust the artifact. Minor gaps like handling of an empty or omitted traceEvents are the only omissions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and every parameter carries its own description, so the schema does the heavy lifting. The description reinforces the 'supplied ordered' nature of traceEvents and the redaction intent behind redactionProfile, but adds no format or constraint detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and artifact ('Serialize ... into a redacted JSON trace artifact') plus the input resource (ordered workflow events). It explicitly contrasts with generate_report, so an agent can distinguish the two without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use for audit or reproducibility after a workflow' gives a clear triggering context and the alternative 'generate_report is for the scientific summary' routes the agent away from the wrong sibling. It stops short of naming other nearby siblings such as export_research_package or export_candidates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_interactionsA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
methodYesAlgorithm or provider method selected for this operation; inspect allowed schema values.
dockingRunIdYesIdentifier of the docking run whose poses or complex are analyzed.
complexPdbBase64NoBase64-encoded protein-ligand complex PDB bytes from a representative pose.
representativePoseIdsYesPose IDs whose complex should be examined for contacts.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint and idempotentHint, so the safety profile is covered. The description adds genuinely non-structured context: live mode has an external dependency on PLIP, and the call returns structured contacts plus the original XML artifact. It does not say what happens when PLIP is unavailable, which would be the remaining behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the verb and engine, with no filler. The final clause is packed with three distinct facts (dependency, return shape, artifact) but each is load-bearing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema covers return values and annotations cover safety, and the description supplies the upstream sequencing and the PLIP dependency. However, with 4 required parameters and a required `method` whose accepted values are enumerated nowhere, the definition is not quite sufficient for an agent to invoke it without further guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter meanings are already documented, which sets the baseline at 3. The description hints that `method` selects live-vs-fixture execution and that `complexPdbBase64` comes from a representative pose, but since `method` has no enum values and the schema only says 'inspect allowed schema values', the agent still cannot determine valid values from either source.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific engine (PLIP) and a specific resource (protein-ligand complex PDB contacts), and distinguishes the live computation path from a fixture-replay path. It is clearly not any of the docking, pocket-detection, or scoring siblings, though the brief 'or replay an exact fixture' clause leaves the second mode somewhat under-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use after run_docking when a representative pose has been exported' gives an explicit ordering constraint and precondition, and 'this does not experimentally measure binding' rules out a misuse (citing it as empirical evidence). It does not name an alternative sibling (e.g. detect_binding_pockets) for the case where no complex PDB exists yet, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_compoundA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
sourceYesSelected remote provider or exact fixture source.
compoundRefYesProvider compound reference or exact fixture key; PubChem uses its CID.
fallbackPolicyYesAllowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful behavioral context: it mentions source provenance, fallback policy implications (LIVE_ONLY requires access), and that it does not calculate descriptors. It stops short of detailing error or rate-limit behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences front-load the core action and end with a key constraint. No filler, though the second sentence could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety, a full input schema, and an output schema, the description need not explain return values. It provides enough context about sources and fallback to call the tool correctly, though it could more explicitly route to sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description mentions compoundRef, source, and fallbackPolicy in passing but adds little syntax or format detail beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (retrieve) and resource (compound identity and SMILES), names the two source modes (PubChem or fixture), and explicitly excludes descriptor calculation. This clearly distinguishes it from siblings like validate_compound, calculate_molecular_descriptors, and prepare_ligand.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says to use this 'with a known compound reference before validation or ligand preparation,' giving a clear context of use, and notes that LIVE_ONLY requires PubChem access. However, it does not explicitly name the alternative tools or state when-not to use it beyond the descriptor exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_structureA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
sourceYesSelected remote provider or exact fixture source.
targetIdYesCaller-chosen identifier for the target protein or structure.
accessionYesProvider accession, such as an RCSB PDB ID or AlphaFold accession, matching source.
fallbackPolicyYesAllowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only and idempotent behavior, and the description adds useful context that LIVE_ONLY requires network access. It also notes that results include source provenance and coordinate artifact bytes, though it does not elaborate on cache or fixture failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences with the main action and source options front-loaded. Every sentence contributes useful routing or behavioral context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema and complete parameter descriptions, the description supplies enough usage and behavior context to call the tool correctly. It does not fully explain the cache-oriented fallback policies, but the schema carries that detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are already well documented in the schema. The description reinforces source and accession concepts and mentions LIVE_ONLY network access, but adds limited meaning beyond the structured parameter definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieve PDB coordinates, AlphaFold models, or exact fixtures. It distinguishes the tool from sequence prediction, though it does not explicitly contrast with nearby siblings such as validate_structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly says to use this when a structure accession is known and before coordinate-based analyses, and it excludes sequence prediction. It stops short of naming the alternative structure-related tools, but the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_candidate_peptidesA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdNoCaller-chosen identifier linking this call to one research run.interactive-run
sequenceYesProtein amino-acid sequence without a FASTA header.
sequenceHashNoOptional SHA-256 identity of the supplied protein sequence.
candidateTypeYesMHC class or candidate category this operation applies to.
peptideLengthsYesPeptide window lengths in amino-acid residues for the selected MHC class.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description is consistent with them (pure enumeration, no scoring). It adds useful behavioral context by clarifying that the output is candidate windows rather than ranked results, but it does not mention edge behavior such as sequences shorter than the requested peptide lengths or invalid residues.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what the tool does, then when to use it, then what it returns. No filler and nothing repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter enumeration tool with an output schema, the description covers purpose, ordering, and non-scoring semantics adequately. Minor gaps remain around failure modes (too-short sequence, invalid amino acids) and how many windows are produced, but the output schema carries the return-value burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics beyond the schema: 'one-based' indexing (which the start/end parameters never state) and the peptide/start/end/length shape produced per window. It still doesn't clarify how candidateType interacts with peptideLengths choices.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Enumerate one-based peptide windows from a supplied protein sequence') with the MHC-I/MHC-II scope. It also explicitly contrasts with the prediction siblings by saying 'this creates candidates, not binding scores', so an agent can distinguish it from predict_mhci/predict_mhcii without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit pipeline positioning ('Use after validate_sequence and before prediction'), naming the sibling that precedes it and the class of siblings that follows. It also names the exclusion — this does not produce binding scores — so the boundary against prediction tools is stated, not inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_reportA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
outputFormatsYesFile formats to render from the supplied report snapshot.
idempotencyKeyYesCaller-supplied stable key for repeatable export identity.
reportSnapshotNoCaller-supplied approved report data to render; no evidence retrieval occurs.
templateVersionYesVersion of the report layout used to render artifacts.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so safety is covered; the description adds genuinely new behavior: bytes are returned inline with lengths and SHA-256 hashes, and the tool does not independently fetch evidence. It stops short of mentioning payload size limits or what happens on an idempotency key conflict, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action, then usage routing, then return behavior. No filler and each sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, a full output schema, and 100% schema coverage, the description only needs to add routing and scope, which it does, including the explicit "no evidence retrieval" boundary. The incomplete story is the format list disagreeing with the enum, leaving a small correctness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, and the description adds little parameter-level detail beyond naming output formats. The one added detail is wrong: the description advertises Markdown while outputFormats only allows JSON and CSV, which could lead an agent to request an invalid format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (render) and resource (approved report snapshot) plus the resulting artifact types, and explicitly distinguishes itself from export_candidates and export_research_package by what those return. An agent can pick the right export tool without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use after evidence review when a report is needed" gives an explicit precondition and trigger, and the sentence names both alternatives with their distinguishing outputs (candidate rows vs. ZIP). That is the when-to-use/when-not/alternatives triad in two clauses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_epitopes_to_structureA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
candidatesYesCaller-supplied candidate records; required nested fields depend on this operation.
mappingModeYesDIRECT_COORDINATE uses supplied PDB and reference sequence; FIXTURE replays an exact case.
structureIdYesStable identifier of the supplied or retrieved structure.
referenceSequenceNoProtein sequence whose positions are aligned to PDB residues.
structurePdbBase64NoBase64-encoded protein PDB coordinate bytes for direct computation.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered; the description adds mode-dependent input requirements (direct-coordinate mode needs reference sequence and PDB bytes) and notes that fixture mode replays an exact case. It stops short of saying what happens on misalignment or when a mode's required inputs are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what the tool does, then usage, then input requirements. "Returns mapped positions" is minor filler given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six parameters, an output schema, and read-only annotations, the description covers the mode split and prerequisites an agent needs. It leaves unstated how candidates' start/end/chainId are interpreted and whether structureId is required in both modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the mappingMode enum description already states that DIRECT_COORDINATE uses the supplied PDB and reference sequence, so the description's mode/parameter coupling largely restates the schema. It adds no detail on candidate start/end/chainId semantics or how structureId is used in fixture mode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: aligning candidate sequence positions to residue coordinates in a PDB structure, plus the alternate fixture-replay mode. It is distinguishable from siblings like validate_structure and calculate_surface_accessibility without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly places the tool in a workflow ("Use after validate_structure when mapping sequence evidence onto a model") and routes the agent elsewhere for the adjacent task ("use calculate_surface_accessibility for solvent exposure"). Both the trigger condition and the alternative are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

normalize_scoresA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
observationsYesCaller-supplied evidence observations; this tool does not fetch them.
registryVersionYesVersion of the score normalization profile registry.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered; the description adds that the applied transformation is recorded and that normalized observations are returned. It does not say how unknown registry versions or malformed profiles are handled, which would matter for a versioned transform.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose first, then workflow position, then an exclusion and return note. No repetition of the schema and nothing that fails to earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full input schema, an output schema, and annotations in place, the description covers what an agent needs to place and call the tool. The remaining gap is guidance on which normalization profile or registry version to pick, which the schema alone does not resolve.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented, and the description only reinforces that observations are caller-supplied and the registry is versioned. It adds no detail on the profile kinds (IDENTITY, INVERSE_PERCENTILE, FIXED_MIN_MAX, LOGISTIC) or on choosing a registryVersion, so baseline 3 is right.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (transform) plus resource (raw observations into unit-interval values) with the mechanism named (versioned normalization registry). It is clearly distinct from the neighboring compute_consensus, rank_candidates, and predict_* tools, which the description explicitly separates itself from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States explicit workflow placement — 'use after evidence collection and before consensus or ranking' — which routes the agent relative to real siblings. It also names what the tool does not do ('does not fetch predictors or improve source quality'), heading off the most likely misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

optimize_construct_geneticA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
linkerYesPeptide linker sequence used when assembling construct proposals.
candidatesYesCaller-supplied candidate records; required nested fields depend on this operation.
populationIdsYesPopulation identifiers requested from the coverage source or synthetic dataset.
populationSizeYesNumber of candidate construct genomes per optimization generation.
targetCoverageYesDesired population coverage fraction used by optimization.
populationWeightsNoCaller-supplied weights for combining named population coverage values.
maximumGenerationsYesMaximum optimization generations before returning a proposal.
maximumConstructSizeYesUpper limit on construct size for genetic-style search.
finalRankingSnapshotHashYesSHA-256 identity of the final ranking snapshot supplying these candidates.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and "seeded" is consistent with that idempotent claim. The description adds genuinely useful context beyond annotations: the result is "a computed proposal, not a validated vaccine construct," which tells the agent how much to trust the output. It stops short of describing convergence behavior or what happens when maximumGenerations is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action, then routing guidance, then the output caveat. Nothing is repeated from the schema and no sentence is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter, 9-required tool with nested objects, an output schema, and annotation coverage, the description covers purpose, routing, and result trustworthiness. The one gap is the finalRankingSnapshotHash chaining requirement (that candidates must match the ranked snapshot), which is only in the schema and is easy to violate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all ten parameters, including nested candidate fields, are already documented. The description's mention of size, coverage, redundancy, and manufacturability loosely maps to maximumConstructSize, targetCoverage, and populationWeights, but adds no syntax or constraint detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Run seeded genetic-style search over supplied candidates") plus the explicit objective terms it balances (size, coverage, redundancy, manufacturability), and names the sibling it is not (optimize_shortlist_coverage). An agent can distinguish it from the deterministic shortlist optimizer without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ("Use after final ranking when searching construct arrangements") and an explicit alternative with the condition that selects it ("use optimize_shortlist_coverage for simpler deterministic shortlist selection"). No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

optimize_shortlist_coverageA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
linkerNoPeptide linker sequence used when assembling construct proposals.
methodYesAlgorithm or provider method selected for this operation; inspect allowed schema values.
candidatesNoCaller-supplied candidate records; required nested fields depend on this operation.
populationIdsYesPopulation identifiers requested from the coverage source or synthetic dataset.
targetCoverageNoDesired population coverage fraction used by optimization.
populationWeightsNoCaller-supplied weights for combining named population coverage values.
eligibleCandidateIdsYesIDs of finally eligible candidates considered for the shortlist.
maximumShortlistSizeNoUpper limit on candidates selected for the shortlist.
finalRankingSnapshotHashYesSHA-256 identity of the final ranking snapshot supplying these candidates.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so safety and repeatability are covered structurally. The description nevertheless adds real value by stating the selection is "deterministic" and, importantly, that the output derives from the caller-supplied coverage matrix and is "not an independently measured population outcome" — a meaningful caveat about how to interpret results, which is not derivable from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, then routing, then the interpretive caveat. Every sentence carries information, though the third sentence is dense and would read better as a short qualifier clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations cover safety. The description supplies purpose, timing, alternative, and a caveat, which is enough for a complex 10-parameter nested-schema tool; only the interaction between optional tuning parameters (targetCoverage, populationWeights, maximumShortlistSize) is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 10 parameters is documented in the schema itself, which sets the baseline at 3. The description gestures at the key inputs (eligible candidates, population coverage, shortlist size) but adds no syntax, defaults, or interaction rules — e.g. how maximumShortlistSize trades off against targetCoverage — beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("select a deterministic T-cell shortlist") plus the inputs that scope it (eligible ranked candidates, population coverage, construct constraints). It also explicitly contrasts itself with the sibling optimize_construct_genetic, so an agent can distinguish the two without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the pipeline position ("use after final ranking"), the decision condition ("when shortlist size or coverage is the decision"), and names the alternative tool plus its selecting condition ("use optimize_construct_genetic for seeded construct search"). Nothing about when to pick this versus its nearest sibling is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

predict_bcellA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
methodsYesNamed predictor methods to run or replay; availability depends on configuration.
sequenceNoProtein amino-acid sequence without a FASTA header.
parametersYesMethod-specific predictor settings; allowed keys depend on selected methods.
proteinRefYesStable protein reference or exact fixture key for this prediction.
fallbackPolicyYesAllowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only and idempotent behavior. The description adds useful operational context beyond annotations: live IEDB access may fail or time out, GraphBepi is fixture-only, and results include residue scores, regions, and provenance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and method options, then follows with the method caveat and return/provenance note. Every sentence carries useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema and output schema, the description provides enough context to call the tool correctly: what it predicts, which methods exist, how they differ, that live access may fail, and what is returned. Parameter details are adequately delegated to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters. The description still adds meaning for the methods parameter by naming BepiPred-3.0, Parker, and GraphBepi and warning about their differing availability and nature.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: score linear B-cell sequence positions. It names the supported prediction methods and clearly distinguishes this B-cell tool from sibling MHC predictors such as predict_mhci and predict_mhcii.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear method-selection guidance: choose explicitly, Parker is a physicochemical proxy, GraphBepi is fixture-only, and live IEDB may fail or time out. It does not explicitly state when not to use this tool versus non-predictor siblings, so it falls short of full alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

predict_mhciA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdNoCaller-chosen identifier linking this call to one research run.interactive-run
allelesYesHLA allele identifiers relevant to the selected MHC class.
methodsNoNamed predictor methods to run or replay; availability depends on configuration.
sequenceNoProtein amino-acid sequence without a FASTA header.
proteinRefNoStable protein reference or exact fixture key for this prediction.
fallbackPolicyNoAllowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.LIVE_THEN_CACHE_THEN_FIXTURE
peptideLengthsYesPeptide window lengths in amino-acid residues for the selected MHC class.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description goes further by disclosing that LIVE_ONLY forbids fallback substitution, that results carry method and source provenance, and that unavailable sources yield a structured failure rather than an error. That is genuine added context about failure and sourcing behavior; only auth/quota details are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler, with the resource and scope front-loaded ahead of the exclusions. The final sentence is a run-on stacking three separate facts (LIVE_ONLY, provenance, structured failure) with semicolons, which is slightly dense but still readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value shape need not be explained, and annotations cover the safety profile. What remains for the description to carry — scope, sibling exclusion, source-fallback constraints, and failure behavior — is all present, so an agent has what it needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the seven parameters, including the fallbackPolicy enum values, is already documented in the schema. The description restates the LIVE_ONLY constraint already present in the fallbackPolicy field description but adds no new semantics for alleles, peptideLengths, methods, or proteinRef. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete resource (MHC-I peptide-binding observations) scoped to class-I alleles and peptide lengths, and explicitly excludes MHC-II and B-cell evidence, which separates it from predict_mhcii and predict_bcell. The verb 'Get' sits in mild tension with the tool name 'predict', leaving slight ambiguity about whether it retrieves recorded observations or runs a predictor, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use for class-I evidence, not MHC-II or B-cell evidence' gives an explicit exclusion and names the competing siblings, so routing between the three predict_* tools is unambiguous. It does not cover when to prefer this over upstream siblings like generate_candidate_peptides or how to choose among the five fallbackPolicy modes, so no 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

predict_mhciiA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdNoCaller-chosen identifier linking this call to one research run.interactive-run
allelesYesHLA allele identifiers relevant to the selected MHC class.
methodsNoNamed predictor methods to run or replay; availability depends on configuration.
sequenceNoProtein amino-acid sequence without a FASTA header.
proteinRefNoStable protein reference or exact fixture key for this prediction.
fallbackPolicyNoAllowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.LIVE_THEN_CACHE_THEN_FIXTURE
peptideLengthsYesPeptide window lengths in amino-acid residues for the selected MHC class.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered; the description adds genuinely new behavior: source precedence via the connector/fixture policy, method and source provenance in results, and structured failure when a source is unavailable. That is exactly the kind of runtime expectation an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: purpose and scope first, sibling routing second, source/failure behavior last. Every clause carries information and nothing is repeated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, a full-coverage schema and an output schema present, the remaining burden on the description is routing and runtime expectations — both are covered. An agent knows when to pick this tool, what source ordering implies, and what a failure looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so per-parameter meaning is already fully documented, and the description adds little beyond restating alleles and peptide lengths. The one added gloss — 'LIVE_ONLY requires the live connector' — largely duplicates the fallbackPolicy enum description already in the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get MHC-II peptide-binding observations') plus the scoping inputs (class-II alleles, peptide lengths), and explicitly separates the tool from its siblings predict_mhci and predict_bcell. An agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use for class-II evidence rather than predict_mhci or predict_bcell' gives an explicit alternative and the condition that selects it, and the LIVE_ONLY note flags a prerequisite for a specific configuration. There is no stated case where this tool is inappropriate beyond sibling routing, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

predict_synthetic_bindingA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
methodYesAlgorithm or provider method selected for this operation; inspect allowed schema values.
allelesYesHLA allele identifiers relevant to the selected MHC class.
candidatesYesCaller-supplied candidate records; required nested fields depend on this operation.
proteinHashYesSHA-256 identity of the protein sequence associated with these candidates.
candidateTypeYesMHC class or candidate category this operation applies to.
methodVersionYesVersion of the selected calculation method.
datasetVersionYesVersion label for the synthetic demonstration dataset.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description reinforces this with 'deterministic' plus the important caveat that output 'is marked synthetic and must not be treated as binding evidence' — a genuine safety disclosure an agent would not get from the schema. The word 'Create' is not a contradiction because it describes computing values, not persisting state, but the description does not state where output goes beyond the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose, routing rule, safety caveat — ordered by importance with zero filler. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, a fully-described 8-parameter schema, and readOnly/idempotent annotations, the remaining burden is purpose, routing and misuse warnings — all of which the description supplies. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all 8 parameters are already documented in the schema. The description only alludes to 'candidates and alleles' and adds nothing about method/methodVersion/datasetVersion selection, so it sits at the baseline for a fully-documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Create'), specific resource ('deterministic synthetic MHC binding values'), and an explicit statement of the domain it applies to ('demos and software tests'). It is immediately distinguishable from predict_mhci/predict_mhcii, which are named in the same breath.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when ('only when teaching or testing the pipeline') and a when-not with the correct alternatives ('use predict_mhci or predict_mhcii for configured scientific prediction'). No inference required from the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_ligandA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
smilesYesChemical structure encoded as a SMILES string.
compoundIdYesStable identifier for the supplied compound within this run.
preparationMethodYesPreparation backend, such as configured Meeko or exact fixture mode.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, yet the description still adds real behavior: live preparation returns artifact bytes plus hashes, and it fails when a required runtime is absent. It also discloses the fixture-mode branch that returns a reference instead of computing. It stops short of describing pagination/size limits or how fixture mode is chosen.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: the primary action comes first, then downstream ordering, then failure and return characteristics. Every clause carries information an agent needs and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be spelled out, and the description still flags artifact bytes/hashes and the missing-runtime failure. What remains thin is how the fixture-mode path is selected and whether repeated calls reuse cached artifacts, despite the idempotent hint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema, including the preparationMethod backend. The description adds only the input-to-output relationship (SMILES in, SDF/PDBQT out) rather than new meaning for individual parameters, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and concrete resource: generate a 3D SDF and Meeko PDBQT from a SMILES, with a named alternate mode (exact fixture reference). It also differentiates from siblings by naming calculate_molecular_descriptors and run_docking in the same breath.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit ordering rule ("Use before run_docking for a ligand") and explicitly excludes the near-miss sibling ("calculate_molecular_descriptors does not produce docking coordinates"). The agent knows both when to pick this tool and when a plausible alternative is wrong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_receptorA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
chainIdsYesProtein chain identifiers selected from the supplied structure.
structureIdYesStable identifier of the supplied or retrieved structure.
preparationMethodYesPreparation backend, such as configured Meeko or exact fixture mode.
structurePdbBase64NoBase64-encoded protein PDB coordinate bytes for direct computation.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered; the description then adds genuinely new context: a runtime dependency on Meeko for live preparation, and that the live path returns artifact bytes while the fixture path returns a reference. It does not spell out failure behavior if Meeko is unavailable, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each doing distinct work: what it produces, when to call it relative to run_docking/validate_structure, and the runtime/output constraint. The primary operation is front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a preparation tool with full schema coverage, annotations, and an output schema, the description supplies the pipeline ordering and the runtime dependency that structured fields cannot express. The dual output form (artifact bytes vs fixture reference) is only lightly explained, leaving a small residual gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters (including structurePdbBase64 and chainIds) are documented in the schema itself. The description adds only thematic context — chains, coordinates, and the Meeko-vs-fixture backend — rather than per-parameter semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and transformation: convert protein PDB coordinates plus selected chains into receptor PDBQT via Meeko, with an explicit alternate mode (exact fixture reference). It distinguishes itself from validate_structure by naming what that sibling does not do (charges, PDBQT), so an agent can place it precisely in the pipeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use before run_docking for the receptor" gives explicit ordering, and "validate_structure checks coordinates but does not prepare charges or PDBQT" names the near-miss alternative and why it is insufficient. The only minor inference left is choosing fixture mode vs live mode, but the preparationMethod parameter and the 'live requires Meeko runtime' note point at that distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rank_candidatesA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
phaseYesPRELIMINARY scores incomplete work; FINAL requires completed base and final constraints.
runIdYesCaller-chosen identifier linking this call to one research run.
candidatesYesCaller-supplied candidate records; required nested fields depend on this operation.
thresholdsNoNamed score or decision cutoffs supplied by the caller.
rankingProfileVersionYesVersioned weighting profile applied to candidate scoring.
baseConstraintsCompleteYesWhether all required base constraint results are present.
finalConstraintsCompleteYesWhether required final constraint results are present for final ranking.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so safety is covered. The description adds real behavioral context beyond them: the tool is a pure function over caller-supplied values, applies a versioned profile, and enforces a phase/completion precondition before final ranking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the verb and resource, then the phase rule and the no-predictor caveat. The second sentence is slightly packed, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with nested candidate unions, an output schema and annotations, the description covers the decisive facts: what is computed, the precondition for FINAL, and that predictors are not invoked. Details of candidate fields and thresholds are left to the schema, which documents them fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents phase, runId, rankingProfileVersion and the completion flags. The description reinforces the phase and profile semantics but adds no meaning for thresholds or for the two distinct candidate shapes (MHC vs BCELL). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it calculates preliminary scores or final stable ranks from supplied evidence snapshots and completion flags. An agent can distinguish this from compute_consensus or categorize_candidates, though it never names a sibling explicitly to sharpen that contrast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit gating: PRELIMINARY before final constraints, FINAL only after base and final constraints are complete. It also rules out a wrong expectation with 'this does not call predictors', which steers the agent to the predict_* tools for that work. No named alternative tool, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_duplicate_candidatesA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
candidatesYesCaller-supplied candidate records; required nested fields depend on this operation.
proteinHashYesSHA-256 identity of the protein sequence associated with these candidates.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description reinforces them with "without changing source evidence" plus the fact that results are returned as canonical/duplicate relationships rather than applied. The disjointness rule (same peptide, different coordinates stays separate) is real behavioral information not derivable from annotations. It doesn't warn about any scale or ordering caveats, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: what it does, when to use it and the key exclusion, then what it returns and does not mutate. Front-loaded with the core action and zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Read-only/idempotent annotations cover the safety profile, the output schema covers return values, and the schema fully documents all three parameters. The description supplies the remaining gaps an agent actually needs: the dedup key, the sequencing relative to apply_constraint_rules, and the non-mutation guarantee.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so runId, proteinHash and candidates are already documented in the schema, and baseline is 3. The phrase "positional identity" hints that start/end coordinates are the grouping key and "identical peptide strings" ties to the peptide field, but no parameter is named or clarified beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (group and choose canonical) on a specific resource (candidates) with the deduplication key named: identical positional identity. That key distinguishes it from the sibling deduplicate_compounds and from the broader apply_constraint_rules without either schema being opened.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use before apply_constraint_rules" gives explicit ordering and names the downstream sibling, and "identical peptide strings at different coordinates remain separate" defines a scope exclusion so the agent won't over-deduplicate. It stops short of naming a competing dedup alternative or stating failure conditions, so it is strong context rather than a complete when/when-not guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_agentic_workflowA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
agentModeYesChoose deterministic policy execution or an enabled LLM-assisted mode.
objectiveYesResearch objective supplied by the caller to label the bounded workflow.
toolCallsNoTyped, caller-selected tool invocations to execute in stage order.
approvedToolNamesYesExact tool names the caller permits this workflow to invoke.
requireHumanApprovalYesPause at gated workflow stages until the caller supplies approval.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantive behavior beyond the annotations: no autonomous tool invention, approval gates pause instead of self-approving, and a plan-only outcome when toolCalls is empty. That is real operational context. Residual gap: with readOnlyHint=true declared, the description never clarifies whether delegated toolCalls (e.g. export/generate siblings) produce side effects, which is the risk an agent most needs resolved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler, with the core execute-or-plan behavior front-loaded and the sibling differentiation last. Dense but readable; a short gloss on "bounded stage order" would have made it tighter still.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be explained, and the description covers modes, gating, and non-autonomy for a 6-parameter orchestrator. What remains thin is failure behavior and the exact meaning of stage bounding, plus the unresolved side-effect question raised by readOnlyHint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is already described in the schema, making 3 the baseline. The description does add one genuinely useful semantic — an empty toolCalls array yields a plan rather than execution — but says nothing about agentMode, approvedToolNames enforcement, or the 46-item call cap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ("Execute caller-supplied approved typed toolCalls in bounded stage order") and adds the fallback mode ("or return a plan if no calls are supplied"), so the dual behavior is unambiguous. It also contrasts itself with describe_agentic_workflow, which only inspects the manifest. The only softness is jargon ("bounded stage order") that isn't unpacked.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use when the client has already selected inputs and allowed tools" gives an explicit precondition, and the next clause routes the agent to the correct sibling for manifest inspection. No explicit wrong-case exclusion beyond that, but the gating condition is clear enough to select between the two orchestration tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_dockingA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
boxNoDocking search-box center and size in receptor-coordinate angstroms.
cpuNoNumber of CPU workers to request for the Vina run.
modeYesExecution or visualization mode; inspect enum choices and required inputs for each.
seedNoRandom seed for reproducible Vina search when supplied.
runIdYesCaller-chosen identifier linking this call to one research run.
ligandIdYesCaller-chosen ligand identifier for this docking run.
numModesNoMaximum Vina ligand poses to return.
receptorIdYesCaller-chosen receptor identifier for this docking run.
dockingBoxIdYesCaller-chosen identifier for the validated docking search box.
exhaustivenessNoVina search-effort parameter; larger values may take longer.
fallbackPolicyYesAllowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls.
ligandPdbqtBase64NoBase64-encoded prepared ligand PDBQT bytes for Vina.
receptorPdbqtBase64NoBase64-encoded prepared receptor PDBQT bytes for Vina.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover readOnly/idempotent, so the description earns credit for disclosing non-obvious traits: runtime can be substantial, scores are computational estimates rather than ground truth, and LIVE_ONLY never silently falls back to a fixture. These are exactly the caveats an agent needs before committing to a long run.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler: action first, prerequisite chain second, outputs and runtime caveat last. Every clause carries information an agent would otherwise have to infer.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter, nested-object tool with an output schema and annotations, the description covers prerequisites, fallback semantics, runtime cost, and result nature. It could say more about how the supplied box relates to dockingBoxId, but nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter including the nested box and both enums is already documented. The description only loosely gestures at the box and mode/fallback parameters, adding little beyond what the schema states, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — run AutoDock Vina on receptor/ligand PDBQT bytes within a box — plus the alternate FIXTURE replay path. The sibling set (prepare_receptor, prepare_ligand, validate_docking_box) are named as prerequisites, so an agent can immediately place this tool in the docking pipeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the three prerequisite tools and the order to call them, and clarifies that LIVE_ONLY requires real Vina with no silent fixture substitution. It stops short of saying when to choose FIXTURE vs VINA beyond that hint, but the pipeline context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_compoundA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
smilesYesChemical structure encoded as a SMILES string.
compoundIdYesStable identifier for the supplied compound within this run.
sourceStatusYesProvenance label for the supplied structure or compound.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds behavior the annotations cannot express: canonicalization via RDKit and that RDKit unavailability yields a structured failure on the live path. What is not disclosed is whether the fixture path skips RDKit entirely or what 'explicit fixture record' validation entails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences that front-load the operation, then usage ordering, then failure behavior — no filler. Slightly dense phrasing ('live-sourced compounds, or validate an explicit fixture record') requires a second read, which keeps it just below the top mark.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description covers ordering, scope, and RDKit failure handling. The remaining gap is the difference in behavior between the LIVE/CACHED and FIXTURE paths, which an agent must infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds semantic linkage: it explains that the two modes correspond to the sourceStatus LIVE vs FIXTURE distinction, which the schema merely enumerates without explaining consequences. runId and compoundId remain solely covered by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Parse and canonicalize supplied SMILES with RDKit') plus the dual mode: live-sourced compounds vs an explicit fixture record. This distinguishes it clearly from sibling tools like calculate_molecular_descriptors or deduplicate_compounds, which operate downstream of validation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly positions the tool in the workflow ('Use before deduplication, descriptors, or ligand preparation'), naming the sibling tools that require its output. It also draws a clear scope boundary ('checks chemical syntax and identity, not biological activity'), telling the agent when this tool is the wrong choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_docking_boxA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
sizeYesDocking-box edge lengths x, y, and z in angstroms.
runIdYesCaller-chosen identifier linking this call to one research run.
centerYesDocking-box center coordinates x, y, and z in angstroms.
dockingBoxIdYesCaller-chosen identifier for the validated docking search box.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description adds real context on top: it is a pre-flight check, it does not invoke Vina or claim a binding site, and it returns either validated dimensions or a structured validation failure. It stops short of describing failure semantics in detail, which keeps it at 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the primary action front-loaded and the boundary condition second. Every clause carries decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return structure need not be spelled out, and the description still signals validated dimensions vs. structured failure. For a 4-param read-only validator, nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and nested center/size objects are documented with units in angstroms, so the schema carries parameter meaning. The description references center and size but says nothing about runId or dockingBoxId, so it adds no semantics beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (validate the center and size of a docking search box) plus a secondary output (volume). It explicitly distinguishes itself from run_docking, so an agent can separate it from the heavy docking sibling without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when ('before run_docking to catch invalid box geometry') and an explicit what-it-is-not ('does not run Vina or establish a binding site'), which names the sibling it must not be confused with and rules out the main misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_sequenceA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
fastaYesOne protein FASTA record with header and amino-acid sequence.
profileVersionYesVersion of the sequence validation profile; mvp-v1.0 is the current profile.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds real value beyond that: it discloses what is returned (normalized sequence plus a SHA-256 identity) and how failures behave ('invalid input returns a structured validation error'), rather than throwing. Minor gap: no statement about whether normalization ever mutates/rejects residues.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and returns, followed by the when-to-use and the failure mode. No filler or restated title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, read-only validation tool with an existing output schema and full schema coverage, the description supplies everything needed: input shape, when to call it, what it does not check, and error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both 'fasta' and 'profileVersion' are already documented in the schema. The description reinforces the single-record constraint ('one protein FASTA record') but says nothing about profileVersion or the significance of profile selection, so it adds little beyond structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and scope ('Validate one protein FASTA record') and enumerates what is produced (normalized sequence, length, header, SHA-256 identity). This clearly separates it from siblings like validate_structure, validate_thresholds, or validate_compound.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit lifecycle position ('Use before peptide generation or prediction') and an explicit scope exclusion ('checks sequence syntax, not structure or biological activity'), which implicitly routes structural checks elsewhere. It does not name the sibling tool (validate_structure) directly, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_structureA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
formatYesRequested structure or export format, as enumerated by this tool.
chainIdsYesProtein chain identifiers selected from the supplied structure.
structureIdYesStable identifier of the supplied or retrieved structure.
residueCountYesExpected protein residue count for metadata consistency checks.
sourceStatusYesProvenance label for the supplied structure or compound.
structurePdbBase64NoBase64-encoded protein PDB coordinate bytes for direct computation.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint; the description adds value beyond them by disclosing the conditional parse path when structurePdbBase64 is supplied and the failure contract ('Mismatched metadata returns a structured failure'). It does not specify what exactly is compared or how format variants (PAE_JSON, FIXTURE_JSON) are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: behavior first, placement/exclusions second, failure contract last. No filler and no repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 100% parameter coverage, the description needn't explain returns; purpose, preconditions, conditional behavior, and failure mode are all covered. The remaining gap is that the mixed format enum (PDB vs MMCIF vs PAE_JSON vs FIXTURE_JSON) is never explained, leaving unclear what 'structure metadata' means for non-coordinate formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description adds real semantics for the optional PDB-bytes parameter (it triggers atom/chain/residue parsing) and frames residueCount/sourceStatus as consistency checks. It doesn't explain how validation differs across the four format enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: check structure metadata and, conditionally, parse atoms/chains/residues from PDB bytes. The resource (structure) is clearly distinct from siblings like validate_sequence and validate_compound, though it never names an alternative tool explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use before mapping, accessibility, or docking preparation' pins the pipeline position against named sibling workflows, and 'does not evaluate model confidence or binding' carves out a scope boundary. No exclusion is expressed as a 'use X instead' routing, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_thresholdsA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
candidatesYesCaller-supplied candidate records; required nested fields depend on this operation.
ruleProfileVersionYesVersion of the biological constraint rule profile.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, and the description adds genuine behavioral context beyond them: it reports rule outcomes only, and missing evidence is surfaced in results rather than being assumed to pass. That last point materially changes how an agent should interpret output. It does not describe determinism guarantees tied to the versioned profile, so it is not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the operation, then ordering guidance, then the key behavioral caveat. No sentence is redundant and nothing is buried after preamble.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the annotations cover the safety profile. The description adds the crucial missing-evidence semantics and the pipeline position. It leaves open where a valid ruleProfileVersion value comes from, a minor gap for a versioned-rule tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters and the deep candidate structure are already documented. The description only indirectly gestures at ruleProfileVersion via 'versioned hard biological threshold profile' and says nothing about runId or candidate fields. Baseline 3 applies when the schema carries the semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Evaluate the versioned hard biological threshold profile against supplied candidates'), so the operation is unambiguous. It further separates itself from ranking-style siblings by stating it 'reports rule outcomes rather than ranking candidates.' It does not name the closest siblings (apply_constraint_rules, categorize_candidates) directly, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use before categorization or final constraint application' gives explicit ordering guidance that maps onto the categorize_candidates and apply_constraint_rules siblings. The clause 'rather than ranking candidates' functions as an implicit when-not, steering agents away from using it for ordering. It stops short of naming tools or stating preconditions for the runId/profile version.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

visualize_resultsA
Read-onlyIdempotent

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.

NameRequiredDescriptionDefault
runIdYesCaller-chosen identifier linking this call to one research run.
visualizationTypeYesNamed chart or graph view-model type to construct.
visualizationSnapshotNoCaller-supplied data for building a view model; no image is rendered.

Output Schema

NameRequiredDescription
okYesWhether execution completed successfully.
dataNoTool-specific result fields on success.
metaYesRun identifiers, timings, and input/output hashes.
errorNoStructured failure on unsuccessful execution.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered; the description adds genuinely non-obvious behavior: output is deterministic, it is a view model rather than a rendered image, and it performs no independent scientific analysis. That last caveat usefully bounds what an agent should infer from the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action, then the usage condition, then the output contract. Every sentence carries distinct information and nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still clarifies the return kind (view-model data, not a PNG), which is the one thing an agent could plausibly get wrong. With 100% parameter coverage and annotations in place, nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the runId linkage and the visualizationType enum, so the schema already does the heavy lifting. The description only obliquely clarifies visualizationSnapshot ('from supplied evidence'; 'no image is rendered'), which is a small addition over the schema's own note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource: 'Build a deterministic visualization view model ... for the selected chart or graph type.' It also explicitly draws the boundary against the closest-sounding sibling, create_molstar_view, so an agent can pick between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear triggering condition ('Use when a UI will render results') and names the alternative plus its distinguishing trait (coordinate-based 3D HTML). It does not say when *not* to use it in other circumstances or how to choose among the seven visualization types, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 46 tool updatesv0.2.1
    • Changedapply_constraint_rules14 fields changed
      • addedInput schema / properties / baseConstraints / description
        Added value: +"Previously evaluated base rule inputs for final constraint application."
      • addedInput schema / properties / baseConstraints / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / duplicateCandidates / description
        Added value: +"Candidate records to evaluate for exact positional duplication."
      • addedInput schema / properties / duplicateCandidates / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / duplicateCandidates / items / properties / proteinHash / description
        Added value: +"SHA-256 identity of the protein sequence associated with these candidates."
      • addedInput schema / properties / overlapCandidates / description
        Added value: +"Candidate records whose positional overlaps enter final constraint rules."
      • addedInput schema / properties / overlapCandidates / items / properties / candidateKey / description
        Added value: +"Stable key identifying one epitope candidate across evidence stages."
      • addedInput schema / properties / overlapCandidates / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / overlapCandidates / items / properties / proteinHash / description
        Added value: +"SHA-256 identity of the protein sequence associated with these candidates."
      • addedInput schema / properties / overlapThreshold / description
        Added value: +"Minimum overlap fraction used by the final overlap rule."
      • addedInput schema / properties / ruleProfileVersion / description
        Added value: +"Version of the biological constraint rule profile."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / snapshotHash / description
        Added value: +"SHA-256 identity of the immutable evidence snapshot."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_molecular_descriptors5 fields changed
      • addedInput schema / properties / compoundId / description
        Added value: +"Stable identifier for the supplied compound within this run."
      • addedInput schema / properties / method / description
        Added value: +"Algorithm or provider method selected for this operation; inspect allowed schema values."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / smiles / description
        Added value: +"Chemical structure encoded as a SMILES string."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_population_coverage6 fields changed
      • addedInput schema / properties / associations / description
        Added value: +"Peptide-to-HLA restrictions used for population coverage calculation."
      • addedInput schema / properties / classMode / description
        Added value: +"Whether coverage uses class-I, class-II, or combined associations."
      • addedInput schema / properties / fallbackPolicy / description
        Added value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls."
      • addedInput schema / properties / populationIds / description
        Added value: +"Population identifiers requested from the coverage source or synthetic dataset."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_structure_confidence8 fields changed
      • addedInput schema / properties / confidenceMetrics / description
        Added value: +"Caller-supplied confidence metrics when no AlphaFold PDB is parsed."
      • addedInput schema / properties / modelSource / description
        Added value: +"Origin of a confidence model; AlphaFold pLDDT requires ALPHAFOLD_DB."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / sourceStatus / description
        Added value: +"Provenance label for the supplied structure or compound."
      • addedInput schema / properties / structureArtifactRef / description
        Added value: +"Reference identifying the supplied structure-coordinate artifact."
      • addedInput schema / properties / structureId / description
        Added value: +"Stable identifier of the supplied or retrieved structure."
      • addedInput schema / properties / structurePdbBase64 / description
        Added value: +"Base64-encoded protein PDB coordinate bytes for direct computation."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_surface_accessibility6 fields changed
      • addedInput schema / properties / mappings / description
        Added value: +"Candidate-to-structure residue intervals used to calculate accessibility."
      • addedInput schema / properties / mappings / items / properties / structureId / description
        Added value: +"Stable identifier of the supplied or retrieved structure."
      • addedInput schema / properties / method / description
        Added value: +"Algorithm or provider method selected for this operation; inspect allowed schema values."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / structurePdbBase64 / description
        Added value: +"Base64-encoded protein PDB coordinate bytes for direct computation."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcalculate_synthetic_population_coverage5 fields changed
      • addedInput schema / properties / associations / description
        Added value: +"Peptide-to-HLA restrictions used for population coverage calculation."
      • addedInput schema / properties / classMode / description
        Added value: +"Whether coverage uses class-I, class-II, or combined associations."
      • addedInput schema / properties / populationIds / description
        Added value: +"Population identifiers requested from the coverage source or synthetic dataset."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcalibrate_confidence6 fields changed
      • addedInput schema / properties / calibrationSamples / description
        Added value: +"Labeled examples used only to fit a calibration model."
      • addedInput schema / properties / evaluationSamples / description
        Added value: +"Held-out labeled samples used to evaluate fitted calibration."
      • addedInput schema / properties / method / description
        Added value: +"Algorithm or provider method selected for this operation; inspect allowed schema values."
      • addedInput schema / properties / predictions / description
        Added value: +"Predicted values to calibrate or score using the selected method."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcategorize_candidates7 fields changed
      • addedInput schema / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / candidates / items / properties / candidateKey / description
        Added value: +"Stable key identifying one epitope candidate across evidence stages."
      • addedInput schema / properties / candidates / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / candidates / items / properties / ruleOutcomes / description
        Added value: +"Previously computed rule outcomes supporting an explanation."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / thresholds / description
        Added value: +"Named score or decision cutoffs supplied by the caller."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedchat_with_research_agent5 fields changed
      • addedInput schema / properties / agentMode / description
        Added value: +"Choose deterministic policy execution or an enabled LLM-assisted mode."
      • addedInput schema / properties / evidenceSummary / description
        Added value: +"Evidence already assembled by the caller; no retrieval is performed."
      • addedInput schema / properties / question / description
        Added value: +"Researcher question to answer using only evidenceSummary."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcluster_docking_poses7 fields changed
      • addedInput schema / properties / dockingRunId / description
        Added value: +"Identifier of the docking run whose poses or complex are analyzed."
      • addedInput schema / properties / method / description
        Added value: +"Algorithm or provider method selected for this operation; inspect allowed schema values."
      • addedInput schema / properties / poses / description
        Added value: +"Pose records whose IDs and coordinates correspond to the supplied PDBQT models."
      • addedInput schema / properties / posesPdbqtBase64 / description
        Added value: +"Base64-encoded multi-model Vina pose PDBQT bytes for RMSD clustering."
      • addedInput schema / properties / rmsdThresholdAngstrom / description
        Added value: +"Ligand RMSD distance cutoff in angstroms for grouping poses."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcompute_consensus5 fields changed
      • addedInput schema / properties / configuredRequiredWeight / description
        Added value: +"Total weight of evidence methods required by the consensus profile."
      • addedInput schema / properties / groupKey / description
        Added value: +"Stable identifier for one independent consensus group."
      • addedInput schema / properties / observations / description
        Added value: +"Caller-supplied evidence observations; this tool does not fetch them."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcompute_consensus_batch6 fields changed
      • addedInput schema / properties / groups / description
        Added value: +"Independent candidate groups, each with its own observations and weights."
      • addedInput schema / properties / groups / items / properties / configuredRequiredWeight / description
        Added value: +"Total weight of evidence methods required by the consensus profile."
      • addedInput schema / properties / groups / items / properties / groupKey / description
        Added value: +"Stable identifier for one independent consensus group."
      • addedInput schema / properties / groups / items / properties / observations / description
        Added value: +"Caller-supplied evidence observations; this tool does not fetch them."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedcreate_molstar_view8 fields changed
      • addedInput schema / properties / ligandArtifactRef / description
        Added value: +"Reference identifying the ligand coordinate artifact represented in the view."
      • addedInput schema / properties / ligandPdbBase64 / description
        Added value: +"Base64-encoded ligand PDB coordinates to embed in a 3D view."
      • addedInput schema / properties / mode / description
        Added value: +"Execution or visualization mode; inspect enum choices and required inputs for each."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / structureArtifactRef / description
        Added value: +"Reference identifying the supplied structure-coordinate artifact."
      • addedInput schema / properties / structurePdbBase64 / description
        Added value: +"Base64-encoded protein PDB coordinate bytes for direct computation."
      • addedInput schema / properties / viewId / description
        Added value: +"Caller-chosen identifier for the generated Mol* view."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changeddeduplicate_compounds6 fields changed
      • addedInput schema / properties / compounds / description
        Added value: +"Compound records to compare by canonical chemical identity."
      • addedInput schema / properties / compounds / items / properties / compoundId / description
        Added value: +"Stable identifier for the supplied compound within this run."
      • addedInput schema / properties / compounds / items / properties / smiles / description
        Added value: +"Chemical structure encoded as a SMILES string."
      • addedInput schema / properties / compounds / items / properties / sourceStatus / description
        Added value: +"Provenance label for the supplied structure or compound."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changeddescribe_agentic_workflow4 fields changed
      • addedInput schema / properties / includeFutureInterfaces / description
        Added value: +"Whether to describe declared future interfaces as well as current stages."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / runIntent / description
        Added value: +"Short description of the planned research workflow to inspect."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changeddetect_binding_pockets6 fields changed
      • addedInput schema / properties / method / description
        Added value: +"Algorithm or provider method selected for this operation; inspect allowed schema values."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / structureArtifactRef / description
        Added value: +"Reference identifying the supplied structure-coordinate artifact."
      • addedInput schema / properties / structureId / description
        Added value: +"Stable identifier of the supplied or retrieved structure."
      • addedInput schema / properties / structurePdbBase64 / description
        Added value: +"Base64-encoded protein PDB coordinate bytes for direct computation."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changeddetect_overlapping_epitopes7 fields changed
      • addedInput schema / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / candidates / items / properties / candidateKey / description
        Added value: +"Stable key identifying one epitope candidate across evidence stages."
      • addedInput schema / properties / candidates / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / candidates / items / properties / proteinHash / description
        Added value: +"SHA-256 identity of the protein sequence associated with these candidates."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / threshold / description
        Added value: +"Numeric cutoff for the selected overlap or decision operation."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedexplain_candidate11 fields changed
      • addedInput schema / properties / audience / description
        Added value: +"Intended reader of the candidate explanation."
      • addedInput schema / properties / candidateKey / description
        Added value: +"Stable key identifying one epitope candidate across evidence stages."
      • addedInput schema / properties / category / description
        Added value: +"Final candidate decision category being explained."
      • addedInput schema / properties / componentScores / description
        Added value: +"Named score components that contributed to the fixed final score."
      • addedInput schema / properties / explanationMode / description
        Added value: +"Choose deterministic explanation or configured LLM paraphrase."
      • addedInput schema / properties / finalScore / description
        Added value: +"Already computed final candidate score in the unit interval."
      • addedInput schema / properties / provenanceStatuses / description
        Added value: +"Source-status labels associated with the candidate evidence."
      • addedInput schema / properties / ruleOutcomes / description
        Added value: +"Previously computed rule outcomes supporting an explanation."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / trackRank / description
        Added value: +"Existing rank within the candidate track."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedexport_candidates8 fields changed
      • addedInput schema / properties / candidateSnapshot / description
        Added value: +"Caller-supplied reviewed candidate rows to serialize; no new scores are calculated."
      • addedInput schema / properties / candidateSnapshot / items / properties / category / description
        Added value: +"Final candidate decision category being explained."
      • addedInput schema / properties / candidateSnapshot / items / properties / sourceStatus / description
        Added value: +"Provenance label for the supplied structure or compound."
      • addedInput schema / properties / categories / description
        Added value: +"Candidate categories to include in the export."
      • addedInput schema / properties / format / description
        Added value: +"Requested structure or export format, as enumerated by this tool."
      • addedInput schema / properties / idempotencyKey / description
        Added value: +"Caller-supplied stable key for repeatable export identity."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedexport_research_package13 fields changed
      • addedInput schema / properties / idempotencyKey / description
        Added value: +"Caller-supplied stable key for repeatable export identity."
      • addedInput schema / properties / includeAgentTrace / description
        Added value: +"Whether to include supplied agent trace data in the package."
      • addedInput schema / properties / includeChemistry / description
        Added value: +"Whether to include supplied chemistry artifacts in the package."
      • addedInput schema / properties / includeDocking / description
        Added value: +"Whether to include supplied docking artifacts in the package."
      • addedInput schema / properties / includeStructure / description
        Added value: +"Whether to include supplied structure artifacts in the package."
      • addedInput schema / properties / packageSnapshot / description
        Added value: +"Complete caller-supplied research snapshot to serialize into the ZIP."
      • addedInput schema / properties / packageSnapshot / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / packageSnapshot / properties / compounds / description
        Added value: +"Compound records to compare by canonical chemical identity."
      • addedInput schema / properties / packageSnapshot / properties / compounds / properties / compounds / description
        Added value: +"Compound records to compare by canonical chemical identity."
      • addedInput schema / properties / packageSnapshot / properties / construct / properties / fasta / description
        Added value: +"One protein FASTA record with header and amino-acid sequence."
      • addedInput schema / properties / packageSnapshot / properties / predictions / description
        Added value: +"Predicted values to calibrate or score using the selected method."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedexport_workflow_trace5 fields changed
      • addedInput schema / properties / idempotencyKey / description
        Added value: +"Caller-supplied stable key for repeatable export identity."
      • addedInput schema / properties / redactionProfile / description
        Added value: +"Named policy for omitting private trace content from export."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / traceEvents / description
        Added value: +"Ordered caller-supplied events to serialize after redaction."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedextract_interactions6 fields changed
      • addedInput schema / properties / complexPdbBase64 / description
        Added value: +"Base64-encoded protein-ligand complex PDB bytes from a representative pose."
      • addedInput schema / properties / dockingRunId / description
        Added value: +"Identifier of the docking run whose poses or complex are analyzed."
      • addedInput schema / properties / method / description
        Added value: +"Algorithm or provider method selected for this operation; inspect allowed schema values."
      • addedInput schema / properties / representativePoseIds / description
        Added value: +"Pose IDs whose complex should be examined for contacts."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedfetch_compound5 fields changed
      • addedInput schema / properties / compoundRef / description
        Added value: +"Provider compound reference or exact fixture key; PubChem uses its CID."
      • addedInput schema / properties / fallbackPolicy / description
        Added value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / source / description
        Added value: +"Selected remote provider or exact fixture source."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedfetch_structure6 fields changed
      • addedInput schema / properties / accession / description
        Added value: +"Provider accession, such as an RCSB PDB ID or AlphaFold accession, matching source."
      • addedInput schema / properties / fallbackPolicy / description
        Added value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / source / description
        Added value: +"Selected remote provider or exact fixture source."
      • addedInput schema / properties / targetId / description
        Added value: +"Caller-chosen identifier for the target protein or structure."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedgenerate_candidate_peptides6 fields changed
      • addedInput schema / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / peptideLengths / description
        Added value: +"Peptide window lengths in amino-acid residues for the selected MHC class."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / sequence / description
        Added value: +"Protein amino-acid sequence without a FASTA header."
      • addedInput schema / properties / sequenceHash / description
        Added value: +"Optional SHA-256 identity of the supplied protein sequence."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedgenerate_report7 fields changed
      • addedInput schema / properties / idempotencyKey / description
        Added value: +"Caller-supplied stable key for repeatable export identity."
      • addedInput schema / properties / outputFormats / description
        Added value: +"File formats to render from the supplied report snapshot."
      • addedInput schema / properties / reportSnapshot / description
        Added value: +"Caller-supplied approved report data to render; no evidence retrieval occurs."
      • addedInput schema / properties / reportSnapshot / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / templateVersion / description
        Added value: +"Version of the report layout used to render artifacts."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedmap_epitopes_to_structure7 fields changed
      • addedInput schema / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / mappingMode / description
        Added value: +"DIRECT_COORDINATE uses supplied PDB and reference sequence; FIXTURE replays an exact case."
      • addedInput schema / properties / referenceSequence / description
        Added value: +"Protein sequence whose positions are aligned to PDB residues."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / structureId / description
        Added value: +"Stable identifier of the supplied or retrieved structure."
      • addedInput schema / properties / structurePdbBase64 / description
        Added value: +"Base64-encoded protein PDB coordinate bytes for direct computation."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changednormalize_scores4 fields changed
      • addedInput schema / properties / observations / description
        Added value: +"Caller-supplied evidence observations; this tool does not fetch them."
      • addedInput schema / properties / registryVersion / description
        Added value: +"Version of the score normalization profile registry."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedoptimize_construct_genetic14 fields changed
      • addedInput schema / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / candidates / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / candidates / items / properties / category / description
        Added value: +"Final candidate decision category being explained."
      • addedInput schema / properties / candidates / items / properties / finalScore / description
        Added value: +"Already computed final candidate score in the unit interval."
      • addedInput schema / properties / finalRankingSnapshotHash / description
        Added value: +"SHA-256 identity of the final ranking snapshot supplying these candidates."
      • addedInput schema / properties / linker / description
        Added value: +"Peptide linker sequence used when assembling construct proposals."
      • addedInput schema / properties / maximumConstructSize / description
        Added value: +"Upper limit on construct size for genetic-style search."
      • addedInput schema / properties / maximumGenerations / description
        Added value: +"Maximum optimization generations before returning a proposal."
      • addedInput schema / properties / populationIds / description
        Added value: +"Population identifiers requested from the coverage source or synthetic dataset."
      • addedInput schema / properties / populationSize / description
        Added value: +"Number of candidate construct genomes per optimization generation."
      • addedInput schema / properties / populationWeights / description
        Added value: +"Caller-supplied weights for combining named population coverage values."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / targetCoverage / description
        Added value: +"Desired population coverage fraction used by optimization."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedoptimize_shortlist_coverage14 fields changed
      • addedInput schema / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / candidates / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / candidates / items / properties / category / description
        Added value: +"Final candidate decision category being explained."
      • addedInput schema / properties / candidates / items / properties / finalScore / description
        Added value: +"Already computed final candidate score in the unit interval."
      • addedInput schema / properties / eligibleCandidateIds / description
        Added value: +"IDs of finally eligible candidates considered for the shortlist."
      • addedInput schema / properties / finalRankingSnapshotHash / description
        Added value: +"SHA-256 identity of the final ranking snapshot supplying these candidates."
      • addedInput schema / properties / linker / description
        Added value: +"Peptide linker sequence used when assembling construct proposals."
      • addedInput schema / properties / maximumShortlistSize / description
        Added value: +"Upper limit on candidates selected for the shortlist."
      • addedInput schema / properties / method / description
        Added value: +"Algorithm or provider method selected for this operation; inspect allowed schema values."
      • addedInput schema / properties / populationIds / description
        Added value: +"Population identifiers requested from the coverage source or synthetic dataset."
      • addedInput schema / properties / populationWeights / description
        Added value: +"Caller-supplied weights for combining named population coverage values."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / targetCoverage / description
        Added value: +"Desired population coverage fraction used by optimization."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedpredict_bcell7 fields changed
      • addedInput schema / properties / fallbackPolicy / description
        Added value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls."
      • addedInput schema / properties / methods / description
        Added value: +"Named predictor methods to run or replay; availability depends on configuration."
      • addedInput schema / properties / parameters / description
        Added value: +"Method-specific predictor settings; allowed keys depend on selected methods."
      • addedInput schema / properties / proteinRef / description
        Added value: +"Stable protein reference or exact fixture key for this prediction."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / sequence / description
        Added value: +"Protein amino-acid sequence without a FASTA header."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedpredict_mhci8 fields changed
      • addedInput schema / properties / alleles / description
        Added value: +"HLA allele identifiers relevant to the selected MHC class."
      • addedInput schema / properties / fallbackPolicy / description
        Added value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls."
      • addedInput schema / properties / methods / description
        Added value: +"Named predictor methods to run or replay; availability depends on configuration."
      • addedInput schema / properties / peptideLengths / description
        Added value: +"Peptide window lengths in amino-acid residues for the selected MHC class."
      • addedInput schema / properties / proteinRef / description
        Added value: +"Stable protein reference or exact fixture key for this prediction."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / sequence / description
        Added value: +"Protein amino-acid sequence without a FASTA header."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedpredict_mhcii8 fields changed
      • addedInput schema / properties / alleles / description
        Added value: +"HLA allele identifiers relevant to the selected MHC class."
      • addedInput schema / properties / fallbackPolicy / description
        Added value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls."
      • addedInput schema / properties / methods / description
        Added value: +"Named predictor methods to run or replay; availability depends on configuration."
      • addedInput schema / properties / peptideLengths / description
        Added value: +"Peptide window lengths in amino-acid residues for the selected MHC class."
      • addedInput schema / properties / proteinRef / description
        Added value: +"Stable protein reference or exact fixture key for this prediction."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / sequence / description
        Added value: +"Protein amino-acid sequence without a FASTA header."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedpredict_synthetic_binding10 fields changed
      • addedInput schema / properties / alleles / description
        Added value: +"HLA allele identifiers relevant to the selected MHC class."
      • addedInput schema / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / candidates / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / datasetVersion / description
        Added value: +"Version label for the synthetic demonstration dataset."
      • addedInput schema / properties / method / description
        Added value: +"Algorithm or provider method selected for this operation; inspect allowed schema values."
      • addedInput schema / properties / methodVersion / description
        Added value: +"Version of the selected calculation method."
      • addedInput schema / properties / proteinHash / description
        Added value: +"SHA-256 identity of the protein sequence associated with these candidates."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedprepare_ligand5 fields changed
      • addedInput schema / properties / compoundId / description
        Added value: +"Stable identifier for the supplied compound within this run."
      • addedInput schema / properties / preparationMethod / description
        Added value: +"Preparation backend, such as configured Meeko or exact fixture mode."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / smiles / description
        Added value: +"Chemical structure encoded as a SMILES string."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedprepare_receptor6 fields changed
      • addedInput schema / properties / chainIds / description
        Added value: +"Protein chain identifiers selected from the supplied structure."
      • addedInput schema / properties / preparationMethod / description
        Added value: +"Preparation backend, such as configured Meeko or exact fixture mode."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / structureId / description
        Added value: +"Stable identifier of the supplied or retrieved structure."
      • addedInput schema / properties / structurePdbBase64 / description
        Added value: +"Base64-encoded protein PDB coordinate bytes for direct computation."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedrank_candidates9 fields changed
      • addedInput schema / properties / baseConstraintsComplete / description
        Added value: +"Whether all required base constraint results are present."
      • addedInput schema / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • changedInput schema / properties / candidates / items / oneOf
        Previous value: -[
        -  {
        -    "properties": {
        -      "agreement": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "bindingQuality": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "blockingReviewCondition": {
        -        "type": "boolean"
        -      },
        -      "candidateCoverage": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "candidateId": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "candidateKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "candidateType": {
        -        "enum": [
        -          "MHCI",
        -          "MHCII"
        -        ],
        -        "type": "string"
        -      },
        -      "completeness": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "consensusQuality": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "missingOptionalWeightFraction": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "ruleOutcomes": {
        -        "items": {
        -          "properties": {
        -            "evidenceRefs": {
        -              "items": {
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "message": {
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "outcome": {
        -              "enum": [
        -                "PASS",
        -                "WARN",
        -                "FAIL",
        -                "NOT_EVALUATED"
        -              ],
        -              "type": "string"
        -            },
        -            "ruleId": {
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "ruleVersion": {
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "severity": {
        -              "enum": [
        -                "HARD",
        -                "SOFT"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "ruleId",
        -            "ruleVersion",
        -            "severity",
        -            "outcome",
        -            "evidenceRefs",
        -            "message"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "softWarningCount": {
        -        "maximum": 9007199254740991,
        -        "minimum": 0,
        -        "type": "integer"
        -      },
        -      "start": {
        -        "exclusiveMinimum": 0,
        -        "maximum": 9007199254740991,
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "candidateId",
        -      "candidateKey",
        -      "candidateType",
        -      "bindingQuality",
        -      "consensusQuality",
        -      "candidateCoverage",
        -      "agreement",
        -      "completeness",
        -      "missingOptionalWeightFraction",
        -      "softWarningCount",
        -      "start",
        -      "blockingReviewCondition",
        -      "ruleOutcomes"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "properties": {
        -      "agreement": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "blockingReviewCondition": {
        -        "type": "boolean"
        -      },
        -      "candidateId": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "candidateKey": {
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "candidateType": {
        -        "const": "BCELL",
        -        "type": "string"
        -      },
        -      "completeness": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "missingOptionalWeightFraction": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "predictorMean": {
        -        "maximum": 1,
        -        "minimum": 0,
        -        "type": "number"
        -      },
        -      "ruleOutcomes": {
        -        "items": {
        -          "properties": {
        -            "evidenceRefs": {
        -              "items": {
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "type": "array"
        -            },
        -            "message": {
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "outcome": {
        -              "enum": [
        -                "PASS",
        -                "WARN",
        -                "FAIL",
        -                "NOT_EVALUATED"
        -              ],
        -              "type": "string"
        -            },
        -            "ruleId": {
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "ruleVersion": {
        -              "minLength": 1,
        -              "type": "string"
        -            },
        -            "severity": {
        -              "enum": [
        -                "HARD",
        -                "SOFT"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "ruleId",
        -            "ruleVersion",
        -            "severity",
        -            "outcome",
        -            "evidenceRefs",
        -            "message"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "softWarningCount": {
        -        "maximum": 9007199254740991,
        -        "minimum": 0,
        -        "type": "integer"
        -      },
        -      "start": {
        -        "exclusiveMinimum": 0,
        -        "maximum": 9007199254740991,
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "candidateId",
        -      "candidateKey",
        -      "candidateType",
        -      "predictorMean",
        -      "agreement",
        -      "completeness",
        -      "missingOptionalWeightFraction",
        -      "softWarningCount",
        -      "start",
        -      "blockingReviewCondition",
        -      "ruleOutcomes"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "properties": {
        +      "agreement": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "bindingQuality": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "blockingReviewCondition": {
        +        "type": "boolean"
        +      },
        +      "candidateCoverage": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "candidateId": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "candidateKey": {
        +        "description": "Stable key identifying one epitope candidate across evidence stages.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "candidateType": {
        +        "description": "MHC class or candidate category this operation applies to.",
        +        "enum": [
        +          "MHCI",
        +          "MHCII"
        +        ],
        +        "type": "string"
        +      },
        +      "completeness": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "consensusQuality": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "missingOptionalWeightFraction": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "ruleOutcomes": {
        +        "description": "Previously computed rule outcomes supporting an explanation.",
        +        "items": {
        +          "properties": {
        +            "evidenceRefs": {
        +              "items": {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "message": {
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            "outcome": {
        +              "enum": [
        +                "PASS",
        +                "WARN",
        +                "FAIL",
        +                "NOT_EVALUATED"
        +              ],
        +              "type": "string"
        +            },
        +            "ruleId": {
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            "ruleVersion": {
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            "severity": {
        +              "enum": [
        +                "HARD",
        +                "SOFT"
        +              ],
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "ruleId",
        +            "ruleVersion",
        +            "severity",
        +            "outcome",
        +            "evidenceRefs",
        +            "message"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "softWarningCount": {
        +        "maximum": 9007199254740991,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "start": {
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "candidateId",
        +      "candidateKey",
        +      "candidateType",
        +      "bindingQuality",
        +      "consensusQuality",
        +      "candidateCoverage",
        +      "agreement",
        +      "completeness",
        +      "missingOptionalWeightFraction",
        +      "softWarningCount",
        +      "start",
        +      "blockingReviewCondition",
        +      "ruleOutcomes"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "properties": {
        +      "agreement": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "blockingReviewCondition": {
        +        "type": "boolean"
        +      },
        +      "candidateId": {
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "candidateKey": {
        +        "description": "Stable key identifying one epitope candidate across evidence stages.",
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "candidateType": {
        +        "const": "BCELL",
        +        "description": "MHC class or candidate category this operation applies to.",
        +        "type": "string"
        +      },
        +      "completeness": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "missingOptionalWeightFraction": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "predictorMean": {
        +        "maximum": 1,
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      "ruleOutcomes": {
        +        "description": "Previously computed rule outcomes supporting an explanation.",
        +        "items": {
        +          "properties": {
        +            "evidenceRefs": {
        +              "items": {
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "message": {
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            "outcome": {
        +              "enum": [
        +                "PASS",
        +                "WARN",
        +                "FAIL",
        +                "NOT_EVALUATED"
        +              ],
        +              "type": "string"
        +            },
        +            "ruleId": {
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            "ruleVersion": {
        +              "minLength": 1,
        +              "type": "string"
        +            },
        +            "severity": {
        +              "enum": [
        +                "HARD",
        +                "SOFT"
        +              ],
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "ruleId",
        +            "ruleVersion",
        +            "severity",
        +            "outcome",
        +            "evidenceRefs",
        +            "message"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "softWarningCount": {
        +        "maximum": 9007199254740991,
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      "start": {
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "candidateId",
        +      "candidateKey",
        +      "candidateType",
        +      "predictorMean",
        +      "agreement",
        +      "completeness",
        +      "missingOptionalWeightFraction",
        +      "softWarningCount",
        +      "start",
        +      "blockingReviewCondition",
        +      "ruleOutcomes"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / finalConstraintsComplete / description
        Added value: +"Whether required final constraint results are present for final ranking."
      • addedInput schema / properties / phase / description
        Added value: +"PRELIMINARY scores incomplete work; FINAL requires completed base and final constraints."
      • addedInput schema / properties / rankingProfileVersion / description
        Added value: +"Versioned weighting profile applied to candidate scoring."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / thresholds / description
        Added value: +"Named score or decision cutoffs supplied by the caller."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedremove_duplicate_candidates5 fields changed
      • addedInput schema / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / candidates / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / proteinHash / description
        Added value: +"SHA-256 identity of the protein sequence associated with these candidates."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedrun_agentic_workflow7 fields changed
      • addedInput schema / properties / agentMode / description
        Added value: +"Choose deterministic policy execution or an enabled LLM-assisted mode."
      • addedInput schema / properties / approvedToolNames / description
        Added value: +"Exact tool names the caller permits this workflow to invoke."
      • addedInput schema / properties / objective / description
        Added value: +"Research objective supplied by the caller to label the bounded workflow."
      • addedInput schema / properties / requireHumanApproval / description
        Added value: +"Pause at gated workflow stages until the caller supplies approval."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / toolCalls / description
        Added value: +"Typed, caller-selected tool invocations to execute in stage order."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedrun_docking16 fields changed
      • addedInput schema / properties / box / description
        Added value: +"Docking search-box center and size in receptor-coordinate angstroms."
      • addedInput schema / properties / box / properties / center / description
        Added value: +"Docking-box center coordinates x, y, and z in angstroms."
      • addedInput schema / properties / box / properties / size / description
        Added value: +"Docking-box edge lengths x, y, and z in angstroms."
      • addedInput schema / properties / cpu / description
        Added value: +"Number of CPU workers to request for the Vina run."
      • addedInput schema / properties / dockingBoxId / description
        Added value: +"Caller-chosen identifier for the validated docking search box."
      • addedInput schema / properties / exhaustiveness / description
        Added value: +"Vina search-effort parameter; larger values may take longer."
      • addedInput schema / properties / fallbackPolicy / description
        Added value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls."
      • addedInput schema / properties / ligandId / description
        Added value: +"Caller-chosen ligand identifier for this docking run."
      • addedInput schema / properties / ligandPdbqtBase64 / description
        Added value: +"Base64-encoded prepared ligand PDBQT bytes for Vina."
      • addedInput schema / properties / mode / description
        Added value: +"Execution or visualization mode; inspect enum choices and required inputs for each."
      • addedInput schema / properties / numModes / description
        Added value: +"Maximum Vina ligand poses to return."
      • addedInput schema / properties / receptorId / description
        Added value: +"Caller-chosen receptor identifier for this docking run."
      • addedInput schema / properties / receptorPdbqtBase64 / description
        Added value: +"Base64-encoded prepared receptor PDBQT bytes for Vina."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / seed / description
        Added value: +"Random seed for reproducible Vina search when supplied."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedvalidate_compound5 fields changed
      • addedInput schema / properties / compoundId / description
        Added value: +"Stable identifier for the supplied compound within this run."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / smiles / description
        Added value: +"Chemical structure encoded as a SMILES string."
      • addedInput schema / properties / sourceStatus / description
        Added value: +"Provenance label for the supplied structure or compound."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedvalidate_docking_box5 fields changed
      • addedInput schema / properties / center / description
        Added value: +"Docking-box center coordinates x, y, and z in angstroms."
      • addedInput schema / properties / dockingBoxId / description
        Added value: +"Caller-chosen identifier for the validated docking search box."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / size / description
        Added value: +"Docking-box edge lengths x, y, and z in angstroms."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedvalidate_sequence3 fields changed
      • addedInput schema / properties / fasta / description
        Added value: +"One protein FASTA record with header and amino-acid sequence."
      • addedInput schema / properties / profileVersion / description
        Added value: +"Version of the sequence validation profile; mvp-v1.0 is the current profile."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedvalidate_structure8 fields changed
      • addedInput schema / properties / chainIds / description
        Added value: +"Protein chain identifiers selected from the supplied structure."
      • addedInput schema / properties / format / description
        Added value: +"Requested structure or export format, as enumerated by this tool."
      • addedInput schema / properties / residueCount / description
        Added value: +"Expected protein residue count for metadata consistency checks."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / sourceStatus / description
        Added value: +"Provenance label for the supplied structure or compound."
      • addedInput schema / properties / structureId / description
        Added value: +"Stable identifier of the supplied or retrieved structure."
      • addedInput schema / properties / structurePdbBase64 / description
        Added value: +"Base64-encoded protein PDB coordinate bytes for direct computation."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedvalidate_thresholds5 fields changed
      • addedInput schema / properties / candidates / description
        Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
      • addedInput schema / properties / candidates / items / properties / candidateType / description
        Added value: +"MHC class or candidate category this operation applies to."
      • addedInput schema / properties / ruleProfileVersion / description
        Added value: +"Version of the biological constraint rule profile."
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedvisualize_results4 fields changed
      • addedInput schema / properties / runId / description
        Added value: +"Caller-chosen identifier linking this call to one research run."
      • addedInput schema / properties / visualizationSnapshot / description
        Added value: +"Caller-supplied data for building a view model; no image is rendered."
      • addedInput schema / properties / visualizationType / description
        Added value: +"Named chart or graph view-model type to construct."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "data": {
        +      "additionalProperties": {},
        +      "description": "Tool-specific result fields on success.",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "description": "Structured failure on unsuccessful execution.",
        +      "properties": {
        +        "category": {
        +          "type": "string"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "details": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "category",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "additionalProperties": {},
        +      "description": "Run identifiers, timings, and input/output hashes.",
        +      "properties": {
        +        "completedAt": {
        +          "type": "string"
        +        },
        +        "durationMs": {
        +          "type": "number"
        +        },
        +        "inputHash": {
        +          "type": "string"
        +        },
        +        "outputHash": {
        +          "type": "string"
        +        },
        +        "requestId": {
        +          "type": "string"
        +        },
        +        "runId": {
        +          "type": "string"
        +        },
        +        "startedAt": {
        +          "type": "string"
        +        },
        +        "toolName": {
        +          "type": "string"
        +        },
        +        "toolVersion": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "requestId",
        +        "runId",
        +        "toolName",
        +        "toolVersion",
        +        "startedAt",
        +        "inputHash"
        +      ],
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "Whether execution completed successfully.",
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "ok",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
  2. 46 tool updatesv0.2.0
    • First observedapply_constraint_rules
    • First observedcalculate_molecular_descriptors
    • First observedcalculate_population_coverage
    • First observedcalculate_structure_confidence
    • First observedcalculate_surface_accessibility
    • First observedcalculate_synthetic_population_coverage
    • First observedcalibrate_confidence
    • First observedcategorize_candidates
    • First observedchat_with_research_agent
    • First observedcluster_docking_poses
    • First observedcompute_consensus
    • First observedcompute_consensus_batch
    • First observedcreate_molstar_view
    • First observeddeduplicate_compounds
    • First observeddescribe_agentic_workflow
    • First observeddetect_binding_pockets
    • First observeddetect_overlapping_epitopes
    • First observedexplain_candidate
    • First observedexport_candidates
    • First observedexport_research_package
    • First observedexport_workflow_trace
    • First observedextract_interactions
    • First observedfetch_compound
    • First observedfetch_structure
    • First observedgenerate_candidate_peptides
    • First observedgenerate_report
    • First observedmap_epitopes_to_structure
    • First observednormalize_scores
    • First observedoptimize_construct_genetic
    • First observedoptimize_shortlist_coverage
    • First observedpredict_bcell
    • First observedpredict_mhci
    • First observedpredict_mhcii
    • First observedpredict_synthetic_binding
    • First observedprepare_ligand
    • First observedprepare_receptor
    • First observedrank_candidates
    • First observedremove_duplicate_candidates
    • First observedrun_agentic_workflow
    • First observedrun_docking
    • First observedvalidate_compound
    • First observedvalidate_docking_box
    • First observedvalidate_sequence
    • First observedvalidate_structure
    • First observedvalidate_thresholds
    • First observedvisualize_results

TDQS

A4.1/5.0

Scored across 46 tools

Disambiguation4/5

Despite 46 tools, descriptions consistently state scope boundaries and name explicit alternatives (predict_mhci vs predict_mhcii vs predict_bcell, compute_consensus vs compute_consensus_batch, remove_duplicate_candidates vs deduplicate_compounds, generate_report vs export_candidates). A few near-neighbors remain easy to confuse at a glance—the synthetic vs authoritative pairs, and create_molstar_view vs visualize_results vs generate_report—but the prose resolves them. No two tools appear to do the same thing.

Naming Consistency5/5

Every tool is snake_case with a verb-first, object-second pattern (validate_sequence, calculate_surface_accessibility, prepare_ligand, run_docking, export_workflow_trace). Suffix modifiers like _batch and prefixes like compute_/calculate_ are used consistently within their families. Minor quirks (predict_mhci without a separator before the numeral) do not break predictability.

Tool Count3/5

The 46 tools map onto genuinely distinct pipeline stages—sequence, prediction, consensus, constraints, structure, chemistry, docking, reporting, and orchestration—so most earn their place rather than being padding. Still, 46 is heavy for a single MCP surface and forces an agent to plan across many stages, with several parallel 'synthetic/demo' twins adding surface area.

Completeness4/5

The surface covers the full lifecycle from sequence validation through prediction, normalization, consensus, ranking, constraints, structure mapping, docking, interaction analysis, and reporting/orchestration export. Gaps are minor: no allele/population listing or lookup tools, no async job status or artifact retrieval, and no cleanup or cache management operations.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP-native scientific skills for reproducible computational biology and AI-driven drug-discovery workflows. It combines deterministic scientific tools with an MCP server to give AI agents real computational capabilities.
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    Provides MCP access to plan and execute reproducible computational experiments with immutable execution plans, artifact provenance, verification checks, and support for direct, Slurm, and PBS backends.
    17
    Apache 2.0