Skip to main content
Glama

ChatSpatial

MCP-Server für die räumliche Transkriptomik-Analyse mittels natürlicher Sprache

Paper MLGenX @ ICLR 2026 ENAR 2026 IBC 2026 CI PyPI Python 3.11-3.13 License: MIT Docs

ChatSpatial ersetzt die Ad-hoc-LLM-Codegenerierung durch eine schema-erzwungene Orchestrierung. Anstatt beliebige Skripte zu generieren, wählt das LLM Tools und Parameter aus einem kuratierten Register aus, wodurch räumliche Transkriptomik-Workflows über Sitzungen und Clients hinweg reproduzierbarer werden.

Es stellt über 60 Methoden der räumlichen Transkriptomik als MCP-Tools bereit, sodass jeder MCP-kompatible Client Daten mittels natürlicher Sprache analysieren kann.


Hier starten

  1. ChatSpatial installierenInstallationsanleitung

  2. MCP-Client konfigurierenKonfigurationsanleitung

  3. Erste Analyse ausführenSchnellstart

Minimales Beispiel-Prompt:

Load /absolute/path/to/spatial_data.h5ad and show me the tissue structure

ChatSpatial funktioniert mit jedem MCP-kompatiblen Client — Claude Code, Claude Desktop, Codex, OpenCode und anderen MCP-fähigen Tools.


Related MCP server: Liana-MCP

Funktionen

Über 60 Methoden in 11 Kategorien. Unterstützt 10x Visium, Xenium, Slide-seq v2, MERFISH, seqFISH.

Kategorie

Methoden

Räumliche Domänen

SpaGCN, STAGATE, GraphST, BANKSY, Leiden, Louvain

Dekonvolution

FlashDeconv, Cell2location, RCTD, DestVI, Stereoscope, SPOTlight, Tangram, CARD

Zellkommunikation

LIANA+, CellPhoneDB, CellChat (cellchat_r), FastCCC

Zelltyp-Annotation

Tangram, scANVI, CellAssign, mLLMCelltype, scType, SingleR

Differentielle Expression

Wilcoxon, t-test, Logistische Regression, pyDESeq2

Trajektorie & Geschwindigkeit

CellRank, Palantir, DPT, scVelo, VeloVI

Räumliche Statistik

Moran's I, Local Moran, Geary's C, Getis-Ord Gi*, Ripley's K, Co-occurrence, Neighborhood Enrichment, Centrality Scores, Local Join Count, Network Properties

Anreicherung

GSEA, ORA, Enrichr, ssGSEA, Spatial EnrichMap

Räumliche Gene

SpatialDE, SPARK-X, FlashS

Integration

Harmony, BBKNN, Scanorama, scVI

Sonstiges

CNV-Analyse (InferCNVPy, Numbat), Räumliche Registrierung (PASTE, STalign)


Dokumentation

Anleitung

Inhalt

Installation

Einrichten der Umgebung, Paketinstallation, Plattformhinweise

Schnellstart

Erste erfolgreiche Analyse nach der Einrichtung

Konzepte

Methodenauswahl und Analyse-Logik

Beispiele

Prompt-Rezepte und Workflow-Beispiele

Konfiguration

Exakte Syntax für die MCP-Client-Konfiguration

Fehlerbehebung

Symptom → Lösungshilfe

Methodenreferenz

Kanonische Tool-Parameter und Standardwerte

Vollständige Dokumentation

Komplette Dokumentationsseite


Zitieren

Wenn Sie ChatSpatial in Ihrer Forschung verwenden, zitieren Sie bitte:

