Skip to main content
Glama
Ajey95

ImmunoGraph MCP

optimize_shortlist_coverage

Read-onlyIdempotent

Selects a deterministic T-cell shortlist from eligible ranked candidates using supplied population coverage and construct constraints, supporting shortlist-size and coverage decisions after final ranking.

Instructions

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

Input Schema

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

Output Schema

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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changedv0.2.1
    • addedInput schema / properties / candidates / description
      Added value: +"Caller-supplied candidate records; required nested fields depend on this operation."
    • addedInput schema / properties / candidates / items / properties / candidateType / description
      Added value: +"MHC class or candidate category this operation applies to."
    • addedInput schema / properties / candidates / items / properties / category / description
      Added value: +"Final candidate decision category being explained."
    • addedInput schema / properties / candidates / items / properties / finalScore / description
      Added value: +"Already computed final candidate score in the unit interval."
    • addedInput schema / properties / eligibleCandidateIds / description
      Added value: +"IDs of finally eligible candidates considered for the shortlist."
    • addedInput schema / properties / finalRankingSnapshotHash / description
      Added value: +"SHA-256 identity of the final ranking snapshot supplying these candidates."
    • addedInput schema / properties / linker / description
      Added value: +"Peptide linker sequence used when assembling construct proposals."
    • addedInput schema / properties / maximumShortlistSize / description
      Added value: +"Upper limit on candidates selected for the shortlist."
    • addedInput schema / properties / method / description
      Added value: +"Algorithm or provider method selected for this operation; inspect allowed schema values."
    • addedInput schema / properties / populationIds / description
      Added value: +"Population identifiers requested from the coverage source or synthetic dataset."
    • addedInput schema / properties / populationWeights / description
      Added value: +"Caller-supplied weights for combining named population coverage values."
    • addedInput schema / properties / runId / description
      Added value: +"Caller-chosen identifier linking this call to one research run."
    • addedInput schema / properties / targetCoverage / description
      Added value: +"Desired population coverage fraction used by optimization."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "data": {
      +      "additionalProperties": {},
      +      "description": "Tool-specific result fields on success.",
      +      "properties": {},
      +      "type": "object"
      +    },
      +    "error": {
      +      "additionalProperties": false,
      +      "description": "Structured failure on unsuccessful execution.",
      +      "properties": {
      +        "category": {
      +          "type": "string"
      +        },
      +        "code": {
      +          "type": "string"
      +        },
      +        "details": {
      +          "additionalProperties": {},
      +          "properties": {},
      +          "type": "object"
      +        },
      +        "message": {
      +          "type": "string"
      +        },
      +        "retryable": {
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "code",
      +        "category",
      +        "message",
      +        "retryable"
      +      ],
      +      "type": "object"
      +    },
      +    "meta": {
      +      "additionalProperties": {},
      +      "description": "Run identifiers, timings, and input/output hashes.",
      +      "properties": {
      +        "completedAt": {
      +          "type": "string"
      +        },
      +        "durationMs": {
      +          "type": "number"
      +        },
      +        "inputHash": {
      +          "type": "string"
      +        },
      +        "outputHash": {
      +          "type": "string"
      +        },
      +        "requestId": {
      +          "type": "string"
      +        },
      +        "runId": {
      +          "type": "string"
      +        },
      +        "startedAt": {
      +          "type": "string"
      +        },
      +        "toolName": {
      +          "type": "string"
      +        },
      +        "toolVersion": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "requestId",
      +        "runId",
      +        "toolName",
      +        "toolVersion",
      +        "startedAt",
      +        "inputHash"
      +      ],
      +      "type": "object"
      +    },
      +    "ok": {
      +      "description": "Whether execution completed successfully.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "ok",
      +    "meta"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.2.0

TDQS

A4.3/5.0
Behavior4/5

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

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

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

Conciseness4/5

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

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

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

Completeness4/5

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

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

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

Parameters3/5

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

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

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

Purpose5/5

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

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

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

Usage Guidelines5/5

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

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

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