ImmunoGraph MCP
ImmunoGraph MCP is a provenance-aware MCP server with 46 typed tools for inspectable computational epitope research.
Validate/normalize FASTA and generate MHC-I/II peptide windows.
Resolve MHC-I/II and B-cell predictions through configured live/cache/fixture connectors; run synthetic demos and population coverage.
Normalize scores, compute consensus/coverage, rank/optimize candidates and constructs, calibrate confidence, and apply overlap, duplicate, threshold, and constraint rules.
Fetch/validate structures and compounds; map epitopes; calculate accessibility, AlphaFold confidence, and binding pockets; create Mol* viewers.
Validate/deduplicate compounds, calculate descriptors, prepare ligands/receptors, and validate docking boxes.
Run AutoDock Vina docking or fixtures, cluster poses, and extract PLIP protein-ligand interactions.
Generate reports, export candidates/CSVs, visualize results, explain candidates, and export redacted workflow traces.
Describe/run bounded agentic workflows, chat over supplied evidence, and export a checksummed research package with artifacts and provenance.
Results distinguish LIVE, CACHED, SYNTHETIC, and FIXTURE sources; outputs are for computational research, not clinical or experimental validation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ImmunoGraph MCPValidate this FASTA sequence and generate 9-mer peptide windows"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
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 |
|
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.tgzRegister 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 startnpm 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 -.-> XThese 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.

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 |
| A configured external provider or local scientific runtime executed on supplied inputs | Review its method, parameters, and limitations |
| An approved, exact-match offline replay | Demonstration only |
| 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 |
| Access to the relevant IEDB APIs |
RCSB PDB, AlphaFold DB, PubChem |
| Provider network access |
RDKit, Meeko, FreeSASA, fpocket | Installed Python packages or native binaries | |
AutoDock Vina and PLIP |
| 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 toolsapply_constraint_rulesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| snapshotHash | Yes | SHA-256 identity of the immutable evidence snapshot. | |
| baseConstraints | Yes | Previously evaluated base rule inputs for final constraint application. | |
| overlapThreshold | Yes | Minimum overlap fraction used by the final overlap rule. | |
| overlapCandidates | Yes | Candidate records whose positional overlaps enter final constraint rules. | |
| ruleProfileVersion | Yes | Version of the biological constraint rule profile. | |
| duplicateCandidates | Yes | Candidate records to evaluate for exact positional duplication. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_descriptorsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| method | Yes | Algorithm or provider method selected for this operation; inspect allowed schema values. | |
| smiles | Yes | Chemical structure encoded as a SMILES string. | |
| compoundId | Yes | Stable identifier for the supplied compound within this run. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_coverageARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | No | Caller-chosen identifier linking this call to one research run. | interactive-run |
| classMode | No | Whether coverage uses class-I, class-II, or combined associations. | COMBINED |
| associations | Yes | Peptide-to-HLA restrictions used for population coverage calculation. | |
| populationIds | Yes | Population identifiers requested from the coverage source or synthetic dataset. | |
| fallbackPolicy | No | Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls. | LIVE_THEN_CACHE_THEN_FIXTURE |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_confidenceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| modelSource | No | Origin of a confidence model; AlphaFold pLDDT requires ALPHAFOLD_DB. | |
| structureId | Yes | Stable identifier of the supplied or retrieved structure. | |
| sourceStatus | Yes | Provenance label for the supplied structure or compound. | |
| confidenceMetrics | No | Caller-supplied confidence metrics when no AlphaFold PDB is parsed. | |
| structurePdbBase64 | No | Base64-encoded protein PDB coordinate bytes for direct computation. | |
| structureArtifactRef | No | Reference identifying the supplied structure-coordinate artifact. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_accessibilityARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| method | Yes | Algorithm or provider method selected for this operation; inspect allowed schema values. | |
| mappings | Yes | Candidate-to-structure residue intervals used to calculate accessibility. | |
| structurePdbBase64 | No | Base64-encoded protein PDB coordinate bytes for direct computation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_coverageARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | No | Caller-chosen identifier linking this call to one research run. | interactive-run |
| classMode | No | Whether coverage uses class-I, class-II, or combined associations. | COMBINED |
| associations | Yes | Peptide-to-HLA restrictions used for population coverage calculation. | |
| populationIds | Yes | Population identifiers requested from the coverage source or synthetic dataset. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_confidenceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| method | Yes | Algorithm or provider method selected for this operation; inspect allowed schema values. | |
| predictions | Yes | Predicted values to calibrate or score using the selected method. | |
| evaluationSamples | No | Held-out labeled samples used to evaluate fitted calibration. | |
| calibrationSamples | No | Labeled examples used only to fit a calibration model. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_candidatesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| candidates | Yes | Caller-supplied candidate records; required nested fields depend on this operation. | |
| thresholds | Yes | Named score or decision cutoffs supplied by the caller. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_agentARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| question | Yes | Researcher question to answer using only evidenceSummary. | |
| agentMode | Yes | Choose deterministic policy execution or an enabled LLM-assisted mode. | |
| evidenceSummary | Yes | Evidence already assembled by the caller; no retrieval is performed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_posesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| poses | Yes | Pose records whose IDs and coordinates correspond to the supplied PDBQT models. | |
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| method | Yes | Algorithm or provider method selected for this operation; inspect allowed schema values. | |
| dockingRunId | Yes | Identifier of the docking run whose poses or complex are analyzed. | |
| posesPdbqtBase64 | No | Base64-encoded multi-model Vina pose PDBQT bytes for RMSD clustering. | |
| rmsdThresholdAngstrom | No | Ligand RMSD distance cutoff in angstroms for grouping poses. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_consensusARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| groupKey | Yes | Stable identifier for one independent consensus group. | |
| observations | Yes | Caller-supplied evidence observations; this tool does not fetch them. | |
| configuredRequiredWeight | Yes | Total weight of evidence methods required by the consensus profile. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_batchARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| groups | Yes | Independent candidate groups, each with its own observations and weights. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_viewARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Execution or visualization mode; inspect enum choices and required inputs for each. | |
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| viewId | Yes | Caller-chosen identifier for the generated Mol* view. | |
| ligandPdbBase64 | No | Base64-encoded ligand PDB coordinates to embed in a 3D view. | |
| ligandArtifactRef | No | Reference identifying the ligand coordinate artifact represented in the view. | |
| structurePdbBase64 | No | Base64-encoded protein PDB coordinate bytes for direct computation. | |
| structureArtifactRef | Yes | Reference identifying the supplied structure-coordinate artifact. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_compoundsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| compounds | Yes | Compound records to compare by canonical chemical identity. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_workflowARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| runIntent | Yes | Short description of the planned research workflow to inspect. | |
| includeFutureInterfaces | Yes | Whether to describe declared future interfaces as well as current stages. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_pocketsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| method | Yes | Algorithm or provider method selected for this operation; inspect allowed schema values. | |
| structureId | Yes | Stable identifier of the supplied or retrieved structure. | |
| structurePdbBase64 | No | Base64-encoded protein PDB coordinate bytes for direct computation. | |
| structureArtifactRef | Yes | Reference identifying the supplied structure-coordinate artifact. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_epitopesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| threshold | Yes | Numeric cutoff for the selected overlap or decision operation. | |
| candidates | Yes | Caller-supplied candidate records; required nested fields depend on this operation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_candidateARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| audience | Yes | Intended reader of the candidate explanation. | |
| category | Yes | Final candidate decision category being explained. | |
| trackRank | Yes | Existing rank within the candidate track. | |
| finalScore | Yes | Already computed final candidate score in the unit interval. | |
| candidateKey | Yes | Stable key identifying one epitope candidate across evidence stages. | |
| ruleOutcomes | Yes | Previously computed rule outcomes supporting an explanation. | |
| componentScores | Yes | Named score components that contributed to the fixed final score. | |
| explanationMode | Yes | Choose deterministic explanation or configured LLM paraphrase. | |
| provenanceStatuses | Yes | Source-status labels associated with the candidate evidence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_candidatesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| format | Yes | Requested structure or export format, as enumerated by this tool. | |
| categories | Yes | Candidate categories to include in the export. | |
| idempotencyKey | Yes | Caller-supplied stable key for repeatable export identity. | |
| candidateSnapshot | No | Caller-supplied reviewed candidate rows to serialize; no new scores are calculated. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_packageARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| idempotencyKey | Yes | Caller-supplied stable key for repeatable export identity. | |
| includeDocking | Yes | Whether to include supplied docking artifacts in the package. | |
| packageSnapshot | No | Complete caller-supplied research snapshot to serialize into the ZIP. | |
| includeChemistry | Yes | Whether to include supplied chemistry artifacts in the package. | |
| includeStructure | Yes | Whether to include supplied structure artifacts in the package. | |
| includeAgentTrace | Yes | Whether to include supplied agent trace data in the package. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_traceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| traceEvents | No | Ordered caller-supplied events to serialize after redaction. | |
| idempotencyKey | Yes | Caller-supplied stable key for repeatable export identity. | |
| redactionProfile | Yes | Named policy for omitting private trace content from export. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_interactionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| method | Yes | Algorithm or provider method selected for this operation; inspect allowed schema values. | |
| dockingRunId | Yes | Identifier of the docking run whose poses or complex are analyzed. | |
| complexPdbBase64 | No | Base64-encoded protein-ligand complex PDB bytes from a representative pose. | |
| representativePoseIds | Yes | Pose IDs whose complex should be examined for contacts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_compoundARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| source | Yes | Selected remote provider or exact fixture source. | |
| compoundRef | Yes | Provider compound reference or exact fixture key; PubChem uses its CID. | |
| fallbackPolicy | Yes | Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_structureARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| source | Yes | Selected remote provider or exact fixture source. | |
| targetId | Yes | Caller-chosen identifier for the target protein or structure. | |
| accession | Yes | Provider accession, such as an RCSB PDB ID or AlphaFold accession, matching source. | |
| fallbackPolicy | Yes | Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_peptidesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | No | Caller-chosen identifier linking this call to one research run. | interactive-run |
| sequence | Yes | Protein amino-acid sequence without a FASTA header. | |
| sequenceHash | No | Optional SHA-256 identity of the supplied protein sequence. | |
| candidateType | Yes | MHC class or candidate category this operation applies to. | |
| peptideLengths | Yes | Peptide window lengths in amino-acid residues for the selected MHC class. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_reportARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| outputFormats | Yes | File formats to render from the supplied report snapshot. | |
| idempotencyKey | Yes | Caller-supplied stable key for repeatable export identity. | |
| reportSnapshot | No | Caller-supplied approved report data to render; no evidence retrieval occurs. | |
| templateVersion | Yes | Version of the report layout used to render artifacts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_structureARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| candidates | Yes | Caller-supplied candidate records; required nested fields depend on this operation. | |
| mappingMode | Yes | DIRECT_COORDINATE uses supplied PDB and reference sequence; FIXTURE replays an exact case. | |
| structureId | Yes | Stable identifier of the supplied or retrieved structure. | |
| referenceSequence | No | Protein sequence whose positions are aligned to PDB residues. | |
| structurePdbBase64 | No | Base64-encoded protein PDB coordinate bytes for direct computation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_scoresARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| observations | Yes | Caller-supplied evidence observations; this tool does not fetch them. | |
| registryVersion | Yes | Version of the score normalization profile registry. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_geneticARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| linker | Yes | Peptide linker sequence used when assembling construct proposals. | |
| candidates | Yes | Caller-supplied candidate records; required nested fields depend on this operation. | |
| populationIds | Yes | Population identifiers requested from the coverage source or synthetic dataset. | |
| populationSize | Yes | Number of candidate construct genomes per optimization generation. | |
| targetCoverage | Yes | Desired population coverage fraction used by optimization. | |
| populationWeights | No | Caller-supplied weights for combining named population coverage values. | |
| maximumGenerations | Yes | Maximum optimization generations before returning a proposal. | |
| maximumConstructSize | Yes | Upper limit on construct size for genetic-style search. | |
| finalRankingSnapshotHash | Yes | SHA-256 identity of the final ranking snapshot supplying these candidates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_coverageARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| linker | No | Peptide linker sequence used when assembling construct proposals. | |
| method | Yes | Algorithm or provider method selected for this operation; inspect allowed schema values. | |
| candidates | No | Caller-supplied candidate records; required nested fields depend on this operation. | |
| populationIds | Yes | Population identifiers requested from the coverage source or synthetic dataset. | |
| targetCoverage | No | Desired population coverage fraction used by optimization. | |
| populationWeights | No | Caller-supplied weights for combining named population coverage values. | |
| eligibleCandidateIds | Yes | IDs of finally eligible candidates considered for the shortlist. | |
| maximumShortlistSize | No | Upper limit on candidates selected for the shortlist. | |
| finalRankingSnapshotHash | Yes | SHA-256 identity of the final ranking snapshot supplying these candidates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_bcellARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| methods | Yes | Named predictor methods to run or replay; availability depends on configuration. | |
| sequence | No | Protein amino-acid sequence without a FASTA header. | |
| parameters | Yes | Method-specific predictor settings; allowed keys depend on selected methods. | |
| proteinRef | Yes | Stable protein reference or exact fixture key for this prediction. | |
| fallbackPolicy | Yes | Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_mhciARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | No | Caller-chosen identifier linking this call to one research run. | interactive-run |
| alleles | Yes | HLA allele identifiers relevant to the selected MHC class. | |
| methods | No | Named predictor methods to run or replay; availability depends on configuration. | |
| sequence | No | Protein amino-acid sequence without a FASTA header. | |
| proteinRef | No | Stable protein reference or exact fixture key for this prediction. | |
| fallbackPolicy | No | Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls. | LIVE_THEN_CACHE_THEN_FIXTURE |
| peptideLengths | Yes | Peptide window lengths in amino-acid residues for the selected MHC class. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_mhciiARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | No | Caller-chosen identifier linking this call to one research run. | interactive-run |
| alleles | Yes | HLA allele identifiers relevant to the selected MHC class. | |
| methods | No | Named predictor methods to run or replay; availability depends on configuration. | |
| sequence | No | Protein amino-acid sequence without a FASTA header. | |
| proteinRef | No | Stable protein reference or exact fixture key for this prediction. | |
| fallbackPolicy | No | Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls. | LIVE_THEN_CACHE_THEN_FIXTURE |
| peptideLengths | Yes | Peptide window lengths in amino-acid residues for the selected MHC class. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_bindingARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| method | Yes | Algorithm or provider method selected for this operation; inspect allowed schema values. | |
| alleles | Yes | HLA allele identifiers relevant to the selected MHC class. | |
| candidates | Yes | Caller-supplied candidate records; required nested fields depend on this operation. | |
| proteinHash | Yes | SHA-256 identity of the protein sequence associated with these candidates. | |
| candidateType | Yes | MHC class or candidate category this operation applies to. | |
| methodVersion | Yes | Version of the selected calculation method. | |
| datasetVersion | Yes | Version label for the synthetic demonstration dataset. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_ligandARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| smiles | Yes | Chemical structure encoded as a SMILES string. | |
| compoundId | Yes | Stable identifier for the supplied compound within this run. | |
| preparationMethod | Yes | Preparation backend, such as configured Meeko or exact fixture mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_receptorARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| chainIds | Yes | Protein chain identifiers selected from the supplied structure. | |
| structureId | Yes | Stable identifier of the supplied or retrieved structure. | |
| preparationMethod | Yes | Preparation backend, such as configured Meeko or exact fixture mode. | |
| structurePdbBase64 | No | Base64-encoded protein PDB coordinate bytes for direct computation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_candidatesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| phase | Yes | PRELIMINARY scores incomplete work; FINAL requires completed base and final constraints. | |
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| candidates | Yes | Caller-supplied candidate records; required nested fields depend on this operation. | |
| thresholds | No | Named score or decision cutoffs supplied by the caller. | |
| rankingProfileVersion | Yes | Versioned weighting profile applied to candidate scoring. | |
| baseConstraintsComplete | Yes | Whether all required base constraint results are present. | |
| finalConstraintsComplete | Yes | Whether required final constraint results are present for final ranking. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_candidatesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| candidates | Yes | Caller-supplied candidate records; required nested fields depend on this operation. | |
| proteinHash | Yes | SHA-256 identity of the protein sequence associated with these candidates. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_workflowARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| agentMode | Yes | Choose deterministic policy execution or an enabled LLM-assisted mode. | |
| objective | Yes | Research objective supplied by the caller to label the bounded workflow. | |
| toolCalls | No | Typed, caller-selected tool invocations to execute in stage order. | |
| approvedToolNames | Yes | Exact tool names the caller permits this workflow to invoke. | |
| requireHumanApproval | Yes | Pause at gated workflow stages until the caller supplies approval. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_dockingARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| box | No | Docking search-box center and size in receptor-coordinate angstroms. | |
| cpu | No | Number of CPU workers to request for the Vina run. | |
| mode | Yes | Execution or visualization mode; inspect enum choices and required inputs for each. | |
| seed | No | Random seed for reproducible Vina search when supplied. | |
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| ligandId | Yes | Caller-chosen ligand identifier for this docking run. | |
| numModes | No | Maximum Vina ligand poses to return. | |
| receptorId | Yes | Caller-chosen receptor identifier for this docking run. | |
| dockingBoxId | Yes | Caller-chosen identifier for the validated docking search box. | |
| exhaustiveness | No | Vina search-effort parameter; larger values may take longer. | |
| fallbackPolicy | Yes | Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls. | |
| ligandPdbqtBase64 | No | Base64-encoded prepared ligand PDBQT bytes for Vina. | |
| receptorPdbqtBase64 | No | Base64-encoded prepared receptor PDBQT bytes for Vina. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_compoundARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| smiles | Yes | Chemical structure encoded as a SMILES string. | |
| compoundId | Yes | Stable identifier for the supplied compound within this run. | |
| sourceStatus | Yes | Provenance label for the supplied structure or compound. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_boxARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| size | Yes | Docking-box edge lengths x, y, and z in angstroms. | |
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| center | Yes | Docking-box center coordinates x, y, and z in angstroms. | |
| dockingBoxId | Yes | Caller-chosen identifier for the validated docking search box. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_sequenceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| fasta | Yes | One protein FASTA record with header and amino-acid sequence. | |
| profileVersion | Yes | Version of the sequence validation profile; mvp-v1.0 is the current profile. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_structureARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| format | Yes | Requested structure or export format, as enumerated by this tool. | |
| chainIds | Yes | Protein chain identifiers selected from the supplied structure. | |
| structureId | Yes | Stable identifier of the supplied or retrieved structure. | |
| residueCount | Yes | Expected protein residue count for metadata consistency checks. | |
| sourceStatus | Yes | Provenance label for the supplied structure or compound. | |
| structurePdbBase64 | No | Base64-encoded protein PDB coordinate bytes for direct computation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_thresholdsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| candidates | Yes | Caller-supplied candidate records; required nested fields depend on this operation. | |
| ruleProfileVersion | Yes | Version of the biological constraint rule profile. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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_resultsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Caller-chosen identifier linking this call to one research run. | |
| visualizationType | Yes | Named chart or graph view-model type to construct. | |
| visualizationSnapshot | No | Caller-supplied data for building a view model; no image is rendered. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether execution completed successfully. |
| data | No | Tool-specific result fields on success. |
| meta | Yes | Run identifiers, timings, and input/output hashes. |
| error | No | Structured failure on unsuccessful execution. |
TDQS
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.
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.
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.
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.
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.
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.
46 tool updates
v0.2.1- Changed
apply_constraint_rules14 fields changed- added
Input schema / properties / baseConstraints / descriptionAdded value: +"Previously evaluated base rule inputs for final constraint application." - added
Input schema / properties / baseConstraints / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / duplicateCandidates / descriptionAdded value: +"Candidate records to evaluate for exact positional duplication." - added
Input schema / properties / duplicateCandidates / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / duplicateCandidates / items / properties / proteinHash / descriptionAdded value: +"SHA-256 identity of the protein sequence associated with these candidates." - added
Input schema / properties / overlapCandidates / descriptionAdded value: +"Candidate records whose positional overlaps enter final constraint rules." - added
Input schema / properties / overlapCandidates / items / properties / candidateKey / descriptionAdded value: +"Stable key identifying one epitope candidate across evidence stages." - added
Input schema / properties / overlapCandidates / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / overlapCandidates / items / properties / proteinHash / descriptionAdded value: +"SHA-256 identity of the protein sequence associated with these candidates." - added
Input schema / properties / overlapThreshold / descriptionAdded value: +"Minimum overlap fraction used by the final overlap rule." - added
Input schema / properties / ruleProfileVersion / descriptionAdded value: +"Version of the biological constraint rule profile." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / snapshotHash / descriptionAdded value: +"SHA-256 identity of the immutable evidence snapshot." - changed
Output 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" +}
- Changed
calculate_molecular_descriptors5 fields changed- added
Input schema / properties / compoundId / descriptionAdded value: +"Stable identifier for the supplied compound within this run." - added
Input schema / properties / method / descriptionAdded value: +"Algorithm or provider method selected for this operation; inspect allowed schema values." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / smiles / descriptionAdded value: +"Chemical structure encoded as a SMILES string." - changed
Output 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" +}
- Changed
calculate_population_coverage6 fields changed- added
Input schema / properties / associations / descriptionAdded value: +"Peptide-to-HLA restrictions used for population coverage calculation." - added
Input schema / properties / classMode / descriptionAdded value: +"Whether coverage uses class-I, class-II, or combined associations." - added
Input schema / properties / fallbackPolicy / descriptionAdded value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls." - added
Input schema / properties / populationIds / descriptionAdded value: +"Population identifiers requested from the coverage source or synthetic dataset." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
calculate_structure_confidence8 fields changed- added
Input schema / properties / confidenceMetrics / descriptionAdded value: +"Caller-supplied confidence metrics when no AlphaFold PDB is parsed." - added
Input schema / properties / modelSource / descriptionAdded value: +"Origin of a confidence model; AlphaFold pLDDT requires ALPHAFOLD_DB." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / sourceStatus / descriptionAdded value: +"Provenance label for the supplied structure or compound." - added
Input schema / properties / structureArtifactRef / descriptionAdded value: +"Reference identifying the supplied structure-coordinate artifact." - added
Input schema / properties / structureId / descriptionAdded value: +"Stable identifier of the supplied or retrieved structure." - added
Input schema / properties / structurePdbBase64 / descriptionAdded value: +"Base64-encoded protein PDB coordinate bytes for direct computation." - changed
Output 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" +}
- Changed
calculate_surface_accessibility6 fields changed- added
Input schema / properties / mappings / descriptionAdded value: +"Candidate-to-structure residue intervals used to calculate accessibility." - added
Input schema / properties / mappings / items / properties / structureId / descriptionAdded value: +"Stable identifier of the supplied or retrieved structure." - added
Input schema / properties / method / descriptionAdded value: +"Algorithm or provider method selected for this operation; inspect allowed schema values." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / structurePdbBase64 / descriptionAdded value: +"Base64-encoded protein PDB coordinate bytes for direct computation." - changed
Output 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" +}
- Changed
calculate_synthetic_population_coverage5 fields changed- added
Input schema / properties / associations / descriptionAdded value: +"Peptide-to-HLA restrictions used for population coverage calculation." - added
Input schema / properties / classMode / descriptionAdded value: +"Whether coverage uses class-I, class-II, or combined associations." - added
Input schema / properties / populationIds / descriptionAdded value: +"Population identifiers requested from the coverage source or synthetic dataset." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
calibrate_confidence6 fields changed- added
Input schema / properties / calibrationSamples / descriptionAdded value: +"Labeled examples used only to fit a calibration model." - added
Input schema / properties / evaluationSamples / descriptionAdded value: +"Held-out labeled samples used to evaluate fitted calibration." - added
Input schema / properties / method / descriptionAdded value: +"Algorithm or provider method selected for this operation; inspect allowed schema values." - added
Input schema / properties / predictions / descriptionAdded value: +"Predicted values to calibrate or score using the selected method." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
categorize_candidates7 fields changed- added
Input schema / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / candidates / items / properties / candidateKey / descriptionAdded value: +"Stable key identifying one epitope candidate across evidence stages." - added
Input schema / properties / candidates / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / candidates / items / properties / ruleOutcomes / descriptionAdded value: +"Previously computed rule outcomes supporting an explanation." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / thresholds / descriptionAdded value: +"Named score or decision cutoffs supplied by the caller." - changed
Output 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" +}
- Changed
chat_with_research_agent5 fields changed- added
Input schema / properties / agentMode / descriptionAdded value: +"Choose deterministic policy execution or an enabled LLM-assisted mode." - added
Input schema / properties / evidenceSummary / descriptionAdded value: +"Evidence already assembled by the caller; no retrieval is performed." - added
Input schema / properties / question / descriptionAdded value: +"Researcher question to answer using only evidenceSummary." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
cluster_docking_poses7 fields changed- added
Input schema / properties / dockingRunId / descriptionAdded value: +"Identifier of the docking run whose poses or complex are analyzed." - added
Input schema / properties / method / descriptionAdded value: +"Algorithm or provider method selected for this operation; inspect allowed schema values." - added
Input schema / properties / poses / descriptionAdded value: +"Pose records whose IDs and coordinates correspond to the supplied PDBQT models." - added
Input schema / properties / posesPdbqtBase64 / descriptionAdded value: +"Base64-encoded multi-model Vina pose PDBQT bytes for RMSD clustering." - added
Input schema / properties / rmsdThresholdAngstrom / descriptionAdded value: +"Ligand RMSD distance cutoff in angstroms for grouping poses." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
compute_consensus5 fields changed- added
Input schema / properties / configuredRequiredWeight / descriptionAdded value: +"Total weight of evidence methods required by the consensus profile." - added
Input schema / properties / groupKey / descriptionAdded value: +"Stable identifier for one independent consensus group." - added
Input schema / properties / observations / descriptionAdded value: +"Caller-supplied evidence observations; this tool does not fetch them." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
compute_consensus_batch6 fields changed- added
Input schema / properties / groups / descriptionAdded value: +"Independent candidate groups, each with its own observations and weights." - added
Input schema / properties / groups / items / properties / configuredRequiredWeight / descriptionAdded value: +"Total weight of evidence methods required by the consensus profile." - added
Input schema / properties / groups / items / properties / groupKey / descriptionAdded value: +"Stable identifier for one independent consensus group." - added
Input schema / properties / groups / items / properties / observations / descriptionAdded value: +"Caller-supplied evidence observations; this tool does not fetch them." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
create_molstar_view8 fields changed- added
Input schema / properties / ligandArtifactRef / descriptionAdded value: +"Reference identifying the ligand coordinate artifact represented in the view." - added
Input schema / properties / ligandPdbBase64 / descriptionAdded value: +"Base64-encoded ligand PDB coordinates to embed in a 3D view." - added
Input schema / properties / mode / descriptionAdded value: +"Execution or visualization mode; inspect enum choices and required inputs for each." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / structureArtifactRef / descriptionAdded value: +"Reference identifying the supplied structure-coordinate artifact." - added
Input schema / properties / structurePdbBase64 / descriptionAdded value: +"Base64-encoded protein PDB coordinate bytes for direct computation." - added
Input schema / properties / viewId / descriptionAdded value: +"Caller-chosen identifier for the generated Mol* view." - changed
Output 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" +}
- Changed
deduplicate_compounds6 fields changed- added
Input schema / properties / compounds / descriptionAdded value: +"Compound records to compare by canonical chemical identity." - added
Input schema / properties / compounds / items / properties / compoundId / descriptionAdded value: +"Stable identifier for the supplied compound within this run." - added
Input schema / properties / compounds / items / properties / smiles / descriptionAdded value: +"Chemical structure encoded as a SMILES string." - added
Input schema / properties / compounds / items / properties / sourceStatus / descriptionAdded value: +"Provenance label for the supplied structure or compound." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
describe_agentic_workflow4 fields changed- added
Input schema / properties / includeFutureInterfaces / descriptionAdded value: +"Whether to describe declared future interfaces as well as current stages." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / runIntent / descriptionAdded value: +"Short description of the planned research workflow to inspect." - changed
Output 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" +}
- Changed
detect_binding_pockets6 fields changed- added
Input schema / properties / method / descriptionAdded value: +"Algorithm or provider method selected for this operation; inspect allowed schema values." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / structureArtifactRef / descriptionAdded value: +"Reference identifying the supplied structure-coordinate artifact." - added
Input schema / properties / structureId / descriptionAdded value: +"Stable identifier of the supplied or retrieved structure." - added
Input schema / properties / structurePdbBase64 / descriptionAdded value: +"Base64-encoded protein PDB coordinate bytes for direct computation." - changed
Output 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" +}
- Changed
detect_overlapping_epitopes7 fields changed- added
Input schema / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / candidates / items / properties / candidateKey / descriptionAdded value: +"Stable key identifying one epitope candidate across evidence stages." - added
Input schema / properties / candidates / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / candidates / items / properties / proteinHash / descriptionAdded value: +"SHA-256 identity of the protein sequence associated with these candidates." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / threshold / descriptionAdded value: +"Numeric cutoff for the selected overlap or decision operation." - changed
Output 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" +}
- Changed
explain_candidate11 fields changed- added
Input schema / properties / audience / descriptionAdded value: +"Intended reader of the candidate explanation." - added
Input schema / properties / candidateKey / descriptionAdded value: +"Stable key identifying one epitope candidate across evidence stages." - added
Input schema / properties / category / descriptionAdded value: +"Final candidate decision category being explained." - added
Input schema / properties / componentScores / descriptionAdded value: +"Named score components that contributed to the fixed final score." - added
Input schema / properties / explanationMode / descriptionAdded value: +"Choose deterministic explanation or configured LLM paraphrase." - added
Input schema / properties / finalScore / descriptionAdded value: +"Already computed final candidate score in the unit interval." - added
Input schema / properties / provenanceStatuses / descriptionAdded value: +"Source-status labels associated with the candidate evidence." - added
Input schema / properties / ruleOutcomes / descriptionAdded value: +"Previously computed rule outcomes supporting an explanation." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / trackRank / descriptionAdded value: +"Existing rank within the candidate track." - changed
Output 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" +}
- Changed
export_candidates8 fields changed- added
Input schema / properties / candidateSnapshot / descriptionAdded value: +"Caller-supplied reviewed candidate rows to serialize; no new scores are calculated." - added
Input schema / properties / candidateSnapshot / items / properties / category / descriptionAdded value: +"Final candidate decision category being explained." - added
Input schema / properties / candidateSnapshot / items / properties / sourceStatus / descriptionAdded value: +"Provenance label for the supplied structure or compound." - added
Input schema / properties / categories / descriptionAdded value: +"Candidate categories to include in the export." - added
Input schema / properties / format / descriptionAdded value: +"Requested structure or export format, as enumerated by this tool." - added
Input schema / properties / idempotencyKey / descriptionAdded value: +"Caller-supplied stable key for repeatable export identity." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
export_research_package13 fields changed- added
Input schema / properties / idempotencyKey / descriptionAdded value: +"Caller-supplied stable key for repeatable export identity." - added
Input schema / properties / includeAgentTrace / descriptionAdded value: +"Whether to include supplied agent trace data in the package." - added
Input schema / properties / includeChemistry / descriptionAdded value: +"Whether to include supplied chemistry artifacts in the package." - added
Input schema / properties / includeDocking / descriptionAdded value: +"Whether to include supplied docking artifacts in the package." - added
Input schema / properties / includeStructure / descriptionAdded value: +"Whether to include supplied structure artifacts in the package." - added
Input schema / properties / packageSnapshot / descriptionAdded value: +"Complete caller-supplied research snapshot to serialize into the ZIP." - added
Input schema / properties / packageSnapshot / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / packageSnapshot / properties / compounds / descriptionAdded value: +"Compound records to compare by canonical chemical identity." - added
Input schema / properties / packageSnapshot / properties / compounds / properties / compounds / descriptionAdded value: +"Compound records to compare by canonical chemical identity." - added
Input schema / properties / packageSnapshot / properties / construct / properties / fasta / descriptionAdded value: +"One protein FASTA record with header and amino-acid sequence." - added
Input schema / properties / packageSnapshot / properties / predictions / descriptionAdded value: +"Predicted values to calibrate or score using the selected method." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
export_workflow_trace5 fields changed- added
Input schema / properties / idempotencyKey / descriptionAdded value: +"Caller-supplied stable key for repeatable export identity." - added
Input schema / properties / redactionProfile / descriptionAdded value: +"Named policy for omitting private trace content from export." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / traceEvents / descriptionAdded value: +"Ordered caller-supplied events to serialize after redaction." - changed
Output 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" +}
- Changed
extract_interactions6 fields changed- added
Input schema / properties / complexPdbBase64 / descriptionAdded value: +"Base64-encoded protein-ligand complex PDB bytes from a representative pose." - added
Input schema / properties / dockingRunId / descriptionAdded value: +"Identifier of the docking run whose poses or complex are analyzed." - added
Input schema / properties / method / descriptionAdded value: +"Algorithm or provider method selected for this operation; inspect allowed schema values." - added
Input schema / properties / representativePoseIds / descriptionAdded value: +"Pose IDs whose complex should be examined for contacts." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
fetch_compound5 fields changed- added
Input schema / properties / compoundRef / descriptionAdded value: +"Provider compound reference or exact fixture key; PubChem uses its CID." - added
Input schema / properties / fallbackPolicy / descriptionAdded value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / source / descriptionAdded value: +"Selected remote provider or exact fixture source." - changed
Output 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" +}
- Changed
fetch_structure6 fields changed- added
Input schema / properties / accession / descriptionAdded value: +"Provider accession, such as an RCSB PDB ID or AlphaFold accession, matching source." - added
Input schema / properties / fallbackPolicy / descriptionAdded value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / source / descriptionAdded value: +"Selected remote provider or exact fixture source." - added
Input schema / properties / targetId / descriptionAdded value: +"Caller-chosen identifier for the target protein or structure." - changed
Output 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" +}
- Changed
generate_candidate_peptides6 fields changed- added
Input schema / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / peptideLengths / descriptionAdded value: +"Peptide window lengths in amino-acid residues for the selected MHC class." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / sequence / descriptionAdded value: +"Protein amino-acid sequence without a FASTA header." - added
Input schema / properties / sequenceHash / descriptionAdded value: +"Optional SHA-256 identity of the supplied protein sequence." - changed
Output 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" +}
- Changed
generate_report7 fields changed- added
Input schema / properties / idempotencyKey / descriptionAdded value: +"Caller-supplied stable key for repeatable export identity." - added
Input schema / properties / outputFormats / descriptionAdded value: +"File formats to render from the supplied report snapshot." - added
Input schema / properties / reportSnapshot / descriptionAdded value: +"Caller-supplied approved report data to render; no evidence retrieval occurs." - added
Input schema / properties / reportSnapshot / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / templateVersion / descriptionAdded value: +"Version of the report layout used to render artifacts." - changed
Output 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" +}
- Changed
map_epitopes_to_structure7 fields changed- added
Input schema / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / mappingMode / descriptionAdded value: +"DIRECT_COORDINATE uses supplied PDB and reference sequence; FIXTURE replays an exact case." - added
Input schema / properties / referenceSequence / descriptionAdded value: +"Protein sequence whose positions are aligned to PDB residues." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / structureId / descriptionAdded value: +"Stable identifier of the supplied or retrieved structure." - added
Input schema / properties / structurePdbBase64 / descriptionAdded value: +"Base64-encoded protein PDB coordinate bytes for direct computation." - changed
Output 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" +}
- Changed
normalize_scores4 fields changed- added
Input schema / properties / observations / descriptionAdded value: +"Caller-supplied evidence observations; this tool does not fetch them." - added
Input schema / properties / registryVersion / descriptionAdded value: +"Version of the score normalization profile registry." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
optimize_construct_genetic14 fields changed- added
Input schema / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / candidates / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / candidates / items / properties / category / descriptionAdded value: +"Final candidate decision category being explained." - added
Input schema / properties / candidates / items / properties / finalScore / descriptionAdded value: +"Already computed final candidate score in the unit interval." - added
Input schema / properties / finalRankingSnapshotHash / descriptionAdded value: +"SHA-256 identity of the final ranking snapshot supplying these candidates." - added
Input schema / properties / linker / descriptionAdded value: +"Peptide linker sequence used when assembling construct proposals." - added
Input schema / properties / maximumConstructSize / descriptionAdded value: +"Upper limit on construct size for genetic-style search." - added
Input schema / properties / maximumGenerations / descriptionAdded value: +"Maximum optimization generations before returning a proposal." - added
Input schema / properties / populationIds / descriptionAdded value: +"Population identifiers requested from the coverage source or synthetic dataset." - added
Input schema / properties / populationSize / descriptionAdded value: +"Number of candidate construct genomes per optimization generation." - added
Input schema / properties / populationWeights / descriptionAdded value: +"Caller-supplied weights for combining named population coverage values." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / targetCoverage / descriptionAdded value: +"Desired population coverage fraction used by optimization." - changed
Output 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" +}
- Changed
optimize_shortlist_coverage14 fields changed- added
Input schema / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / candidates / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / candidates / items / properties / category / descriptionAdded value: +"Final candidate decision category being explained." - added
Input schema / properties / candidates / items / properties / finalScore / descriptionAdded value: +"Already computed final candidate score in the unit interval." - added
Input schema / properties / eligibleCandidateIds / descriptionAdded value: +"IDs of finally eligible candidates considered for the shortlist." - added
Input schema / properties / finalRankingSnapshotHash / descriptionAdded value: +"SHA-256 identity of the final ranking snapshot supplying these candidates." - added
Input schema / properties / linker / descriptionAdded value: +"Peptide linker sequence used when assembling construct proposals." - added
Input schema / properties / maximumShortlistSize / descriptionAdded value: +"Upper limit on candidates selected for the shortlist." - added
Input schema / properties / method / descriptionAdded value: +"Algorithm or provider method selected for this operation; inspect allowed schema values." - added
Input schema / properties / populationIds / descriptionAdded value: +"Population identifiers requested from the coverage source or synthetic dataset." - added
Input schema / properties / populationWeights / descriptionAdded value: +"Caller-supplied weights for combining named population coverage values." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / targetCoverage / descriptionAdded value: +"Desired population coverage fraction used by optimization." - changed
Output 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" +}
- Changed
predict_bcell7 fields changed- added
Input schema / properties / fallbackPolicy / descriptionAdded value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls." - added
Input schema / properties / methods / descriptionAdded value: +"Named predictor methods to run or replay; availability depends on configuration." - added
Input schema / properties / parameters / descriptionAdded value: +"Method-specific predictor settings; allowed keys depend on selected methods." - added
Input schema / properties / proteinRef / descriptionAdded value: +"Stable protein reference or exact fixture key for this prediction." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / sequence / descriptionAdded value: +"Protein amino-acid sequence without a FASTA header." - changed
Output 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" +}
- Changed
predict_mhci8 fields changed- added
Input schema / properties / alleles / descriptionAdded value: +"HLA allele identifiers relevant to the selected MHC class." - added
Input schema / properties / fallbackPolicy / descriptionAdded value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls." - added
Input schema / properties / methods / descriptionAdded value: +"Named predictor methods to run or replay; availability depends on configuration." - added
Input schema / properties / peptideLengths / descriptionAdded value: +"Peptide window lengths in amino-acid residues for the selected MHC class." - added
Input schema / properties / proteinRef / descriptionAdded value: +"Stable protein reference or exact fixture key for this prediction." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / sequence / descriptionAdded value: +"Protein amino-acid sequence without a FASTA header." - changed
Output 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" +}
- Changed
predict_mhcii8 fields changed- added
Input schema / properties / alleles / descriptionAdded value: +"HLA allele identifiers relevant to the selected MHC class." - added
Input schema / properties / fallbackPolicy / descriptionAdded value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls." - added
Input schema / properties / methods / descriptionAdded value: +"Named predictor methods to run or replay; availability depends on configuration." - added
Input schema / properties / peptideLengths / descriptionAdded value: +"Peptide window lengths in amino-acid residues for the selected MHC class." - added
Input schema / properties / proteinRef / descriptionAdded value: +"Stable protein reference or exact fixture key for this prediction." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / sequence / descriptionAdded value: +"Protein amino-acid sequence without a FASTA header." - changed
Output 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" +}
- Changed
predict_synthetic_binding10 fields changed- added
Input schema / properties / alleles / descriptionAdded value: +"HLA allele identifiers relevant to the selected MHC class." - added
Input schema / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / candidates / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / datasetVersion / descriptionAdded value: +"Version label for the synthetic demonstration dataset." - added
Input schema / properties / method / descriptionAdded value: +"Algorithm or provider method selected for this operation; inspect allowed schema values." - added
Input schema / properties / methodVersion / descriptionAdded value: +"Version of the selected calculation method." - added
Input schema / properties / proteinHash / descriptionAdded value: +"SHA-256 identity of the protein sequence associated with these candidates." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
prepare_ligand5 fields changed- added
Input schema / properties / compoundId / descriptionAdded value: +"Stable identifier for the supplied compound within this run." - added
Input schema / properties / preparationMethod / descriptionAdded value: +"Preparation backend, such as configured Meeko or exact fixture mode." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / smiles / descriptionAdded value: +"Chemical structure encoded as a SMILES string." - changed
Output 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" +}
- Changed
prepare_receptor6 fields changed- added
Input schema / properties / chainIds / descriptionAdded value: +"Protein chain identifiers selected from the supplied structure." - added
Input schema / properties / preparationMethod / descriptionAdded value: +"Preparation backend, such as configured Meeko or exact fixture mode." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / structureId / descriptionAdded value: +"Stable identifier of the supplied or retrieved structure." - added
Input schema / properties / structurePdbBase64 / descriptionAdded value: +"Base64-encoded protein PDB coordinate bytes for direct computation." - changed
Output 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" +}
- Changed
rank_candidates9 fields changed- added
Input schema / properties / baseConstraintsComplete / descriptionAdded value: +"Whether all required base constraint results are present." - added
Input schema / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - changed
Input schema / properties / candidates / items / oneOfPrevious 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" + } +] - added
Input schema / properties / finalConstraintsComplete / descriptionAdded value: +"Whether required final constraint results are present for final ranking." - added
Input schema / properties / phase / descriptionAdded value: +"PRELIMINARY scores incomplete work; FINAL requires completed base and final constraints." - added
Input schema / properties / rankingProfileVersion / descriptionAdded value: +"Versioned weighting profile applied to candidate scoring." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / thresholds / descriptionAdded value: +"Named score or decision cutoffs supplied by the caller." - changed
Output 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" +}
- Changed
remove_duplicate_candidates5 fields changed- added
Input schema / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / candidates / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / proteinHash / descriptionAdded value: +"SHA-256 identity of the protein sequence associated with these candidates." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
run_agentic_workflow7 fields changed- added
Input schema / properties / agentMode / descriptionAdded value: +"Choose deterministic policy execution or an enabled LLM-assisted mode." - added
Input schema / properties / approvedToolNames / descriptionAdded value: +"Exact tool names the caller permits this workflow to invoke." - added
Input schema / properties / objective / descriptionAdded value: +"Research objective supplied by the caller to label the bounded workflow." - added
Input schema / properties / requireHumanApproval / descriptionAdded value: +"Pause at gated workflow stages until the caller supplies approval." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / toolCalls / descriptionAdded value: +"Typed, caller-selected tool invocations to execute in stage order." - changed
Output 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" +}
- Changed
run_docking16 fields changed- added
Input schema / properties / box / descriptionAdded value: +"Docking search-box center and size in receptor-coordinate angstroms." - added
Input schema / properties / box / properties / center / descriptionAdded value: +"Docking-box center coordinates x, y, and z in angstroms." - added
Input schema / properties / box / properties / size / descriptionAdded value: +"Docking-box edge lengths x, y, and z in angstroms." - added
Input schema / properties / cpu / descriptionAdded value: +"Number of CPU workers to request for the Vina run." - added
Input schema / properties / dockingBoxId / descriptionAdded value: +"Caller-chosen identifier for the validated docking search box." - added
Input schema / properties / exhaustiveness / descriptionAdded value: +"Vina search-effort parameter; larger values may take longer." - added
Input schema / properties / fallbackPolicy / descriptionAdded value: +"Allowed source order; LIVE_ONLY forbids cache and fixture substitution, FIXTURE_ONLY forbids live calls." - added
Input schema / properties / ligandId / descriptionAdded value: +"Caller-chosen ligand identifier for this docking run." - added
Input schema / properties / ligandPdbqtBase64 / descriptionAdded value: +"Base64-encoded prepared ligand PDBQT bytes for Vina." - added
Input schema / properties / mode / descriptionAdded value: +"Execution or visualization mode; inspect enum choices and required inputs for each." - added
Input schema / properties / numModes / descriptionAdded value: +"Maximum Vina ligand poses to return." - added
Input schema / properties / receptorId / descriptionAdded value: +"Caller-chosen receptor identifier for this docking run." - added
Input schema / properties / receptorPdbqtBase64 / descriptionAdded value: +"Base64-encoded prepared receptor PDBQT bytes for Vina." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / seed / descriptionAdded value: +"Random seed for reproducible Vina search when supplied." - changed
Output 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" +}
- Changed
validate_compound5 fields changed- added
Input schema / properties / compoundId / descriptionAdded value: +"Stable identifier for the supplied compound within this run." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / smiles / descriptionAdded value: +"Chemical structure encoded as a SMILES string." - added
Input schema / properties / sourceStatus / descriptionAdded value: +"Provenance label for the supplied structure or compound." - changed
Output 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" +}
- Changed
validate_docking_box5 fields changed- added
Input schema / properties / center / descriptionAdded value: +"Docking-box center coordinates x, y, and z in angstroms." - added
Input schema / properties / dockingBoxId / descriptionAdded value: +"Caller-chosen identifier for the validated docking search box." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / size / descriptionAdded value: +"Docking-box edge lengths x, y, and z in angstroms." - changed
Output 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" +}
- Changed
validate_sequence3 fields changed- added
Input schema / properties / fasta / descriptionAdded value: +"One protein FASTA record with header and amino-acid sequence." - added
Input schema / properties / profileVersion / descriptionAdded value: +"Version of the sequence validation profile; mvp-v1.0 is the current profile." - changed
Output 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" +}
- Changed
validate_structure8 fields changed- added
Input schema / properties / chainIds / descriptionAdded value: +"Protein chain identifiers selected from the supplied structure." - added
Input schema / properties / format / descriptionAdded value: +"Requested structure or export format, as enumerated by this tool." - added
Input schema / properties / residueCount / descriptionAdded value: +"Expected protein residue count for metadata consistency checks." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / sourceStatus / descriptionAdded value: +"Provenance label for the supplied structure or compound." - added
Input schema / properties / structureId / descriptionAdded value: +"Stable identifier of the supplied or retrieved structure." - added
Input schema / properties / structurePdbBase64 / descriptionAdded value: +"Base64-encoded protein PDB coordinate bytes for direct computation." - changed
Output 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" +}
- Changed
validate_thresholds5 fields changed- added
Input schema / properties / candidates / descriptionAdded value: +"Caller-supplied candidate records; required nested fields depend on this operation." - added
Input schema / properties / candidates / items / properties / candidateType / descriptionAdded value: +"MHC class or candidate category this operation applies to." - added
Input schema / properties / ruleProfileVersion / descriptionAdded value: +"Version of the biological constraint rule profile." - added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - changed
Output 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" +}
- Changed
visualize_results4 fields changed- added
Input schema / properties / runId / descriptionAdded value: +"Caller-chosen identifier linking this call to one research run." - added
Input schema / properties / visualizationSnapshot / descriptionAdded value: +"Caller-supplied data for building a view model; no image is rendered." - added
Input schema / properties / visualizationType / descriptionAdded value: +"Named chart or graph view-model type to construct." - changed
Output 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" +}
46 tool updates
v0.2.0- First observed
apply_constraint_rules - First observed
calculate_molecular_descriptors - First observed
calculate_population_coverage - First observed
calculate_structure_confidence - First observed
calculate_surface_accessibility - First observed
calculate_synthetic_population_coverage - First observed
calibrate_confidence - First observed
categorize_candidates - First observed
chat_with_research_agent - First observed
cluster_docking_poses - First observed
compute_consensus - First observed
compute_consensus_batch - First observed
create_molstar_view - First observed
deduplicate_compounds - First observed
describe_agentic_workflow - First observed
detect_binding_pockets - First observed
detect_overlapping_epitopes - First observed
explain_candidate - First observed
export_candidates - First observed
export_research_package - First observed
export_workflow_trace - First observed
extract_interactions - First observed
fetch_compound - First observed
fetch_structure - First observed
generate_candidate_peptides - First observed
generate_report - First observed
map_epitopes_to_structure - First observed
normalize_scores - First observed
optimize_construct_genetic - First observed
optimize_shortlist_coverage - First observed
predict_bcell - First observed
predict_mhci - First observed
predict_mhcii - First observed
predict_synthetic_binding - First observed
prepare_ligand - First observed
prepare_receptor - First observed
rank_candidates - First observed
remove_duplicate_candidates - First observed
run_agentic_workflow - First observed
run_docking - First observed
validate_compound - First observed
validate_docking_box - First observed
validate_sequence - First observed
validate_structure - First observed
validate_thresholds - First observed
visualize_results
TDQS
Scored across 46 tools
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.
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.
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.
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
Related MCP Connectors
Create, browse, remix, collaborate on, and run durable AI workflow nodes from MCP hosts.
Workflow diagnostics, capability routing, and x402 settlement for MCP-compatible agents.
Governed MCP: agent audit, provenance, deterministic checks, and receipt-backed FragGate execution.
Auditable MCP server for PubMed, Europe PMC, ClinicalTrials.gov, and bioRxiv/medRxiv queries
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP-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
- AlicenseAqualityAmaintenanceEnables AI assistants to run reproducible bioinformatics pipelines over MCP, with verifiable provenance via checksums and Workflow Run RO-Crate metadata.62MIT
- AlicenseAqualityAmaintenanceProvides 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.17Apache 2.0
- AlicenseBqualityBmaintenanceEnables biomedical research workflows via MCP, including experiment and document search, PDF text extraction, evidence retrieval, and validation with provenance tracking.10MIT