Skip to main content
Glama

find_markers

DestructiveIdempotent

Find differentially expressed genes between groups.

Instructions

Find differentially expressed genes between groups.

Args:
    data_id: Dataset ID
    params: Required - group_key and optional method, group1/group2, n_top_genes, etc.

Input Schema

NameRequiredDescriptionDefault
paramsYes
data_idYes

Output Schema

NameRequiredDescriptionDefault
data_idYes
n_genesYes
warningsNoNon-fatal conditions that may affect result interpretation.
comparisonYes
n_genes_excludedNoGenes removed before testing by each excluded gene class or pattern.
top_genes_by_groupNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv1.6.0
    • addedInput schema / $defs / DifferentialExpressionParameters / properties / exclude_gene_classes
      Added value: +{
      +  "description": "Gene classes removed before testing, so they are never reported as markers: immunoglobulin (IGH/IGK/IGL V, D, J and constant genes, JCHAIN, IGLL1, IGLL5), ribosomal (RPL*/RPS* except RPS6K* and RPS19BP1), mitochondrial (MT-*), hla (HLA-*, mouse H2-*). Same rules as analyze_cnv; case-insensitive.",
      +  "items": {
      +    "enum": [
      +      "immunoglobulin",
      +      "ribosomal",
      +      "mitochondrial",
      +      "hla"
      +    ],
      +    "type": "string"
      +  },
      +  "title": "Exclude Gene Classes",
      +  "type": "array"
      +}
    • addedInput schema / $defs / DifferentialExpressionParameters / properties / exclude_gene_patterns
      Added value: +{
      +  "description": "Gene-name wildcard patterns removed before testing (case-sensitive, e.g. ['IGH*', 'MALAT1']).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "title": "Exclude Gene Patterns",
      +  "type": "array"
      +}
    • addedOutput schema / properties / n_genes_excluded
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "type": "integer"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Genes removed before testing by each excluded gene class or pattern.",
      +  "title": "N Genes Excluded"
      +}
  2. Changed3 schema fields changedv1.5.3
    • changedOutput schema / description
      Previous value: -"Result of differential expression analysis\n\nNote on serialization:\n    For consistency with other result models, the statistics dict is excluded\n    from JSON serialization. Key summary info is in explicit fields.\n\n    Fields included in MCP response:\n    - data_id, comparison (basic info)\n    - n_genes (count)\n    - top_genes (top differentially expressed genes)\n\n    Fields excluded from MCP response:\n    - statistics (detailed DE metrics per group)"New value: +"Result of differential expression analysis\n\nNote on serialization:\n    For consistency with other result models, the statistics dict is excluded\n    from JSON serialization. Key summary info is in explicit fields.\n\n    Fields included in MCP response:\n    - data_id, comparison (basic info)\n    - n_genes (count of distinct genes returned)\n    - top_genes_by_group (top genes keyed by the group they mark)\n\n    Fields excluded from MCP response:\n    - statistics (detailed DE metrics per group)\n\n    Markers are keyed by group because a flat list cannot say which group a\n    gene marks. One-vs-rest runs compare every group at once, so a flat list\n    would silently collapse to whichever group happened to come first."
    • removedOutput schema / properties / top_genes
      Removed value: -{
      -  "items": {
      -    "type": "string"
      -  },
      -  "title": "Top Genes",
      -  "type": "array"
      -}
    • addedOutput schema / properties / top_genes_by_group
      Added value: +{
      +  "additionalProperties": {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "title": "Top Genes By Group",
      +  "type": "object"
      +}
  3. Changed5 schema fields changedv1.3.2
    • addedInput schema / $defs / DifferentialExpressionParameters / additionalProperties
      Added value: +false
    • addedInput schema / additionalProperties
      Added value: +false
    • addedOutput schema / additionalProperties
      Added value: +false
    • removedOutput schema / properties / statistics
      Removed value: -{
      -  "additionalProperties": true,
      -  "title": "Statistics",
      -  "type": "object"
      -}
    • addedOutput schema / properties / warnings
      Added value: +{
      +  "description": "Non-fatal conditions that may affect result interpretation.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "title": "Warnings",
      +  "type": "array"
      +}
  4. First observedv1.2.7

TDQS

C2.6/5.0
Behavior2/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, implying this operation can modify data, but the description says only 'Find' and gives no warning about what is written or overwritten. It does not add behavioral context beyond the annotations and leaves the side-effect profile undisclosed.

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

Conciseness3/5

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

The description is short and front-loads the purpose, but the Args block is an incomplete duplicate of schema information and ends with a vague 'etc.' rather than useful detail.

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

Completeness2/5

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

For a differential expression tool with a destructive annotation, many optional parameters, and an output schema, the description is missing critical context: what happens to the dataset, how groups are handled, and how to choose methods or parameters. It is not complete enough to support correct invocation beyond the schema.

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

Parameters2/5

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

The description names data_id, group_key, method, group1/group2, and n_top_genes, but then falls back to 'etc.' and omits sample_key, min_cells, pseudocount, and exclusion parameters. With schema_description_coverage reported as 0%, the description does not compensate by explaining parameter meanings or interactions.

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

Purpose4/5

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

The first sentence states a specific verb and resource: find differentially expressed genes between groups. It is clear what the tool does, but it does not distinguish itself from nearby siblings such as compare_conditions or find_spatial_genes.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The Args section only restates required inputs rather than explaining the selection context.

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