@article{Yang2026.02.26.708361,
  author = {Yang, Chen and Zhang, Xianyang and Chen, Jun},
  title = {ChatSpatial: Schema-Enforced Agentic Orchestration for Reproducible and Cross-Platform Spatial Transcriptomics},
  elocation-id = {2026.02.26.708361},
  year = {2026},
  doi = {10.64898/2026.02.26.708361},
  publisher = {Cold Spring Harbor Laboratory},
  URL = {https://www.biorxiv.org/content/early/2026/03/01/2026.02.26.708361},
  journal = {bioRxiv}
}

ChatSpatial orchestriert viele exzellente Methoden von Drittanbietern. Bitte zitieren Sie auch die Original-Tools, die in Ihrer Analyse verwendet wurden.


Mitwirken

Verbesserungen der Dokumentation, Fehlerberichte und neue Analysemethoden sind willkommen. Siehe CONTRIBUTING.md.

MIT-Lizenz · GitHub · Issues

Available Tools

20 tools
analyze_cell_communicationC
DestructiveIdempotent

Analyze cell-cell communication and ligand-receptor interaction patterns.

Args:
    data_id: Dataset ID
    params: Required - species, cell_type_key, and method. For mouse with liana, set liana_resource='mouseconsensus'.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYes
data_idYes
speciesYes
databaseYes
warningsNoNon-fatal conditions that may affect result interpretation.
n_lr_pairsYes
results_keyNo
top_lr_pairsNo
analysis_typeYes
n_autocrine_loopsNo
n_significant_pairsYes
top_autocrine_loopsNo

TDQS

C2.1/5.0
Behavior2/5

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

Annotations indicate destructiveHint and idempotentHint, but the description does not elaborate on potential side effects, whether the analysis modifies data, or any performance implications. No additional context is provided beyond 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.

Conciseness2/5

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

The description is extremely concise (one sentence) but lacks necessary structure or detail for a complex tool with many parameters. It is minimal without being helpful.

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

Completeness1/5

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

Given the tool's complexity (large parameter set, multiple methods), the description is woefully incomplete. It does not mention output types, method options, or any contextual information that would help an agent decide to use it.

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

Parameters1/5

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

The description does not explain any parameters. The schema contains many parameters with individual descriptions, but the tool description itself adds no param-level semantics. Since schema coverage in the description is 0% and the description fails to compensate, this scores low.

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

Purpose4/5

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

The description clearly states the tool analyzes cell-cell communication and ligand-receptor interactions, which distinguishes it from sibling tools like analyze_spatial_statistics or analyze_enrichment. However, it lacks specificity about the analytical methods or outputs.

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

Usage Guidelines1/5

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

The description provides no guidance on when to use this tool versus alternatives, no mention of prerequisites, or scenarios where it is appropriate. It only gives a generic purpose.

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

analyze_cnvA
DestructiveIdempotent

Analyze copy number variations (CNVs) in spatial transcriptomics data.

Args:
    data_id: Dataset identifier
    params: Required - reference_key, reference_categories, and optional method/thresholds.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYes
data_idYes
warningsNoNon-fatal conditions that may affect result interpretation.
cnv_score_keyNo
n_chromosomesYes
reference_keyYes
n_genes_analyzedYes
reference_categoriesYes
visualization_availableNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, readOnlyHint=false, and idempotentHint=true, covering the safety profile. The description does not contradict these, but it also adds no behavioral context beyond 'analyze', such as what data may be modified or whether results are persisted. Thus a baseline score with annotations is appropriate.

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?

The description is brief and front-loaded, stating the purpose in the first sentence and then summarizing key arguments. It contains no superfluous filler, though the Args block is slightly redundant with the schema's property names.

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

Completeness3/5

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

Given the complexity of the nested params object and the destructive annotation, the description is sparse but not entirely inadequate: the schema and annotations fill in many details, and an output schema exists. Still, it lacks high-level context about prerequisites, method implications, and side effects, so it is only minimally complete.

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?

The description highlights that params must include reference_key and reference_categories and mentions optional method/thresholds, which is helpful because the top-level schema provides no descriptions for data_id and params. However, it remains vague about specific thresholds and does not fully compensate for the low schema coverage; the nested schema carries most parameter detail.

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

Purpose5/5

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

The description clearly states it analyzes copy number variations (CNVs) in spatial transcriptomics data, using a specific verb and resource. This distinguishes it from sibling tools like analyze_velocity_data or analyze_trajectory_data, which target different biological analyses.

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

Usage Guidelines3/5

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

The description implies usage by naming 'spatial transcriptomics data' and specifying CNV analysis, but it provides no explicit guidance on when to use this over alternatives or when not to use it. There are no exclusions or alternative tool mentions.

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

analyze_enrichmentC
DestructiveIdempotent

Perform gene set enrichment analysis.

Args:
    data_id: Dataset ID
    params: Required - species must be specified. See EnrichmentParameters for methods and gene_set_database options.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYes
warningsNoNon-fatal conditions that may affect result interpretation.
n_gene_setsYes
n_significantNo
top_gene_setsYes
top_depleted_setsYes
spatial_scores_keyNo
n_successful_signaturesNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations include destructiveHint=true and idempotentHint=true, but the description provides no additional behavioral context. It does not mention potential side effects, modifications to the dataset, or any safety considerations. While it doesn't contradict annotations, it adds no value beyond what the annotations already convey, leaving the agent uninformed about the tool's actual behavior on data.

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

Conciseness5/5

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

The description is extremely concise: a single sentence and two argument placeholders. It avoids redundancy and gets straight to the point. Every word earns its place, though it may be too sparse for a complex tool. However, for conciseness, it is exemplary—no fluff, no filler.

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?

Despite having an output schema, the description is minimal and does not explain the overall context of use. It fails to mention the type of data expected, the output interpretation, or any preconditions (e.g., data must be loaded and preprocessed). It also does not relate to the analysis pipeline or when to apply this analysis. For a tool with many configurable parameters and complex behavior, this is incomplete and leaves the agent without sufficient guidance.

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?

The schema provides detailed descriptions for most parameters (e.g., method, species, max_genes), and the description adds only a note that species must be specified and points to EnrichmentParameters for details. Given high schema coverage, the description adds marginal value. However, it does highlight the required nature of species, which is helpful, but does not explain semantics beyond that. Baseline of 3 is appropriate as the description slightly supplements the schema but does not compensate for deeper meaning.

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

Purpose4/5

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

The description states the tool 'Performs gene set enrichment analysis' which is a specific verb and resource. It clearly distinguishes from generic analysis tools but doesn't explicitly differentiate from sibling tools like analyze_spatial_statistics or deconvolve_data, though the enrichment focus is evident. It lacks a clear scope or mention of input/output context, but the core purpose is unambiguous.

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 only a minimal usage hint: 'Required - species must be specified.' It does not explain when to use this tool over alternatives, what scenarios it suits, or when not to use it. There is no reference to the relevant analysis workflow or comparison with sibling tools like find_markers or compute_embeddings. This guidance is insufficient for an agent to make an informed selection.

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

analyze_spatial_statisticsC
DestructiveIdempotent

Analyze spatial statistics and autocorrelation patterns.

Args:
    data_id: Dataset ID
    params: Analysis parameters (analysis_type, cluster_key, genes). See SpatialStatisticsParameters for all types.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
data_idYes
warningsNoNon-fatal conditions that may affect result interpretation.
results_keyNo
top_featuresNo
analysis_typeYes
n_significantNo
summary_metricsNo
n_features_analyzedNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations indicate destructiveHint=true, but the description adds no behavioral context, such as whether analysis results are written back to the dataset or if certain analyses require cluster_key and may fail otherwise. It doesn't explain side effects, performance implications, or what changes the tool makes beyond the generic verb 'analyze'.

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?

The description is concise and front-loaded with a clear purpose statement, followed by a compact Args list. No unnecessary words, but it could have been slightly more informative without becoming verbose.

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?

This is a highly complex tool with 13 analysis types, a nested params schema, and an output schema, yet the description offers no overview of the analysis categories, prerequisites (e.g., cluster_key for group-based analyses), or typical use cases. It relies entirely on the schema for details, which is insufficient for an agent to select and invoke it confidently.

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?

The Args section gives brief meanings for data_id and params, mentioning analysis_type, cluster_key, and genes. However, with schema description coverage at 0% for top-level parameters, the description only partially compensates by naming a few fields and pointing to the full schema. It doesn't explain the distinction between gene-based and group-based analyses or the many other parameters.

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

Purpose4/5

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

The description clearly states the tool analyzes 'spatial statistics and autocorrelation patterns', giving a specific verb and resource. However, it doesn't distinguish itself from sibling tools like find_spatial_genes or identify_spatial_domains, which could also involve spatial statistics.

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?

No guidance is provided on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or suggest other tools for different scenarios. The only pointer is to 'See SpatialStatisticsParameters for all types', which is parameter documentation, not usage direction.

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

analyze_trajectory_dataC
Destructive

Infer cellular trajectories and pseudotime ordering.

Args:
    data_id: Dataset ID
    params: Trajectory parameters (method, root_cell, spatial_weight, etc.)
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYes
data_idYes
warningsNoNon-fatal conditions that may affect result interpretation.
pseudotime_keyYes
spatial_weightYes
velocity_computedYes
pseudotime_computedYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already communicate readOnlyHint=false and destructiveHint=true, so the risk profile is known. The description adds no side-effect context, such as whether trajectory results overwrite existing data or require prior preprocessing, but 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.

Conciseness4/5

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

The description is short, front-loaded, and free of fluff. The args lines add minimal value because the schema already defines the parameters, but overall this is a compact, readable description.

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?

This is a complex trajectory-analysis tool with multiple methods, method-specific parameters, and a destructive hint, but the description only provides a one-line purpose. Important selection context—such as method-specific data requirements and expected inputs—is buried in the nested schema rather than presented in the description.

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 only lists 'method, root_cell, spatial_weight, etc.' in passing and does not provide meaningful parameter semantics. It also uses 'root_cell' while the schema defines the field as 'root_cells'. The actual parameter understanding relies on the rich nested schema descriptions, not the tool description.

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 sentence 'Infer cellular trajectories and pseudotime ordering' names a specific analysis task with a clear action and object. It is distinct from most sibling tools, though it does not explicitly contrast with related tools like analyze_velocity_data.

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?

No when-to-use guidance is provided: there are no hints about velocity prerequisites, when to choose palantir/dpt over cellrank, or when another analysis tool would be more appropriate. Some guidance exists only in the nested schema description, not in the tool description.

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

analyze_velocity_dataB
Destructive

Analyze RNA velocity to understand cellular dynamics. Requires 'spliced' and 'unspliced' layers.

Args:
    data_id: Dataset ID
    params: Velocity parameters (method, scvelo_mode, etc.)
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
data_idYes
warningsNoNon-fatal conditions that may affect result interpretation.
velocity_computedYes
velocity_graph_keyNo

TDQS

B3.4/5.0
Behavior2/5

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

The annotations already include destructiveHint=true and readOnlyHint=false, but the description adds no additional behavioral context such as what data might be modified, whether results are stored, or any side effects. The only extra information is the data prerequisite (spliced/unspliced layers), which is more about applicability than behavior. Thus, it contributes minimal value beyond 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.

Conciseness4/5

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

The description is concise and front-loaded, stating the main purpose in the first sentence. It then lists the arguments in a simple format. It avoids unnecessary fluff but could be slightly more structured, e.g., by using a numbered list or table for the args. Overall, it earns a 4 for economy of words.

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?

Despite having an output schema and annotations, the description is incomplete for a tool with this complexity. It only names two parameters, while the params parameter contains a large nested object with a dozen fields. There is no guidance on how to choose between methods (scvelo vs velovi), what the output contains, or what happens if certain layers are missing. A more complete description would help an agent correctly configure and invoke the tool.

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?

Schema description coverage is 0%, so the description must compensate. It provides only terse definitions: 'data_id: Dataset ID' and 'params: Velocity parameters (method, scvelo_mode, etc.)'. While it gives examples of sub-parameters, it does not explain the many nested parameters or how they affect the analysis. The params object is a complex nested model with a dozen properties, and the description adds little meaning beyond what the schema already shows.

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 clearly states the tool's purpose: 'Analyze RNA velocity to understand cellular dynamics.' This includes a specific verb ('analyze'), a specific resource ('RNA velocity'), and biological context. It distinguishes itself from sibling tools like analyze_trajectory_data by focusing specifically on RNA velocity, and it mentions the technical prerequisite of needing 'spliced' and 'unspliced' layers.

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

Usage Guidelines4/5

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

The description gives a clear context for when the tool is applicable by specifying the requirement for 'spliced' and 'unspliced' layers, which is a key prerequisite. However, it does not mention alternative tools or explicitly state when not to use this tool, so it does not fully meet the 'explicit alternatives' criterion.

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

annotate_cell_typesB
Destructive

Annotate cell types in spatial transcriptomics data.

Args:
    data_id: Dataset ID
    params: Annotation parameters (method, reference_data_id, cell_type_key, etc.)

Note: Reference methods (tangram, scanvi) require reference_data_id to be preprocessed first.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
countsYes
methodYes
data_idYes
warningsNoNon-fatal conditions that may affect result interpretation.
cell_typesYes
output_keyYes
confidence_keyNo
confidence_scoresNo
tangram_mapping_scoreNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a write operation. The description adds the preprocessing prerequisite for reference methods, which is useful context, but doesn't describe what data gets modified (e.g., adding cell type labels) or other side effects.

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?

The description is appropriately short and front-loaded with the main action. The Args section is minimal and the note is useful. It would benefit from a bit more structure, but it's concise and readable.

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?

This is a complex tool with many methods and parameters, an output schema, and a destructive flag. The description only covers the basic purpose and one prerequisite. It doesn't explain method-specific requirements (cellassign needs marker_genes, singler uses celldex), parameter interactions, or the expected outcome. Given the complexity, this is insufficient for correct invocation.

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?

Schema description coverage is 0% per context, so the description must compensate. It only lists example parameter names (method, reference_data_id, cell_type_key) without explaining their meaning or constraints. The nested params schema has many fields, but the description barely scratches the surface, leaving the agent to infer semantics from field names.

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 clearly states the tool's action and resource: 'Annotate cell types in spatial transcriptomics data.' This is a specific verb+resource combination that distinguishes it from sibling tools like analyze_cnv 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 Guidelines3/5

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

The description provides a usage prerequisite: reference methods (tangram, scanvi) require reference_data_id to be preprocessed. However, it doesn't explicitly state when to use this tool versus alternatives or when not to use it, so guidance is only partial.

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

compare_conditionsA
DestructiveIdempotent

Compare experimental conditions using pseudobulk differential expression (DESeq2).

Args:
    data_id: Dataset ID
    params: Required - condition_key, condition1, condition2, sample_key, etc.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYes
data_idYes
warningsNoNon-fatal conditions that may affect result interpretation.
comparisonYes
condition1Yes
condition2Yes
sample_keyYes
statisticsYes
results_keyYes
cell_type_keyNo
condition_keyYes
cell_type_resultsNo
global_n_significantNo
n_samples_condition1Yes
n_samples_condition2Yes
global_top_upregulatedNo
global_top_downregulatedNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false and destructiveHint=true, so the safety profile is declared. The description adds context by specifying DESeq2 and pseudobulk aggregation, and the schema mentions 'Requires 2+ samples per condition.' However, it does not explain what destructive side effects may occur or what state changes are involved, leaving a transparency gap despite 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?

The description is short and front-loaded with the core purpose, followed by a concise Args block. The 'etc.' and redundant parameter list slightly reduce precision, but there is no filler or unnecessary elaboration.

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

Completeness4/5

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

Given the complexity of the tool, the rich input schema and output schema carry most of the burden. The nested schema includes thresholds, defaults, and usage differentiation. The top-level description is minimal but sufficient for basic selection; a bit more context about prerequisites or side effects would make it more complete.

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?

The description lists required parameter names (condition_key, condition1, condition2, sample_key) but adds no semantics beyond the names. The input schema provides rich descriptions for every parameter, so the description adds minimal value beyond what the schema already covers.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Compare experimental conditions using pseudobulk differential expression (DESeq2).' This provides a specific verb, resource, and method. It does not explicitly name sibling tools, but the scope ('conditions' vs 'cell types') distinguishes it from tools like find_markers.

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

Usage Guidelines4/5

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

The top-level description lacks usage guidance, but the input schema's nested ConditionComparisonParameters description explicitly contrasts compare_conditions with find_markers ('compares conditions ACROSS samples' vs 'cell types/clusters WITHIN a dataset'). This is useful but limited to one alternative and does not provide exclusions or other sibling comparisons.

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

compute_embeddingsB
Destructive

Compute dimensionality reduction (PCA, UMAP), clustering, and neighbor graphs.

Args:
    data_id: Dataset ID
    params: Embedding parameters (PCA, UMAP, clustering, etc.)
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
data_idYes
skippedYes
computedYes
warningsNoNon-fatal conditions that may affect result interpretation.
n_clustersNo
pca_variance_ratioNo

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, so there is no contradiction. However, the description adds no behavioral context beyond the annotation—it does not mention overwriting existing results, storing outputs in the dataset, or dependencies like UMAP requiring neighbors.

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

Conciseness5/5

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

Two concise sentences with the core operations front-loaded. No filler or redundant content.

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?

Given the complex nested params object and destructive behavior, the description is only a brief headline. It omits parameter dependencies, side effects, and usage context, leaving the agent under-informed for such a configurable tool.

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?

Top-level schema coverage is 0%, and the description only provides one-line glosses for data_id and params. The rich descriptions live inside the nested EmbeddingParameters schema, which the description does not surface or summarize effectively.

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 opens with 'Compute dimensionality reduction (PCA, UMAP), clustering, and neighbor graphs,' which uses a specific verb and names concrete resources. It clearly distinguishes this from sibling tools focused on trajectory or spatial analysis.

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?

There is no guidance on when to use this tool versus siblings like analyze_trajectory_data or preprocess_data. The description lists operations but does not mention prerequisites, typical use cases, or exclusions.

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

deconvolve_dataA
Destructive

Deconvolve spatial spots to estimate cell type proportions.

Args:
    data_id: Dataset ID
    params: Required - method, cell_type_key, reference_data_id. See DeconvolutionParameters for all methods and options.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYes
data_idYes
n_spotsNo
warningsNoNon-fatal conditions that may affect result interpretation.
cell_typesYes
genes_usedNo
n_cell_typesYes
proportions_keyYes
dominant_type_keyYes

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is externally known. However, the description adds no behavioral transparency beyond the basic operation—it does not mention overwriting previous results, requiring pre-loaded reference data, compute time, or other runtime effects.

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

Conciseness5/5

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

The description is compact and well-structured: one sentence of purpose, one sentence of parameter pointers. It is front-loaded with the core purpose and avoids unnecessary elaboration, making every sentence earn its place.

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

Completeness3/5

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

Given the tool's high complexity (8 deconvolution methods and many method-specific parameters), the description is minimal but not fatally incomplete because the schema and annotations carry substantial detail. Still, it lacks guidance on method selection, data prerequisites, or expected outcomes, leaving the agent to rely heavily on structured fields.

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?

The description compensates for the 0% schema coverage by explicitly naming the effectively required trio: method, cell_type_key, and reference_data_id. This goes beyond the schema, which only marks cell_type_key as required. However, it does not explain the meaning of each parameter or how to choose methods, deferring entirely to DeconvolutionParameters.

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 starts with the specific action verb 'Deconvolve' on 'spatial spots' and clearly states the outcome: 'estimate cell type proportions.' This uniquely distinguishes the tool from siblings like analyze_spatial_statistics or identify_spatial_domains, which have different analytical goals.

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

Usage Guidelines3/5

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

The description implies usage when cell type proportion estimates are needed, but it provides no explicit when-to-use/when-not-to-use guidance or alternatives among sibling tools. The only additional guidance is a list of required parameters, which is more about invocation than usage context.

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

export_dataA
DestructiveIdempotent

Export dataset to disk for external script access.

Args:
    data_id: Dataset ID to export
    path: Custom path (default: ~/.chatspatial/active/{data_id}.h5ad)

Returns:
    Absolute path where data was exported
ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the agent knows it's a non-read-only, possibly destructive, idempotent operation. The description adds value by specifying the default export path and the return value (absolute path). However, it does not elaborate on what 'destructive' means (e.g., overwriting existing files), which would enhance transparency.

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

Conciseness5/5

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

The description is concise and well-structured: a one-sentence summary, followed by an Args list and Returns line. Every line is informative, with no filler words or redundant information.

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

Completeness4/5

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

For a simple export tool with two parameters, the description covers the purpose, parameters, default path, and return format. The output schema is present, so return value details are not fully required in the description. It is complete enough for an agent to use the tool, though it could mention overwrite behavior given the destructive hint.

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

Parameters4/5

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

The schema has no descriptions beyond titles, so the description carries the full burden of explaining parameters. The Args section explains both 'data_id' as the dataset ID and 'path' as the custom path with a default, which adds meaningful semantic context beyond the schema.

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

Purpose5/5

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

The description starts with 'Export dataset to disk for external script access', which uses a specific verb (export) and resource (dataset), and clearly states the purpose. It naturally distinguishes itself from sibling tools that analyze, visualize, or preprocess data, as this is the only export tool.

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

Usage Guidelines4/5

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

The description clearly states the use case: 'for external script access', which implies when to use it. It does not explicitly mention when not to use it or provide alternatives, but given the distinct purpose among siblings, the context is clear enough.

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

find_markersC
DestructiveIdempotent

Find differentially expressed genes between groups.

Args:
    data_id: Dataset ID
    params: Required - group_key and optional method, group1/group2, n_top_genes, etc.
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
data_idYes
n_genesYes
warningsNoNon-fatal conditions that may affect result interpretation.
comparisonYes
top_genes_by_groupNo

TDQS

C2.9/5.0
Behavior2/5

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

The description adds no behavioral details beyond what annotations already specify. It does not mention potential side effects, required permissions, or impact on data, despite annotations indicating destructive and non-idempotent behavior.

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

Conciseness4/5

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

The description is concise with only one sentence of purpose and a brief parameter list. It is not bloated, but the 'Args' section is redundant with the schema and could be streamlined.

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?

Given the tool's complexity (nested params, multiple optional settings), the description lacks context about prerequisites, return values (though output schema exists), or typical use cases. The output schema is present, so return values are covered, but other contextual information is missing.

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's 'Args' section vaguely lists a few parameters but adds no explanatory value beyond what the schema already provides. Since schema_description_coverage is 0%, the description fails to compensate for the lack of parameter detail, leaving the agent to rely solely on the schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Find differentially expressed genes between groups.' This is a specific and unambiguous action, distinguishing it from sibling tools like compare_conditions or compute_embeddings.

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 provides no guidance on when to use this tool versus alternatives, prerequisites, or typical scenarios. It only states the action without context, leaving the agent to infer usage from the parameter names.

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

find_spatial_genesC
DestructiveIdempotent

Identify spatially variable genes.

Args:
    data_id: Dataset ID
    params: Spatial variable gene parameters (method, n_top_genes, etc.)
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYes
data_idYes
warningsNoNon-fatal conditions that may affect result interpretation.
results_keyYes
spatial_genesYes
n_genes_analyzedYes
n_significant_genesYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already indicate destructiveHint: true and idempotentHint: true, but the description adds no behavioral detail such as side effects (e.g., modifying the dataset, storing results), runtime implications, or auth requirements. It merely states the action without any disclosure beyond 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.

Conciseness4/5

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

The description is extremely concise with no wasted words, and the Args section provides a clear structure. However, it is almost too terse, borderline under-specified. It earns a high score for lack of fluff but loses a point for being overly minimalist.

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?

Despite having an output schema, the description is incomplete for a tool with 18 parameters and destructive behavior. It does not mention expected outputs, potential runtime (e.g., SpatialDE slow), or side effects. Given the complexity, the description is far from sufficient for an agent to fully understand when and how to use it effectively.

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?

Schema description coverage is 0% because the description only mentions 'params' generically with examples like 'method, n_top_genes, etc.' It does not clarify parameter formats, defaults, or relationships. The schema itself has rich descriptions, but the description fails to add high-level guidance or summary beyond listing a couple of examples.

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 clearly states the verb 'Identify' and the resource 'spatially variable genes', which is specific and distinguishable from siblings like find_markers and analyze_spatial_statistics. It concisely captures the tool's primary function.

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?

No guidance is provided on when to use this tool versus alternatives. It does not mention conditions like needing spatial transcriptomics data, nor does it differentiate from related analysis tools. The description lacks any contextual hints for selection.

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

identify_spatial_domainsC
Destructive

Identify spatial domains and tissue architecture.

Args:
    data_id: Dataset ID
    params: Spatial domain parameters (method, n_domains, resolution, etc.)
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYes
data_idYes
warningsNoNon-fatal conditions that may affect result interpretation.
n_domainsYes
domain_keyYes
domain_countsYes
embeddings_keyNo
refined_domain_keyNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating operation. The description itself adds no new behavioral context, such as what data is modified or whether results are stored back to the dataset. It does not contradict the annotations, but also does not supplement them.

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?

The description is concise and front-loaded with the purpose statement. The 'Args' section is brief but somewhat redundant with the schema. No wasted words, but it could be slightly more informative without losing conciseness.

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?

This is a complex tool with many methods and nested parameters, plus a destructive annotation. The description is too sparse, lacking an overview of supported algorithms, expected runtime, or side effects. The rich schema covers parameter details, but the high-level context is missing for an agent to fully anticipate behavior.

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 lists only 'data_id: Dataset ID' and 'params: Spatial domain parameters (method, n_domains, resolution, etc.)'. It gives minimal meaning and does not explain required status, defaults, or method selection. With top-level schema description coverage at 0%, the description barely compensates, though the nested schema is detailed.

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

Purpose4/5

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

The description states 'Identify spatial domains and tissue architecture,' which is a specific verb+resource. It clearly distinguishes from siblings such as analyze_spatial_statistics or find_spatial_genes, which target different analyses. However, 'tissue architecture' is a broad term, and the description could more explicitly define the tool's output or scope.

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 provides no guidance on when to use this tool versus alternatives. It lacks any mention of prerequisites, recommended scenarios, or how it compares to related spatial-analysis sibling tools. No exclusions or alternative tool references are given.

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

integrate_samplesB
Destructive

Integrate multiple spatial transcriptomics samples into a unified dataset.

Args:
    data_ids: List of dataset IDs to integrate
    params: Integration parameters (method, batch_key, n_pcs, etc.)
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idsYesTwo or more distinct dataset IDs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
data_idYes
n_cellsYes
warningsNoNon-fatal conditions that may affect result interpretation.
batch_keyYes
n_samplesYes
embedding_keyNo
integration_methodYes

TDQS

B3.4/5.0
Behavior2/5

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

The annotation destructiveHint: true signals the operation may alter or destroy data, but the description adds no context about what gets destroyed (e.g., whether original samples are modified, whether integration is reversible). While there's no annotation contradiction, the description misses the opportunity to disclose side effects, GPU/resource usage, or runtime expectations, which are especially important given the destructive hint.

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 reasonably concise but wastes space on an 'Args:' block that largely duplicates schema information. A more streamlined version could have eliminated the redundant parameter list and focused on the tool's outcome, edge cases, or side effects. Still, it's not overly verbose.

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?

Given the destructiveHint and complex parameter set, the description is incomplete. It doesn't explain output format (or if there is one), failure modes (e.g., what if data_ids has duplicates or incompatible datasets), or the impact of integration (e.g., does it return a new object, modify in place, or write to disk?). The presence of an output schema reduces the need to describe return values but doesn't excuse the lack of side-effect disclosure.

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?

The description mentions 'method, batch_key, n_pcs' which are already well-documented in the schema with defaults and descriptions. The description adds marginal value by signaling these are the key parameters but doesn't explain their semantics or interaction. With 50% schema coverage (data_ids and params), the description partially compensates but doesn't fully close the gap.

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 uniquely identifies the tool's purpose with a specific verb and resource: 'Integrate multiple spatial transcriptomics samples into a unified dataset.' It clearly differentiates from sibling tools focused on loading, preprocessing, or visualization since none of them imply data merging/integration at scale.

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

Usage Guidelines4/5

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

The description provides clear context that this tool is for integrating multiple samples, implying it's for batch processing scenarios. However, it doesn't explicitly state alternatives or exclusion criteria like 'for a single sample, use load_data.' The need for 2+ samples is implied by the schema's minItems but not spelled out in prose.

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

load_dataA

Load spatial transcriptomics data with comprehensive metadata profile.

Args:
    data_path: Path to data file or directory
    data_type: 'visium', 'xenium', 'slide_seq', 'merfish', 'seqfish', or 'generic'
    name: Optional dataset name

Returns:
    SpatialDataset with cell/gene counts and metadata profiles
ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
data_pathYes
data_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
n_cellsNo
n_genesNo
uns_keysNo
data_typeYes
obsm_keysNo
descriptionNo
obs_columnsNo
var_columnsNo
top_expressed_genesNo
tissue_image_availableNo
top_highly_variable_genesNo
spatial_coordinates_availableNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is clear. The description adds that loading returns a SpatialDataset with cell/gene counts and metadata profiles, but does not disclose additional side effects or external access behavior beyond what annotations imply.

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

Conciseness5/5

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

The description is well-structured with Args and Returns sections, providing all necessary information in a compact and easily scannable format. No redundant or filler content.

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

Completeness4/5

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

Given the output schema and annotations, the description covers the essential aspects: loading data, supported data types, and return type. It doesn't address edge cases like error handling or file format details, but it is sufficient for a data loading tool.

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

Parameters4/5

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

The description's Args block explains all three parameters, including allowed values for data_type, which compensates for the schema's empty parameter descriptions (0% coverage). This adds meaningful context beyond the raw schema.

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

Purpose5/5

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

The description uses a specific verb ('Load') and names the resource ('spatial transcriptomics data'), making it clear what the tool does. It is distinct from sibling tools like reload_data and preprocess_data, and the Args section further specifies data types and behaviors.

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

Usage Guidelines3/5

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

The description implies this is the entry point for loading spatial data but does not explicitly state when to use it over reload_data or other alternatives. The data_type enum provides some context, but there is no when-to-use/when-not-to-use guidance or exclusions.

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

preprocess_dataA
Destructive

Run QC, filtering, normalization, and highly variable gene selection.

This tool does not compute PCA, UMAP, clustering, or neighbor graphs. Run
compute_embeddings() afterward when downstream tools require those artifacts.

Args:
    data_id: Dataset ID
    params: Preprocessing parameters (all have sensible defaults)
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
n_hvgsYes
data_idYes
n_cellsYes
n_genesYes
clustersYesClusters computed during preprocessing. This is zero because clustering is performed by compute_embeddings.
warningsNoNon-fatal conditions that may affect result interpretation.
qc_metricsNo

TDQS

A3.7/5.0
Behavior2/5

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

Annotations indicate destructiveHint=true, but the description does not elaborate on what is destroyed or modified (e.g., whether it overwrites existing data, irreversibility, or side effects). The only behavioral note is a negative scope (not computing embeddings), which is more purpose-related than a behavioral disclosure. With a destructive hint, the description should warn about data overwrite or similar consequences.

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

Conciseness5/5

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

The description is concise and well-structured: it opens with the primary purpose, then clarifies scope limits, and ends with a compact Args section. Every sentence adds value without redundancy, making it easy for an agent to quickly grasp the tool's core function.

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

Completeness3/5

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

Given the tool's complexity (many parameters, destructive behavior) and the lack of output schema details, the description is somewhat minimal. It covers purpose and the boundary with compute_embeddings, but it omits prerequisites (e.g., data must already be loaded), side effects of the destructive operation, and what the function returns. This is adequate but with clear gaps.

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?

The input schema itself provides detailed descriptions for each parameter, so the baseline is 3. The description adds only minimal value by saying 'all have sensible defaults,' which helps convey that params can be omitted, but it does not explain any parameter semantics beyond that. The schema carries the heavy lifting for parameter understanding.

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 clearly states the tool's function with a specific verb and resource: 'Run QC, filtering, normalization, and highly variable gene selection.' It also explicitly differentiates itself from a sibling tool by stating it does not compute PCA, UMAP, clustering, or neighbor graphs, and directs users to compute_embeddings() when those artifacts are needed.

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

Usage Guidelines4/5

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

The description provides clear context by stating that compute_embeddings() should be run afterward when downstream tools require those artifacts. This implies the tool's role in the analysis pipeline, but it does not explicitly mention when not to use this tool or list alternative preprocessors, so there is room for improvement.

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

register_spatial_dataC
Destructive

Register/align spatial transcriptomics data across sections

Args:
    source_id: Source dataset ID
    target_id: Target dataset ID to align to
    params: Registration parameters (method, alignment settings, etc.)

Returns:
    Registration result with method, dataset IDs, spot counts, and registered spatial key
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
source_idYes
target_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
methodYes
warningsNoNon-fatal conditions that may affect result interpretation.
source_idYes
target_idYes
n_source_spotsYes
n_target_spotsYes
registration_completedNo
spatial_key_registeredYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations indicate destructiveHint=true, but the description does not disclose what side effects occur, such as modifying datasets, overwriting existing spatial keys, or requiring GPU resources. The return value mentions a 'registered spatial key' but does not explain whether it alters the input data. Since destructive behavior is likely, the description should clarify the nature of these changes, but it remains silent.

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?

The description is concise and uses a clear structured format with Args and Returns sections. It avoids unnecessary verbiage and conveys the core purpose in two lines. It could be slightly more informative, but the structure is efficient and scannable, earning a high score.

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?

Given the tool's complexity (nested parameters, two algorithms with distinct behaviors) and destructive hint, the description is incomplete. It does not mention prerequisites like loaded data, differences between method options ('paste' vs 'stalign'), or potential side effects. While an output schema exists, the description still needs to provide usage context and behavioral expectations, which it largely omits.

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?

Schema description coverage is 0%, so the description must compensate, but it provides only minimal information: source_id, target_id, and a vague 'params: Registration parameters (method, alignment settings, etc.)'. Source and target IDs are self-explanatory, but the nested params object contains many fields (method, stalign_a, paste_alpha, etc.) with detailed schema descriptions that are not reflected in the tool description. The agent gets insufficient guidance on parameter selection or meaning beyond the raw schema.

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

Purpose4/5

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

The description clearly states the tool's function: 'Register/align spatial transcriptomics data across sections.' This specifies a verb (register/align), resource (spatial transcriptomics data), and scope (across sections), which helps distinguish it from generic analysis tools. However, it does not explicitly differentiate from sibling tools like integrate_samples, so it falls slightly short of a perfect score.

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 provides no explicit guidance on when to use this tool versus alternatives. It only describes the action and parameters, with no mention of prerequisites, exclusions, or when registration is appropriate. Usage must be inferred entirely from the tool name and general context, leaving the agent without clear direction.

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

reload_dataA
DestructiveIdempotent

Reload dataset from disk after external script modifications.

Args:
    data_id: Dataset ID to reload (must exist in MCP memory)
    path: Custom path (default: ~/.chatspatial/active/{data_id}.h5ad)

Returns:
    Summary of reloaded dataset
ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructive and idempotent hints; description adds prerequisite (must exist in MCP memory) and default path behavior. No contradiction; adds useful context.

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

Conciseness5/5

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

Compact with Args/Returns sections; every sentence provides necessary detail, no redundancy.

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?

Covers purpose, parameters, return, and prerequisite. With output schema and annotations present, description is sufficient, though it could explicitly state the destructive overwrite behavior.

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

Parameters5/5

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

Schema has no descriptions (0% coverage); description explains both data_id (must exist in memory) and path (custom path with default), fully compensating.

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?

Clearly states 'Reload dataset from disk after external script modifications' - a specific verb, resource, and context. Distinguishes from load_data by emphasizing reloading after modifications.

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

Usage Guidelines4/5

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

Implies usage after external script modifications, which is a clear context, but doesn't explicitly name alternatives or exclusions. Provides enough to know when to apply.

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

visualize_dataB
Destructive

Visualize spatial transcriptomics data. Set plot_type and subtype in params; see VisualizationParameters schema for all options.

Args:
    data_id: Dataset ID
    params: Visualization parameters (plot_type, subtype, genes, output_format, dpi, etc.)
ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
data_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

Annotations flag destructiveHint=true and readOnlyHint=false, so this tool may have side effects, but the description only mentions visualization and parameters. It does not disclose overwriting behavior, file side effects, or any other consequences. This is not a direct contradiction, but the description misses important behavioral context.

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?

The description is short and front-loaded with the purpose, followed by a pointer to the schema. The Args block is mostly redundant with the schema but remains concise and does not significantly bloat the description.

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

Completeness3/5

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

Given the very large VisualizationParameters schema, the pointer to that schema is helpful, and the output schema covers return values. However, the description lacks workflow context, side-effect awareness, and guidance on how visualization relates to upstream analysis steps. It is minimally viable but has clear gaps.

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?

The schema itself is highly detailed with property descriptions, so the description does not need to duplicate that information. It usefully highlights plot_type and subtype as primary controls and points to the VisualizationParameters schema. However, the example 'genes' does not exactly match the schema property 'feature', adding slight ambiguity.

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 begins with a specific verb and resource: 'Visualize spatial transcriptomics data.' This clearly distinguishes it from sibling tools like load_data, preprocess_data, and find_markers. The added instruction to set plot_type and subtype further scopes the tool's functionality.

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 tells users to set plot_type and subtype and reference the schema, but it does not explain when to use this tool versus alternatives, prerequisites, or when not to use it. No exclusions or alternative tool references are provided.

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. Dates show when Glama detected each change.

  1. 8 tool updatesv1.5.3
    • Changedanalyze_cell_communication1 field changed
      • changedInput schema / $defs / CellCommunicationParameters / properties / method / default
        Previous value: -"fastccc"New value: +"liana"
    • Changedanalyze_enrichment4 fields changed
      • addedOutput schema / properties / n_significant / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / n_significant / default
        Added value: +null
      • removedOutput schema / properties / n_significant / type
        Removed value: -"integer"
      • changedOutput schema / required
        Previous value: -[
        -  "method",
        -  "n_gene_sets",
        -  "n_significant",
        -  "top_gene_sets",
        -  "top_depleted_sets"
        -]New value: +[
        +  "method",
        +  "n_gene_sets",
        +  "top_gene_sets",
        +  "top_depleted_sets"
        +]
    • Changedanalyze_spatial_statistics3 fields changed
      • addedOutput schema / properties / n_significant / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / n_significant / default
        Previous value: -0New value: +null
      • removedOutput schema / properties / n_significant / type
        Removed value: -"integer"
    • Changedanalyze_trajectory_data1 field changed
      • addedInput schema / $defs / TrajectoryParameters / properties / cellrank_stability_threshold
        Added value: +{
        +  "default": 0.96,
        +  "description": "Minimum macrostate stability for a state to count as terminal (CellRank only). Lower it when no macrostate is stable enough; otherwise the run falls back to macrostate-based pseudotime.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 1,
        +  "title": "Cellrank Stability Threshold",
        +  "type": "number"
        +}
    • Changedfind_markers3 fields changed
      • 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"
        +}
    • Changedfind_spatial_genes2 fields changed
      • addedInput schema / $defs / SpatialVariableGenesParameters / properties / max_genes_tested
        Added value: +{
        +  "anyOf": [
        +    {
        +      "exclusiveMinimum": 0,
        +      "maximum": 50000,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Cap on how many genes are tested, applied after the mitochondrial/ribosomal/HVG filters by keeping the highest-expressed genes. None = test everything that passes the filters. Use to bound runtime on slow backends (SpatialDE benchmarks at ~10 min per 14,000 genes). This limits the input; n_top_genes limits the output.",
        +  "title": "Max Genes Tested"
        +}
      • changedInput schema / $defs / SpatialVariableGenesParameters / properties / n_top_genes / description
        Previous value: -"Top spatial variable genes to return. None = all significant."New value: +"Top spatial variable genes to return, ranked by effect size where the backend reports one. None = all significant. This limits the output; use max_genes_tested to limit how many genes are tested."
    • Changedintegrate_samples4 fields changed
      • addedOutput schema / properties / batch_key
        Added value: +{
        +  "title": "Batch Key",
        +  "type": "string"
        +}
      • addedOutput schema / properties / embedding_key
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Embedding Key"
        +}
      • addedOutput schema / properties / n_cells
        Added value: +{
        +  "minimum": 0,
        +  "title": "N Cells",
        +  "type": "integer"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "data_id",
        -  "n_samples",
        -  "integration_method"
        -]New value: +[
        +  "data_id",
        +  "n_samples",
        +  "integration_method",
        +  "n_cells",
        +  "batch_key"
        +]
    • Changedvisualize_data3 fields changed
      • addedInput schema / $defs / VisualizationParameters / properties / colormap / description
        Added value: +"Colormap for continuous values. Categorical features automatically use a qualitative palette; set a qualitative palette such as 'tab20' to override that selection."
      • changedInput schema / $defs / VisualizationParameters / properties / subplot_wspace / default
        Previous value: -0New value: +0.3
      • changedInput schema / $defs / VisualizationParameters / properties / subplot_wspace / description
        Previous value: -"Horizontal subplot spacing. Lower for tighter, higher for looser."New value: +"Horizontal subplot spacing as a fraction of axis width. The default leaves room for y-axis tick labels; lower it for tighter panels once axes are hidden."
  2. 20 tool updatesv1.3.2
    • Changedanalyze_cell_communication7 fields changed
      • addedInput schema / $defs / CellCommunicationParameters / additionalProperties
        Added value: +false
      • changedInput schema / $defs / CellCommunicationParameters / properties / cellphonedb_debug_seed / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "minimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / CellCommunicationParameters / properties / cellphonedb_debug_seed / description
        Added value: +"Optional CellPhoneDB testing seed. Enabling it forces single-threaded permutations because the upstream seed contract is single-thread only."
      • 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"
        +}
    • Changedanalyze_cnv6 fields changed
      • addedInput schema / $defs / CNVParameters / additionalProperties
        Added value: +false
      • changedInput schema / $defs / CNVParameters / properties / numbat_genome / enum
        Previous value: -[
        -  "hg38",
        -  "hg19",
        -  "mm10",
        -  "mm39"
        -]New value: +[
        +  "hg38",
        +  "hg19",
        +  "mm10"
        +]
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
      • removedOutput schema / properties / statistics
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Statistics"
        -}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedanalyze_enrichment8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
      • removedOutput schema / properties / adjusted_pvalues
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {
        -        "type": "number"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Adjusted Pvalues"
        -}
      • removedOutput schema / properties / enrichment_scores
        Removed value: -{
        -  "additionalProperties": {
        -    "type": "number"
        -  },
        -  "title": "Enrichment Scores",
        -  "type": "object"
        -}
      • removedOutput schema / properties / gene_set_statistics
        Removed value: -{
        -  "additionalProperties": {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  "title": "Gene Set Statistics",
        -  "type": "object"
        -}
      • removedOutput schema / properties / pvalues
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": {
        -        "type": "number"
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Pvalues"
        -}
      • removedOutput schema / properties / spatial_metrics
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Spatial Metrics"
        -}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedanalyze_spatial_statistics5 fields changed
      • addedInput schema / $defs / SpatialStatisticsParameters / additionalProperties
        Added value: +false
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
      • removedOutput schema / properties / statistics
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Statistics"
        -}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedanalyze_trajectory_data4 fields changed
      • addedInput schema / $defs / TrajectoryParameters / additionalProperties
        Added value: +false
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedanalyze_velocity_data10 fields changed
      • addedInput schema / $defs / RNAVelocityParameters / properties / velovi_dropout_rate / exclusiveMaximum
        Added value: +1
      • addedInput schema / $defs / RNAVelocityParameters / properties / velovi_dropout_rate / minimum
        Added value: +0
      • addedInput schema / $defs / RNAVelocityParameters / properties / velovi_learning_rate / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / RNAVelocityParameters / properties / velovi_n_epochs / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / RNAVelocityParameters / properties / velovi_n_hidden / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / RNAVelocityParameters / properties / velovi_n_latent / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / RNAVelocityParameters / properties / velovi_n_layers / exclusiveMinimum
        Added value: +0
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedannotate_cell_types4 fields changed
      • addedInput schema / $defs / AnnotationParameters / additionalProperties
        Added value: +false
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedcompare_conditions8 fields changed
      • addedInput schema / $defs / ConditionComparisonParameters / additionalProperties
        Added value: +false
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / $defs / CellTypeComparisonResult / additionalProperties
        Added value: +false
      • removedOutput schema / $defs / CellTypeComparisonResult / properties / all_de_genes
        Removed value: -{
        -  "items": {
        -    "$ref": "#/$defs/DEGene"
        -  },
        -  "title": "All De Genes",
        -  "type": "array"
        -}
      • addedOutput schema / $defs / DEGene / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
      • changedOutput schema / properties / statistics / additionalProperties
        Previous value: -trueNew value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedcompute_embeddings7 fields changed
      • addedInput schema / $defs / EmbeddingParameters / additionalProperties
        Added value: +false
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +false
      • addedOutput schema / description
        Added value: +"Result of dimensionality reduction and clustering computation."
      • addedOutput schema / properties
        Added value: +{
        +  "computed": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "title": "Computed",
        +    "type": "array"
        +  },
        +  "data_id": {
        +    "title": "Data Id",
        +    "type": "string"
        +  },
        +  "n_clusters": {
        +    "anyOf": [
        +      {
        +        "minimum": 0,
        +        "type": "integer"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null,
        +    "title": "N Clusters"
        +  },
        +  "pca_variance_ratio": {
        +    "anyOf": [
        +      {
        +        "minimum": 0,
        +        "type": "number"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null,
        +    "title": "Pca Variance Ratio"
        +  },
        +  "skipped": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "title": "Skipped",
        +    "type": "array"
        +  },
        +  "warnings": {
        +    "description": "Non-fatal conditions that may affect result interpretation.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "title": "Warnings",
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "data_id",
        +  "computed",
        +  "skipped"
        +]
      • changedOutput schema / title
        Previous value: -"compute_embeddingsDictOutput"New value: +"EmbeddingResult"
    • Changeddeconvolve_data25 fields changed
      • addedInput schema / $defs / DeconvolutionParameters / additionalProperties
        Added value: +false
      • removedInput schema / $defs / DeconvolutionParameters / properties / cell2location_early_stopping_threshold / exclusiveMinimum
        Removed value: -0
      • addedInput schema / $defs / DeconvolutionParameters / properties / cell2location_early_stopping_threshold / minimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / cell2location_gene_filter_cell_count_cutoff / minimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / cell2location_gene_filter_cell_percentage_cutoff2 / maximum
        Added value: +1
      • addedInput schema / $defs / DeconvolutionParameters / properties / cell2location_gene_filter_cell_percentage_cutoff2 / minimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / cell2location_gene_filter_nonz_mean_cutoff / minimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / destvi_dropout_rate / exclusiveMaximum
        Added value: +1
      • addedInput schema / $defs / DeconvolutionParameters / properties / destvi_dropout_rate / minimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / destvi_learning_rate / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / destvi_n_hidden / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / destvi_n_latent / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / destvi_n_layers / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / rctd_backend
        Added value: +{
        +  "default": "r",
        +  "description": "RCTD implementation. 'r' preserves the spacexr backend; 'python' uses rctd-py.",
        +  "enum": [
        +    "r",
        +    "python"
        +  ],
        +  "title": "Rctd Backend",
        +  "type": "string"
        +}
      • addedInput schema / $defs / DeconvolutionParameters / properties / rctd_batch_size
        Added value: +{
        +  "anyOf": [
        +    {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "const": "auto",
        +      "type": "string"
        +    }
        +  ],
        +  "default": "auto",
        +  "description": "Spot batch size for the rctd-py backend, or 'auto'.",
        +  "title": "Rctd Batch Size"
        +}
      • addedInput schema / $defs / DeconvolutionParameters / properties / rctd_device
        Added value: +{
        +  "default": "auto",
        +  "description": "Compute device for the rctd-py backend. Ignored by the R backend.",
        +  "enum": [
        +    "auto",
        +    "cpu",
        +    "cuda"
        +  ],
        +  "title": "Rctd Device",
        +  "type": "string"
        +}
      • addedInput schema / $defs / DeconvolutionParameters / properties / rctd_dtype
        Added value: +{
        +  "default": "float64",
        +  "description": "Numerical precision for the rctd-py backend.",
        +  "enum": [
        +    "float64",
        +    "float32"
        +  ],
        +  "title": "Rctd Dtype",
        +  "type": "string"
        +}
      • addedInput schema / $defs / DeconvolutionParameters / properties / rctd_sigma_override
        Added value: +{
        +  "anyOf": [
        +    {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional fixed sigma for rctd-py. None estimates sigma from the data.",
        +  "title": "Rctd Sigma Override"
        +}
      • addedInput schema / $defs / DeconvolutionParameters / properties / stereoscope_batch_size / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / stereoscope_learning_rate / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / DeconvolutionParameters / properties / stereoscope_n_epochs / exclusiveMinimum
        Added value: +0
      • 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"
        +}
    • Changedexport_data2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
    • Changedfind_markers5 fields changed
      • 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"
        +}
    • Changedfind_spatial_genes10 fields changed
      • addedInput schema / $defs / SpatialVariableGenesParameters / additionalProperties
        Added value: +false
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
      • removedOutput schema / properties / flashs_results
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Flashs Results"
        -}
      • removedOutput schema / properties / gene_statistics
        Removed value: -{
        -  "additionalProperties": {
        -    "type": "number"
        -  },
        -  "title": "Gene Statistics",
        -  "type": "object"
        -}
      • removedOutput schema / properties / p_values
        Removed value: -{
        -  "additionalProperties": {
        -    "type": "number"
        -  },
        -  "title": "P Values",
        -  "type": "object"
        -}
      • removedOutput schema / properties / q_values
        Removed value: -{
        -  "additionalProperties": {
        -    "type": "number"
        -  },
        -  "title": "Q Values",
        -  "type": "object"
        -}
      • removedOutput schema / properties / sparkx_results
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Sparkx Results"
        -}
      • removedOutput schema / properties / spatialde_results
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Spatialde Results"
        -}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedidentify_spatial_domains17 fields changed
      • addedInput schema / $defs / SpatialDomainParameters / additionalProperties
        Added value: +false
      • addedInput schema / $defs / SpatialDomainParameters / properties / aestetik_clustering_method
        Added value: +{
        +  "default": "kmeans",
        +  "description": "Clustering applied to AESTETIK embeddings. 'kmeans'/'bgm' use n_domains; 'leiden'/'louvain' use resolution.",
        +  "enum": [
        +    "bgm",
        +    "kmeans",
        +    "louvain",
        +    "leiden"
        +  ],
        +  "title": "Aestetik Clustering Method",
        +  "type": "string"
        +}
      • addedInput schema / $defs / SpatialDomainParameters / properties / aestetik_latent_dim
        Added value: +{
        +  "default": 16,
        +  "description": "AESTETIK latent embedding dimension.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 512,
        +  "title": "Aestetik Latent Dim",
        +  "type": "integer"
        +}
      • addedInput schema / $defs / SpatialDomainParameters / properties / aestetik_max_epochs
        Added value: +{
        +  "default": 100,
        +  "description": "AESTETIK training epochs.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 10000,
        +  "title": "Aestetik Max Epochs",
        +  "type": "integer"
        +}
      • addedInput schema / $defs / SpatialDomainParameters / properties / aestetik_morphology_key
        Added value: +{
        +  "default": "X_pca_morphology",
        +  "description": "obsm key holding the precomputed per-spot morphology embedding (AESTETIK only).",
        +  "title": "Aestetik Morphology Key",
        +  "type": "string"
        +}
      • addedInput schema / $defs / SpatialDomainParameters / properties / aestetik_morphology_weight
        Added value: +{
        +  "default": 1.5,
        +  "description": "Morphology weight in the AESTETIK joint loss.",
        +  "maximum": 3,
        +  "minimum": 0,
        +  "title": "Aestetik Morphology Weight",
        +  "type": "number"
        +}
      • addedInput schema / $defs / SpatialDomainParameters / properties / aestetik_random_seed
        Added value: +{
        +  "default": 2023,
        +  "title": "Aestetik Random Seed",
        +  "type": "integer"
        +}
      • addedInput schema / $defs / SpatialDomainParameters / properties / aestetik_transcriptomics_key
        Added value: +{
        +  "default": "X_pca",
        +  "description": "obsm key holding the precomputed expression embedding (AESTETIK only).",
        +  "title": "Aestetik Transcriptomics Key",
        +  "type": "string"
        +}
      • addedInput schema / $defs / SpatialDomainParameters / properties / aestetik_window_size
        Added value: +{
        +  "default": 3,
        +  "description": "Odd side length of the AESTETIK neighborhood grid.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 15,
        +  "title": "Aestetik Window Size",
        +  "type": "integer"
        +}
      • changedInput schema / $defs / SpatialDomainParameters / properties / method / description
        Previous value: -"'spagcn' uses histology. 'banksy' uses spatial feature augmentation. 'stagate'/'graphst' use deep learning."New value: +"'spagcn' uses histology. 'banksy' uses spatial feature augmentation. 'stagate'/'graphst' use deep learning. 'aestetik' fuses precomputed expression and morphology embeddings."
      • changedInput schema / $defs / SpatialDomainParameters / properties / method / enum
        Previous value: -[
        -  "spagcn",
        -  "leiden",
        -  "louvain",
        -  "stagate",
        -  "graphst",
        -  "banksy"
        -]New value: +[
        +  "spagcn",
        +  "leiden",
        +  "louvain",
        +  "stagate",
        +  "graphst",
        +  "banksy",
        +  "aestetik"
        +]
      • changedInput schema / $defs / SpatialDomainParameters / properties / timeout / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / SpatialDomainParameters / properties / timeout / description
        Added value: +"Maximum backend runtime in seconds. None uses 600 seconds."
      • 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"
        +}
    • Changedintegrate_samples13 fields changed
      • addedInput schema / $defs / IntegrationParameters / additionalProperties
        Added value: +false
      • changedInput schema / $defs / IntegrationParameters / properties / n_epochs / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / $defs / IntegrationParameters / properties / scvi_dropout_rate / exclusiveMaximum
        Added value: +1
      • addedInput schema / $defs / IntegrationParameters / properties / scvi_dropout_rate / minimum
        Added value: +0
      • addedInput schema / $defs / IntegrationParameters / properties / scvi_n_hidden / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / IntegrationParameters / properties / scvi_n_latent / exclusiveMinimum
        Added value: +0
      • addedInput schema / $defs / IntegrationParameters / properties / scvi_n_layers / exclusiveMinimum
        Added value: +0
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / data_ids / description
        Added value: +"Two or more distinct dataset IDs."
      • addedInput schema / properties / data_ids / minItems
        Added value: +2
      • addedOutput schema / additionalProperties
        Added value: +false
      • addedOutput schema / properties / n_samples / minimum
        Added value: +2
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedload_data4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / data_type / enum
        Added value: +[
        +  "visium",
        +  "xenium",
        +  "slide_seq",
        +  "merfish",
        +  "seqfish",
        +  "generic"
        +]
      • addedOutput schema / $defs / ColumnInfo / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
    • Changedpreprocess_data10 fields changed
      • addedInput schema / $defs / PreprocessingParameters / additionalProperties
        Added value: +false
      • removedInput schema / $defs / PreprocessingParameters / properties / clustering_key
        Removed value: -{
        -  "default": "leiden",
        -  "description": "Key name for clustering results in obs.",
        -  "title": "Clustering Key",
        -  "type": "string"
        -}
      • removedInput schema / $defs / PreprocessingParameters / properties / clustering_resolution
        Removed value: -{
        -  "default": 1,
        -  "description": "Leiden clustering resolution. Higher (1.5-2.0) for more clusters, lower (0.2-0.5) for fewer.",
        -  "exclusiveMinimum": 0.1,
        -  "maximum": 2,
        -  "title": "Clustering Resolution",
        -  "type": "number"
        -}
      • removedInput schema / $defs / PreprocessingParameters / properties / n_neighbors
        Removed value: -{
        -  "default": 15,
        -  "description": "Neighbors for k-NN graph. Larger (20-50) for global structure, smaller (5-10) for local patterns.",
        -  "exclusiveMinimum": 2,
        -  "maximum": 100,
        -  "title": "N Neighbors",
        -  "type": "integer"
        -}
      • removedInput schema / $defs / PreprocessingParameters / properties / n_pcs
        Removed value: -{
        -  "default": 30,
        -  "description": "Number of principal components for PCA.",
        -  "exclusiveMinimum": 0,
        -  "maximum": 100,
        -  "title": "N Pcs",
        -  "type": "integer"
        -}
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
      • addedOutput schema / properties / clusters / description
        Added value: +"Clusters computed during preprocessing. This is zero because clustering is performed by compute_embeddings."
      • changedOutput schema / properties / qc_metrics / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "string"
        +        }
        +      ]
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "description": "Non-fatal conditions that may affect result interpretation.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Warnings",
        +  "type": "array"
        +}
    • Changedregister_spatial_data8 fields changed
      • addedInput schema / $defs / RegistrationParameters / additionalProperties
        Added value: +false
      • addedInput schema / $defs / RegistrationParameters / properties / stalign_image_size / items / exclusiveMinimum
        Added value: +0
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / additionalProperties
        Previous value: -trueNew value: +false
      • addedOutput schema / description
        Added value: +"Result of bilateral spatial-coordinate registration."
      • addedOutput schema / properties
        Added value: +{
        +  "method": {
        +    "enum": [
        +      "paste",
        +      "stalign"
        +    ],
        +    "title": "Method",
        +    "type": "string"
        +  },
        +  "n_source_spots": {
        +    "minimum": 0,
        +    "title": "N Source Spots",
        +    "type": "integer"
        +  },
        +  "n_target_spots": {
        +    "minimum": 0,
        +    "title": "N Target Spots",
        +    "type": "integer"
        +  },
        +  "registration_completed": {
        +    "const": true,
        +    "default": true,
        +    "title": "Registration Completed",
        +    "type": "boolean"
        +  },
        +  "source_id": {
        +    "title": "Source Id",
        +    "type": "string"
        +  },
        +  "spatial_key_registered": {
        +    "title": "Spatial Key Registered",
        +    "type": "string"
        +  },
        +  "target_id": {
        +    "title": "Target Id",
        +    "type": "string"
        +  },
        +  "warnings": {
        +    "description": "Non-fatal conditions that may affect result interpretation.",
        +    "items": {
        +      "type": "string"
        +    },
        +    "title": "Warnings",
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / required
        Added value: +[
        +  "method",
        +  "source_id",
        +  "target_id",
        +  "n_source_spots",
        +  "n_target_spots",
        +  "spatial_key_registered"
        +]
      • changedOutput schema / title
        Previous value: -"register_spatial_dataDictOutput"New value: +"SpatialRegistrationResult"
    • Changedreload_data2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
    • Changedvisualize_data8 fields changed
      • addedInput schema / $defs / VisualizationParameters / properties / alpha / maximum
        Added value: +1
      • addedInput schema / $defs / VisualizationParameters / properties / alpha / minimum
        Added value: +0
      • addedInput schema / $defs / VisualizationParameters / properties / dpi / exclusiveMinimum
        Added value: +0
      • changedInput schema / $defs / VisualizationParameters / properties / figure_size / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "maxItems": 2,
        -    "minItems": 2,
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    },
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / VisualizationParameters / properties / panel_layout / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "type": "integer"
        -    },
        -    "maxItems": 2,
        -    "minItems": 2,
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    },
        +    "maxItems": 2,
        +    "minItems": 2,
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / $defs / VisualizationParameters / properties / spot_size / anyOf
        Previous value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "exclusiveMinimum": 0,
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / additionalProperties
        Added value: +false
      • addedOutput schema / additionalProperties
        Added value: +false
  3. 2 tool updatesv1.2.10
    • Changedannotate_cell_types2 fields changed
      • addedInput schema / $defs / AnnotationParameters / properties / sctype_allow_remote
        Added value: +{
        +  "default": false,
        +  "description": "Allow scType to load remote R scripts and the default remote marker database for this call.",
        +  "title": "Sctype Allow Remote",
        +  "type": "boolean"
        +}
      • addedInput schema / $defs / AnnotationParameters / properties / sctype_allow_runtime_r_install
        Added value: +{
        +  "default": false,
        +  "description": "Allow scType to install missing R packages at runtime for this call.",
        +  "title": "Sctype Allow Runtime R Install",
        +  "type": "boolean"
        +}
    • Changeddeconvolve_data3 fields changed
      • changedInput schema / $defs / DeconvolutionParameters / properties / spotlight_n_top_genes / default
        Previous value: -2000New value: +50
      • changedInput schema / $defs / DeconvolutionParameters / properties / spotlight_n_top_genes / description
        Previous value: -"Number of HVGs for deconvolution. SPOTlight only."New value: +"Marker genes per cell type for SPOTlight deconvolution."
      • changedInput schema / $defs / DeconvolutionParameters / properties / spotlight_n_top_genes / maximum
        Previous value: -5000New value: +500
  4. 3 tool updatesv1.2.8
    • Changedanalyze_enrichment4 fields changed
      • addedInput schema / properties / params / $ref
        Added value: +"#/$defs/EnrichmentParameters"
      • removedInput schema / properties / params / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/EnrichmentParameters"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / params / default
        Removed value: -null
      • changedInput schema / required
        Previous value: -[
        -  "data_id"
        -]New value: +[
        +  "data_id",
        +  "params"
        +]
    • Changedanalyze_spatial_statistics1 field changed
      • addedInput schema / $defs / SpatialStatisticsParameters / properties / neighborhood_n_perms
        Added value: +{
        +  "default": 100,
        +  "description": "Permutations for neighborhood enrichment. Use 1000+ for publication.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 10000,
        +  "title": "Neighborhood N Perms",
        +  "type": "integer"
        +}
    • Changedvisualize_data1 field changed
      • changedInput schema / $defs / VisualizationParameters / properties / subtype / description
        Previous value: -"Visualization subtype. Options by plot_type:\n- expression: 'heatmap'|'violin'|'dotplot'|'correlation'\n- deconvolution: 'spatial_multi'|'pie'|'dominant'|'diversity'|'umap'|'imputation'\n- communication: 'dotplot'|'tileplot'|'circle_plot'\n- trajectory: 'pseudotime'|'circular'|'fate_map'|'gene_trends'|'fate_heatmap'|'palantir'\n- velocity: 'stream'|'phase'|'proportions'|'heatmap'|'paga'\n- statistics: 'neighborhood'|'co_occurrence'|'ripley'|'moran'|'centrality'|'getis_ord' (required)\n- enrichment: 'barplot'|'dotplot'\n- cnv: 'heatmap'|'spatial'\n- integration: 'batch'|'cluster'|'highlight'"New value: +"Visualization subtype. Options by plot_type:\n- expression: 'heatmap'|'violin'|'dotplot'|'correlation'\n- deconvolution: 'spatial_multi'|'pie'|'dominant'|'diversity'|'umap'|'imputation'\n- communication: 'spatial'|'dotplot'|'tileplot'|'circle_plot'\n- trajectory: 'pseudotime'|'circular'|'fate_map'|'gene_trends'|'fate_heatmap'|'palantir'\n- velocity: 'stream'|'phase'|'proportions'|'heatmap'|'paga'\n- statistics: 'neighborhood'|'co_occurrence'|'ripley'|'moran'|'centrality'|'getis_ord' (required)\n- enrichment: 'barplot'|'dotplot'\n- cnv: 'heatmap'|'spatial'\n- integration: 'batch'|'cluster'|'highlight'"
  5. 20 tool updatesv1.2.7
    • First observedanalyze_cell_communication
    • First observedanalyze_cnv
    • First observedanalyze_enrichment
    • First observedanalyze_spatial_statistics
    • First observedanalyze_trajectory_data
    • First observedanalyze_velocity_data
    • First observedannotate_cell_types
    • First observedcompare_conditions
    • First observedcompute_embeddings
    • First observeddeconvolve_data
    • First observedexport_data
    • First observedfind_markers
    • First observedfind_spatial_genes
    • First observedidentify_spatial_domains
    • First observedintegrate_samples
    • First observedload_data
    • First observedpreprocess_data
    • First observedregister_spatial_data
    • First observedreload_data
    • First observedvisualize_data

