Natural language-driven spatial transcriptomics analysis via Model Context Protocol (MCP) integration. Schema-enforced orchestration framework integrating 66 methods across 15 analytical categories.
ChatSpatial presents significant definition quality gaps that block production use. While tool names follow verb patterns (load_, preprocess_, compute_, visualize_, identify_), the schemas lack proper structure and validation. Tool descriptions are present but generic, they state WHAT without clearly explaining WHEN to use each tool or sequencing dependencies. Input schemas are declared as 'object' types with 'description' fields referencing undefined parameter classes (PreprocessingParameters, EmbeddingParameters, VisualizationParameters, SpatialDomainParameters) that are not inlined or visible in the source. This violates the requirement that schemas must be self-contained and machine-readable. No output schemas are documented anywhere. Parameters lack type definitions, enum constraints, ranges, or format guidance. Error handling is absent, no guidance on what happens when data_id is invalid, preprocessing fails, or visualization parameters are malformed. The tool descriptions do not answer critical sequencing questions: 'Must I call load_data before preprocess_data?' (implicitly yes, but not stated). 'What is a data_id format?' (not documented). 'What does visualize_data return?' (not specified). These gaps force LLMs to guess intent and sequencing, increasing hallucination risk.
Compute dimensionality reduction (PCA, UMAP), clustering, and neighbor graphs.
Identifies spatial domains by clustering spots based on gene expression and location. This function serves as the main entry point for various spatial domain identification methods including SpaGCN, STAGATE, GraphST, Leiden, Louvain, BANKSY, and AESTETIK.
Load spatial transcriptomics data with comprehensive metadata profile.
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.
Visualize spatial transcriptomics data. Set plot_type and subtype in params; see VisualizationParameters schema for all options.
Input schemas are not properly defined. All five tools declare parameters as object type with description text referencing undefined parameter classes (PreprocessingParameters, EmbeddingParameters, VisualizationParameters, SpatialDomainParameters). These class schemas are not inlined, not linked, and not visible in the source code provided. LLMs cannot infer valid parameter structures from class names alone.
No output schemas documented for any tool. LLMs cannot know what fields to expect (e.g., does load_data return a data_id string or an object?). This breaks tool chaining, downstream tools need to know what identifiers and fields are available to reference.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
Tool descriptions lack sequencing context and dependency hints. 'Run QC, filtering, normalization' tells what preprocess_data does but not when (after load_data, before compute_embeddings). The note 'This tool does not compute PCA, UMAP, clustering, or neighbor graphs' is clarifying but should be paired with 'call compute_embeddings() afterward' in discover mode so agents plan multi-step workflows correctly.
Parameters lack type definitions, constraints, and ranges. 'data_type' accepts 'visium', 'xenium', etc., but this is documented in text, not as an enum. No minimum/maximum for numeric params, no regex patterns, no format specifications. LLMs will hallucinate invalid values.
No error handling or recovery guidance. What happens if data_path does not exist? If data_type is invalid? If clustering fails due to memory? The tools provide no error messages that guide the LLM's next step.
Parameter descriptions are sparse or absent. 'params' is described as 'PreprocessingParameters (all have sensible defaults)', this is not actionable. What are the actual fields in PreprocessingParameters? What are the defaults? LLMs cannot construct valid requests without explicit field documentation.