cxg-census-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cxg-census-mcpFind all cell types in the human lung"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cxg-census-mcp
An MCP server that lets LLM agents query the CZ CELLxGENE Discover Census single-cell atlas without lying about it — ontology-aware filters, cost caps, full provenance + attribution on every response. Drop it into Cursor / Claude Desktop / Claude Code and ask questions like "Visualize the cell-type composition of the human lung" in plain English.
Independent / unaffiliated. Not affiliated with, endorsed by, or sponsored by the Chan Zuckerberg Initiative (CZI), EMBL-EBI, the U.S. Census Bureau, or anyone else. "CELLxGENE" is a CZI mark; references here are descriptive (nominative) use only.
No warranty. MIT-licensed source, "as is". Research/exploration tool — not a clinical or diagnostic instrument. Always verify results before publication. See LICENSE for the full trademark and content attribution notice, and SECURITY.md for the threat model and known-issues policy.
Alpha (v0.1.2).
CHANGELOG.md
Demos
Healthy vs COVID-19 lung, side-by-side. Two parallel queries, the
disease_multi_value_v7 schema-drift rewrite kicks in for the COVID
cohort, attribution from both contributing dataset sets surfaces in the
same chat turn.
https://github.com/user-attachments/assets/c836f225-5075-4643-87aa-70d311bc5fd2
Cell-type composition of human lung in one query. Free-text "lung"
resolved to UBERON:0002048, routed through tissue_general, every CURIE
labeled, all in a single Tier-0 call.
https://github.com/user-attachments/assets/b0e10ca7-e46b-4e5f-ae63-11949d328c4d
(Videos render on GitHub. On PyPI they appear as bare URLs — head to the GitHub README to watch.)
More prompts in docs/example-questions.md.
Related MCP server: Scanpy-MCP
Architecture at a glance
┌──────────────────────────────────────────────┐
MCP client │ tools/ thin MCP wrappers, no logic │
(Claude, ─► │ │ │
Cursor, │ ▼ │
Code, …) │ planner/ FilterSpec → QueryPlan, │
│ │ cost estimate, tier routing │
│ ▼ │
│ ontology/ OLS4 + hint overlay, │
│ │ CL/UBERON/MONDO expansion │
│ ▼ │
│ execution/ Tier 0 facet counts │
│ │ Tier 1 chunked obs scan │
│ │ Tier 2 expression aggregate │
│ │ Tier 9 refuse → snippet │
│ ▼ │
│ clients/ OLS4 (HTTPS) + Census/SOMA │
│ │
│ caches/ OLS, facet, plan, filter LRU │
│ models/ Response envelope w/ │
│ attribution + provenance │
└──────────────────────────────────────────────┘
│
▼
┌────────────────────────┐
│ EBI OLS4 (ontology) │
│ CZ CELLxGENE Census │
│ (CC BY 4.0 data) │
└────────────────────────┘Full architecture notes: docs/architecture.md.
Tool reference: docs/tool-reference.md.
Example questions: docs/example-questions.md.
Install
From PyPI (recommended):
uv tool install "cxg-census-mcp[census]"
cxg-census-mcp # speaks MCP over stdioOr with pip:
pip install "cxg-census-mcp[census]"Without the [census] extra you get mock mode (deterministic fixtures) —
handy for offline demos and verifying your MCP client config without pulling
tiledbsoma's ~1 GB of native deps.
From source (for development):
git clone https://github.com/MaxMLang/cxg-census-mcp
cd cxg-census-mcp
uv sync --extra dev --extra census
uv run cxg-census-mcpMCP client config
Cursor (~/.cursor/mcp.json) and Claude Desktop
(~/Library/Application Support/Claude/claude_desktop_config.json on macOS)
both expect the same shape. Cleanest is uvx once installed from PyPI:
{
"mcpServers": {
"cxg-census": {
"command": "/absolute/path/to/uvx",
"args": ["--from", "cxg-census-mcp[census]", "cxg-census-mcp"]
}
}
}Use the absolute path to
uvx(which uvxfrom your shell). MCP clients spawn the server in a non-interactive subprocess that doesn't source your shell rc, so a bare"uvx"will fail withNo such file or directory.
If you cloned from source instead, point at the checkout:
{
"mcpServers": {
"cxg-census": {
"command": "/absolute/path/to/uv",
"args": ["--directory", "/path/to/cxg-census-mcp", "run", "cxg-census-mcp"]
}
}
}Claude Code:
claude mcp add cxg-census -- /absolute/path/to/uvx --from "cxg-census-mcp[census]" cxg-census-mcpQuit + relaunch your client (⌘Q on macOS — closing the window isn't enough) and the server should show up in the MCP panel with 13 tools.
Tools (13 total)
Workflow: census_summary, get_census_versions, count_cells,
list_datasets, gene_coverage, aggregate_expression, preview_obs,
export_snippet, get_server_limits.
Inspection: resolve_term, expand_term, term_definition,
list_available_values.
Plus MCP resources (markdown docs at cxg-census-mcp://docs/{slug}),
prompts (census_workflow, disambiguation), and cooperative
progress / cancellation notifications. Details in
docs/tool-reference.md.
Configuration
All env vars use the CXG_CENSUS_MCP_ prefix. Most useful:
Variable | Default | Purpose |
|
| Census release to pin |
| platformdirs default | Disk cache root |
|
| If |
|
| stdlib log level |
Full list and validation: src/cxg_census_mcp/config.py.
Development & operations
Quick loop:
make install-all # uv sync --extra dev --extra census
make lint typecheck test # ruff + mypy + pytest (mock mode)
make cov # tests + coverage HTML in ./htmlcov
make audit # pip-audit on locked production depsOperational tasks (cache pre-warm, schema diff, container build, metrics
dump, plan-cache vacuum, weekly hint/facet refresh) live in the
Makefile
and are documented in
docs/operational-playbook.md.
Documentation index
Topic | Where |
System architecture | |
Tool reference | |
Example agent questions | |
Ontology resolution | |
Schema-drift handling | |
Census version pinning | |
Progress / cancellation | |
Error model | |
Known limitations | |
Ops runbook | |
Changelog |
License & attribution
Source code: MIT. The MIT license covers only the code in this repository, not the upstream data, ontologies, or third-party trademarks.
Data. Tool responses are derived (filtered/aggregated) from the CZ CELLxGENE Discover Census, distributed by the Chan Zuckerberg Initiative under CC BY 4.0. Every response carries an
attributionfield; downstream users must preserve attribution and indicate that changes were made.Ontologies are fetched via EBI Ontology Lookup Service (OLS4) from CL, UBERON, MONDO, EFO, HANCESTRO, and others; each carries its own license.
Trademarks ("CELLxGENE", "Cursor", "Claude", "Anthropic", "Model Context Protocol", …) belong to their respective owners. Use here is descriptive only and does not imply affiliation.
This project is a client of the CZ CELLxGENE Discover Census; it does not host, mirror, or redistribute Census data.
Full notice in LICENSE.
Available Tools
13 toolsaggregate_expressionC
Per-gene expression stats by group; caps → export_snippet if over.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | ||
| gene_ids | Yes | ||
| group_by | No | cell_type | |
| aggregations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions capping and redirection to export_snippet, which is useful. However, it omits critical details such as whether the tool is read-only, performance characteristics, or how results are truncated. The single behavioral disclosure is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short (two fragments) and lacks structure. While it is concise, it sacrifices essential information. Important details are missing, making it too minimal for an agent to use effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—nested filter objects, multiple parameters, no output schema—the description is severely incomplete. It does not explain filtering logic, available aggregations, grouping options, output format, or the capping threshold. An agent cannot infer correct usage from this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage and four top-level parameters (filters, gene_ids, group_by, aggregations), all with nested structures. The description fails to explain any of these parameters, their purposes, or how they influence results. It adds no semantic value beyond the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Per-gene expression stats by group' which clearly indicates aggregation of gene expression data across groups. The reference to 'caps → export_snippet if over' hints at a truncation behavior. However, it does not explicitly differentiate from sibling tools like census_summary or gene_coverage, which may also compute statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It mentions a fallback to export_snippet but does not specify prerequisites, conditions for capping, or scenarios where other tools would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
census_summaryC
Pinned Census summary: cells, schema, build date.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only lists what is returned (cells, schema, build date), but omits whether it is read-only, requires authentication, or has any side effects. The brief description provides minimal 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of a single sentence. It is front-loaded with the key output elements. However, it could include a bit more context without sacrificing conciseness, such as the purpose or format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no input parameters, no output schema, and a simple description, the tool is minimally adequate. However, it lacks details on the return format, how the summary is structured, and how it relates to sibling tools. This leaves gaps for an AI agent to infer correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the input schema coverage is 100%. The description correctly implies no input is needed. Since there are no parameters to elaborate, the baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it returns a 'Census summary: cells, schema, build date,' which indicates a retrieval of basic metadata. However, the term 'Pinned Census' is ambiguous, and the action (e.g., 'get' or 'retrieve') is implied rather than explicit. It partly distinguishes from siblings by focusing on summary, but not clearly enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like 'get_census_versions' or 'count_cells'. The description does not specify prerequisites, contexts, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_cellsC
Count cells (filters + optional group_by); tier 0.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | ||
| group_by | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral aspects such as whether the operation is read-only, performance characteristics, or any side effects. The term 'tier 0' is cryptic and does not clarify behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, but it sacrifices necessary detail. It front-loads the core idea but omits important context, making it minimally adequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex input schema with many nested filter objects and no output schema, the description is severely incomplete. It does not address the variety of filter options or how results are returned, leaving significant gaps for an agent to interpret correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description merely lists parameter names ('filters', 'group_by') without explaining their semantics or usage. With 0% schema description coverage, the agent gains no additional insight beyond the property names, which is insufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool counts cells and mentions the key parameters (filters, optional group_by). The verb 'Count' and resource 'cells' are specific, and the functionality is distinct from sibling tools like list_datasets or gene_coverage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
expand_termC
Expand a CURIE to descendants/ancestors filtered to Census presence.
| Name | Required | Description | Default |
|---|---|---|---|
| curie | Yes | ||
| direction | No | descendants_inclusive | |
| in_census_only | No | ||
| include_counts | No | ||
| facet | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions 'filtered to Census presence' but does not explain what that implies (e.g., whether it modifies the expansion or filters results). There is no indication of read-only or destructive behavior, rate limits, or side effects, which is critical for a tool with 5 parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but not structured. It lacks readability enhancements (e.g., bullet points) for a tool with 5 parameters. The sentence is front-loaded with the core action, but the brevity sacrifices completeness for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and no annotations, the description is woefully incomplete. It fails to explain the purpose of each parameter, the expected output format, or any side effects. The tool's complexity demands a more detailed description to be usable by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds no meaning beyond the raw schema. Parameters like 'facet' and 'include_counts' are unexplained, and the role of 'direction' is only implied by the enum values. The default values alone do not clarify semantic intent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('expand'), the resource ('CURIE'), and the specific context ('descendants/ancestors filtered to Census presence'). This distinguishes it from siblings like 'resolve_term', which likely returns a single definition. However, 'Census presence' is not immediately clear without domain knowledge, preventing 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like 'resolve_term' or 'term_definition'. The description does not mention typical use cases, conditions, or exclusions, leaving the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_snippetC
Runnable Python for a stored plan; pass call_id from a prior response.
| Name | Required | Description | Default |
|---|---|---|---|
| call_id | Yes | ||
| intent | No | anndata |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions 'Runnable Python' hinting at code execution, but does not confirm whether the tool is read-only or destructive, or describe any side effects, authentication needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it is under-specified and fails to provide necessary information. It is not effectively front-loaded with key details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description should compensate but does not explain what the tool returns, its side effects, or how to correctly use the parameters. Context is incomplete for effective usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description only mentions call_id, ignoring the intent parameter entirely. The description adds no meaning beyond the schema, which already provides enum choices for intent. For a tool with 2 parameters, this is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Runnable Python for a stored plan' and mentions passing a call_id from a prior response, which gives a general idea of executing a stored plan. However, it does not specify what 'export' means in terms of output or how it differs from siblings like 'aggregate_expression' or 'count_cells'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool should be used after obtaining a call_id from a prior response, but it does not provide explicit guidance on when to use this tool versus alternatives, or state any prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gene_coverageC
Report whether a list of Ensembl gene IDs is present in Census var.
| Name | Required | Description | Default |
|---|---|---|---|
| gene_ids | Yes | ||
| organism | No | homo_sapiens |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only says 'Report whether... present', implying a boolean output but does not disclose error handling, rate limits, authentication needs, or side effects. Minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is very concise at 12 words, but this brevity sacrifices necessary detail. It is not front-loaded with key information beyond the basic purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations, and no explanation of the result format. The tool's behavior with multiple gene IDs or edge cases is unclear. Incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet description does not mention or explain either parameter (gene_ids or organism). Parameters are left entirely undocumented for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool reports presence of Ensembl gene IDs in Census var. Verb 'Report' is acceptable, and resource is specific. However, 'Census var' is ambiguous and not explained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings like census_summary or list_available_values. No context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_census_versionsA
List available Census versions visible to this server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only says 'visible to this server'. It omits details like whether it's read-only, cached, or requires authentication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that efficiently conveys the tool's purpose without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and a simple purpose, the description is mostly complete but could briefly mention what the listing returns (e.g., version strings).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100%. The description adds no param info, which is acceptable; baseline is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'Census versions', and it distinguishes from sibling tools (e.g., aggregate_expression) which focus on data operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when one needs to know available versions, but it provides no explicit guidance on when to use this tool vs alternatives or any conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_limitsB
Report cap configuration so clients can size their requests.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It implies a read-only, non-destructive operation ('Report'), but offers no details on response format, potential errors, rate limits, or whether any side effects exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It immediately conveys the tool's function and rationale, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no annotations, and no output schema, the description is adequate but minimal. It tells the agent the tool reports configuration limits, but lacks specifics on what fields or constraints are included, which could lead to under- or overestimation of its capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is trivially 100%. The description adds value by explaining the tool's purpose, which is essential given the empty schema. A baseline of 4 is appropriate as the description compensates for the lack of parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific action verb ('Report') and resource ('cap configuration') with a clear rationale ('so clients can size their requests'). It distinguishes itself from sibling tools like 'aggregate_expression' or 'census_summary' by focusing on server limits rather than data exploration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any conditions or prerequisites. The description does not mention when it would be inappropriate or what the tool does not do.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_valuesC
Distinct values for an obs column (discovery before resolve_term).
| Name | Required | Description | Default |
|---|---|---|---|
| column | Yes | ||
| organism | No | homo_sapiens | |
| prefix | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral traits. It only states it lists distinct values, implying a read operation, but misses details like performance limits, error conditions, or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with front-loaded purpose and a contextual hint. Efficient but risks being too terse for agents unfamiliar with the domain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations, and incomplete parameter semantics. The description omits return format, pagination, error handling, and the relationship to the 'obs' concept. Lacks completeness for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no information about what parameters like 'column', 'organism', 'prefix', or 'limit' mean. Agent fully reliant on schema types, which are insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns distinct values for an obs column, and the parenthetical 'discovery before resolve_term' provides context on its role in a workflow. However, 'obs column' is jargon that may not be immediately clear to all agents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage before resolve_term, but does not explicitly state when to use this tool vs siblings like expand_term or term_definition. No guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsC
List datasets matching a structured filter, sorted by cell count.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only mentions sorting by cell count, omitting information about read-only nature, pagination, response format, or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
While extremely concise, the description is under-specified for the tool's complexity. It fails to earn its place by omitting critical context, making it more of a vague statement than an informative guide.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested input schema, no output schema, and many sibling tools, the description is incomplete. It does not explain what a structured filter entails or how to construct it, leaving the agent under-informed for successful invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds no parameter-level details. 'Structured filter' is vague and does not clarify the complex nested schema, leaving the agent to infer parameter usage from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List datasets'), the resource ('datasets'), and key details ('matching a structured filter, sorted by cell count'). It effectively distinguishes the tool from siblings like count_cells and aggregate_expression by focusing on listing with sorting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. It provides no context about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_obsC
Small obs slice + column cardinality (before a big scan).
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | ||
| columns | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions 'preview' hinting at a read operation, but does not specify side effects, permissions, rate limits, or what happens to data. Lacks explicit behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one phrase), which is concise but omits essential information. It is appropriately sized for a quick overview but could benefit from a few more details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex input schema with nested objects and no output schema, the description is severely incomplete. It does not define 'obs', explain the output format, or elaborate on cardinality, leaving agents uninformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'slice' and 'cardinality', loosely relating to filters and limit parameters, but does not clarify their meaning or usage. With 0% schema description coverage, the description fails to compensate adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Small obs slice + column cardinality (before a big scan)' conveys the tool's purpose as a preview tool for a small slice of observations and column cardinality, distinguishing it from siblings like count_cells or gene_coverage. However, it relies on domain jargon and could be more explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before a big scan' implies usage for quick checks prior to larger operations, but no explicit when-to-use or when-not-to-use guidance is provided, nor are alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_termC
Resolve text or CURIE to one term; typed refusal if ambiguous.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| ontology | No | ||
| facet | No | ||
| confirm_ambiguous | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions 'typed refusal if ambiguous' but does not disclose error handling, missing term behavior, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but omits critical parameter details, making it insufficient despite being front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters, no output schema, and no annotations, the description is incomplete. It does not cover behavior for various inputs or return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%. Description only mentions 'text or CURIE', leaving ontology, facet, and confirm_ambiguous parameters completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it resolves text or CURIE to a single term, with a specific behavior for ambiguity. Distinguishes from siblings like expand_term and term_definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. Does not mention prerequisites or contexts where other tools are preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
term_definitionA
Return label, definition, synonyms, IRI for a CURIE.
| Name | Required | Description | Default |
|---|---|---|---|
| curie | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It states what is returned but omits details like error handling (e.g., invalid CURIE), output format, or any side effects. Adequate for a simple lookup but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence (6 words) conveying the tool's purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Absence of output schema and annotations leaves gaps. The description does not cover return structure or edge cases, but the tool's simplicity partly compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'curie' is described as 'a CURIE' but lacks format examples or constraints. With 0% schema description coverage, the description adds minimal beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states the tool returns label, definition, synonyms, and IRI for a CURIE. It clearly identifies the resource and action, distinguishing from similar tools like 'resolve_term' or 'expand_term'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus siblings like 'resolve_term' or 'expand_term'. The context is implied but not clarified.
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.
13 tool updates
v0.1.2- First observed
aggregate_expression - First observed
census_summary - First observed
count_cells - First observed
expand_term - First observed
export_snippet - First observed
gene_coverage - First observed
get_census_versions - First observed
get_server_limits - First observed
list_available_values - First observed
list_datasets - First observed
preview_obs - First observed
resolve_term - First observed
term_definition
TDQS
Each tool targets a distinct operation: aggregation, counting, term resolution, metadata, etc. No two tools overlap in purpose, and descriptions clearly differentiate them.
All tool names follow a consistent snake_case pattern with descriptive verbs or nouns (e.g., aggregate_expression, get_census_versions, resolve_term). No mixing of conventions.
13 tools is well-scoped for a census data server, covering query, metadata, term expansion, and export without being excessive or insufficient.
The toolset covers core census operations: aggregation, counting, term resolution, dataset listing, limits, versions, and export. No obvious gaps for the server's purpose.
Maintenance
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
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
- mcpOAuthio.scispot
Turn any LLM into your lab assistant: search samples, track experiments, analyze data with AI.
Connect AI clients to biomedical data and tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables deep probabilistic analysis of single-cell omics data using scvi-tools through natural language. Supports SCVI for scRNA-seq analysis, SCANVI for cell type annotation, TOTALVI for multi-modal RNA/protein data, and PEAKVI for scATAC-seq analysis.MIT
- AlicenseNot gradedqualityCmaintenanceProvides a natural language interface for scRNA-Seq analysis using the Scanpy library, supporting operations such as data preprocessing, clustering, and visualization. It enables AI agents and clients to perform complex single-cell transcriptomics workflows through the Model Context Protocol.2BSD 3-Clause
- FlicenseNot gradedqualityCmaintenanceEnables natural language interaction for scRNA-Seq analysis including preprocessing, clustering, and visualization using the CellRank library. It allows users and agents to perform complex genomic data tasks through standard MCP clients and frameworks.2-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to query clinical genomics databases, retrieve supporting literature, analyze population genetics, and visualize biological pathways.19MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/MaxMLang/cxg-census-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server