TDQS

B3.2/5.0
Disambiguation3/5

Most tools have distinct purposes, but there are overlapping pairs: compare_conditions vs. find_markers both perform differential expression, and analyze_spatial_statistics vs. find_spatial_genes both address spatial patterns. annotate_cell_types and deconvolve_data could also confuse agents since both assign cell types, though at different resolutions.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., load_data, compute_embeddings, analyze_cell_communication). The use of prefixes like 'analyze_' and 'find_' is consistent and predictable across the tool set.

Tool Count3/5

With 20 tools, the server sits in the 16-25 range, which feels heavy for a single server even though the domain is complex. The count is appropriate for the breadth of spatial transcriptomics analyses, but it is on the upper end and could be streamlined.

Completeness5/5

The tool set covers the full spatial transcriptomics workflow: data loading and preprocessing, embeddings, clustering, annotation, differential expression, trajectory and velocity, integration, spatial domains, deconvolution, cell communication, enrichment, CNV, and export/reload. No significant gaps are evident for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    C
    maintenance
    An MCP server that enables single-cell RNA sequencing analysis through natural language, supporting data processing, visualization, and analysis tasks without requiring coding knowledge.
    52
    12
    BSD 3-Clause
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language interface for single-cell RNA-Seq analysis using Liana. Supports reading/writing scRNA-Seq data, cell-cell communication analysis, and visualization through circle plots and dotplots.
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that enables scRNA-Seq analysis through natural language, providing tools for data preprocessing, clustering, and biological visualization. It supports both predefined function execution and a flexible code mode powered by a Jupyter backend for automated single-cell transcriptomics workflows.
    16
    BSD 3-Clause
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides a natural language interface for single-cell RNA-Seq analysis using the decoupleR framework. It enables users to perform biological pathway inference, data clustering, and visualization through MCP-compatible AI clients.
    4
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cafferychen777/ChatSpatial'

If you have feedback or need assistance with the MCP directory API, please join our Discord server