Skip to main content
Glama
ZengZichao

SwissBioPics MCP Server

by ZengZichao

SwissBioPics MCP Server

Version 0.1.0

⚠️ Disclaimer: This is an unofficial, third-party implementation and is not officially maintained by or affiliated with the SIB Swiss Institute of Bioinformatics or the SwissBioPics team. This project is independently developed. All SwissBioPics images and data are copyrighted by SIB.

An MCP (Model Context Protocol) server that provides AI assistants with access to SwissBioPics — a freely available library of interactive biological images for visualizing subcellular location data.


Table of Contents


Related MCP server: Cellosaurus MCP Server

Overview

SwissBioPics is a resource developed by the Swiss-Prot group at the SIB Swiss Institute of Bioinformatics. It provides an interactive library of cell images covering all kingdoms of life — from animal cells (muscle, neuron, epithelial, etc.) to fungal cells, plant cells, archaeal cells, and various bacterial morphologies (rod-shaped, coccus, spiral, etc.).

This MCP server exposes SwissBioPics data and functionality through a set of tools that AI assistants like Claude, ChatGPT, and others can discover and invoke. This enables conversational querying of subcellular location data, cell-type imagery, and biological descriptions.

中文文档: README_zh.md


About SwissBioPics

SwissBioPics is a freely available library of interactive biological images for visualizing subcellular location data. It includes cell types from all kingdoms of life.


Features

This MCP server provides the following capabilities:

  1. 🔍 Search — Search for subcellular locations and cell types using advanced query syntax (AND, OR, NOT, wildcards, fuzzy search, exact phrases).

  2. 💡 Auto-complete — Get search suggestions as users type.

  3. 📋 Cell Type Listing — List all available cell types from the SwissBioPics homepage.

  4. 🔬 Cell Type Details — Retrieve metadata for a specific cell type by ID or name.

  5. 🖼️ SVG Retrieval — Fetch the raw SVG illustration of a cell type.

  6. 📍 Location Extraction — Extract all subcellular locations (SL IDs, names, descriptions) from a cell type's SVG.

  7. 📖 Location Details — Look up the detailed description of a specific subcellular location by its SL identifier.

  8. ℹ️ Project Info — Get general information about the SwissBioPics project.


Prerequisites

  • Python 3.10+ (3.10, 3.11, 3.12, 3.13 all supported)

  • uv — Fast Python package manager (recommended) or pip

  • An MCP-compatible client (e.g., Claude for Desktop, Cursor, VS Code with Copilot Chat, or any other MCP client)


Installation

Option A: Using uv (recommended)

# Clone the repository
git clone https://github.com/ZengZichao/SwissBioPics-MCP.git
cd SwissBioPics-MCP

# Install dependencies with uv
uv sync

Option B: Using pip

git clone https://github.com/ZengZichao/SwissBioPics-MCP.git
cd SwissBioPics-MCP

# Create a virtual environment
python -m venv .venv

# Activate it
# On macOS/Linux:
source .venv/bin/activate
# On Windows:
.venv\Scripts\activate

# Install in development mode
pip install -e .

Configuration

Claude for Desktop

Edit your Claude configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add the server entry:

{
  "mcpServers": {
    "swissbiopics": {
      "command": "uv",
      "args": [
        "--directory",
        "/ABSOLUTE/PATH/TO/SwissBioPics-MCP",
        "run",
        "swissbiopics-mcp"
      ]
    }
  }
}

Windows: Use double backslashes (\\) or forward slashes (/) in the JSON path. Replace /ABSOLUTE/PATH/TO/ with your actual path, e.g., C:/Users/YourName/Projects/SwissBioPics-MCP.

If you installed via pip instead of uv, use:

{
  "mcpServers": {
    "swissbiopics": {
      "command": "python",
      "args": ["-m", "swissbiopics_mcp.server"],
      "cwd": "/ABSOLUTE/PATH/TO/SwissBioPics-MCP"
    }
  }
}

After saving, restart Claude for Desktop.

Cursor

Add to your Cursor MCP settings (Settings → MCP):

{
  "mcpServers": {
    "swissbiopics": {
      "command": "uv",
      "args": [
        "--directory",
        "/ABSOLUTE/PATH/TO/SwissBioPics-MCP",
        "run",
        "swissbiopics-mcp"
      ]
    }
  }
}

VS Code (Copilot Chat)

Add to .vscode/mcp.json in your workspace or user settings:

{
  "servers": {
    "swissbiopics": {
      "command": "uv",
      "args": [
        "--directory",
        "/ABSOLUTE/PATH/TO/SwissBioPics-MCP",
        "run",
        "swissbiopics-mcp"
      ]
    }
  }
}

Generic MCP Client

The server runs on the stdio transport and can be launched by any MCP-compatible client:

# If installed via uv
uv run swissbiopics-mcp

# If installed via pip
python -m swissbiopics_mcp.server

# Direct execution
python src/swissbiopics_mcp/server.py

Available Tools

Tool

Description

search_locations

Search for subcellular locations and cell types using advanced query syntax.

get_search_suggestions

Get auto-complete suggestions for a partial search query.

get_cell_types

List all available cell types on SwissBioPics.

get_cell_type_detail

Get details (title, SVG file, URLs) for a specific cell type by ID or name.

get_cell_svg

Retrieve the raw SVG image content of a cell type.

get_subcellular_locations

Extract all subcellular locations (SL IDs, names, descriptions) from a cell type's SVG.

get_location_detail

Get the detailed description of a specific subcellular location by its SL ID.

get_swissbiopics_info

Get general information about the SwissBioPics project.


Usage Examples

Here are example prompts you can use with your AI assistant after configuring the server:

Search for locations

"Search SwissBioPics for mitochondrion"

"Search for cell types that contain both 'endosome' and 'lysosome'"

List cell types

"What cell types are available on SwissBioPics?"

Get cell type details

"Get details for cell type 8719"

"Show me the Animal cell on SwissBioPics"

Retrieve SVG

"Get the SVG image for the Animal cell"

Explore subcellular locations

"List all subcellular locations in the Animal cell"

"What are the subcellular locations in a Plant cell?"

Look up a specific location

"What is SL0173 in SwissBioPics?"

"Get the description of SL-0243 (Secreted) in the Animal cell"

Get project info

"Tell me about the SwissBioPics project"


Query Syntax

The search_locations tool supports the following query syntax:

Syntax

Meaning

Example

term1 term2

AND — both terms must be present

spindle body

term1 AND term2

Explicit AND

spindle AND body

term1 OR term2

Either term

SL-0073 OR chromatophore

"exact phrase"

Exact phrase match

"golgi stack"

term1 -term2

NOT — exclude term2

endosome -peroxisome

term1 NOT term2

Explicit NOT

endosome NOT peroxisome

prefix*

Wildcard prefix

bact*

term~

Fuzzy search (≈2 typos)

rhoptri~ (finds "rhoptry")

(…)

Grouping / precedence

lumen AND (SL0158 OR wall)


Project Structure

SwissBioPics-MCP/
├── pyproject.toml                 # Project metadata & dependencies
├── README.md                      # English documentation (this file)
├── README_zh.md                   # Chinese documentation
├── LICENSE                        # MIT license
├── .gitignore                     # Git ignore rules
├── src/
│   └── swissbiopics_mcp/
│       ├── __init__.py            # Package metadata
│       └── server.py              # MCP server implementation
└── tests/
    ├── conftest.py                # Pytest configuration
    ├── test_parsers.py            # Unit tests for parsing functions
    └── test_tools.py              # Unit tests for MCP tool functions

Development

Setup

# Clone and install in development mode
git clone https://github.com/ZengZichao/SwissBioPics-MCP.git
cd SwissBioPics-MCP
uv sync

Run the server directly

uv run swissbiopics-mcp

Debug with MCP Inspector

# Using uv
uv run mcp dev src/swissbiopics_mcp/server.py

# Or using npx
npx @modelcontextprotocol/inspector uv run swissbiopics-mcp

Run tests

uv run pytest

License & Citation

License

This MCP server code is licensed under the MIT License — see LICENSE.

The SwissBioPics images and data are licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). When using SwissBioPics images or data, please credit SwissBioPics as the source.

Citation

If you use SwissBioPics in your research, please cite:

SwissBioPics - an interactive library of cell images for the visualization of subcellular location data. Database. PMID: 35411389, DOI: 10.1093/database/baac026.


Acknowledgements

Available Tools

8 tools
get_cell_svgB

Retrieve the raw SVG image content of a cell type.

The SVG contains the full interactive cell illustration with embedded subcellular location data (SL IDs, names, and descriptions as hidden text elements).

Args: cell_identifier: Either a numeric cell ID (e.g. 8719) or a cell-type name (e.g. Animal_cell). You can also pass the SVG file name directly (e.g. Animal_cells.svg).

Returns: The raw SVG XML content as a string (may be large).

ParametersJSON Schema
NameRequiredDescriptionDefault
cell_identifierYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It adds genuine behavioral value by disclosing that the SVG embeds subcellular location data as hidden text elements and that the result may be large. However, it says nothing about error behavior for unknown identifiers, caching, or how the SVG relates to the other location tools.

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 prose is front-loaded with the purpose, then the embedded-data note, then args and returns. The docstring-style Args/Returns scaffolding is slightly redundant given an output schema exists, but it is compact and every line carries 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?

An output schema exists, so the Returns line is unnecessary but harmless. Given a one-parameter tool, the description covers input formats, output nature, and embedded content adequately; only sibling relationships and failure modes are absent.

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?

Schema description coverage is 0% for the single parameter, so the description must compensate, and it does: it enumerates all three accepted forms (numeric ID, cell-type name, or SVG file name) with examples. Usage examples for the name formats are the only thing missing.

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 gives a specific verb and resource: 'Retrieve the raw SVG image content of a cell type.' An agent can distinguish this from get_cell_type_detail (likely text metadata) by the word 'SVG', but the description never explicitly contrasts itself with those siblings, keeping it just short of a 5.

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 statement of when to use this tool versus get_cell_type_detail or get_swissbiopics_info, nor any prerequisites. The accepted identifier formats hint at inputs but provide no selection guidance.

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

get_cell_type_detailA

Get details for a specific cell type by its numeric ID or name.

Args: cell_identifier: Either a numeric cell ID (e.g. 8719) or a cell-type name path (e.g. Animal_cell, Rod-shaped_bacteria:_one_membrane_(Gram+)). Numeric IDs can be found from search results or the cell-type list.

Returns: Cell type title, SVG file name, SVG URL, and a link to the page.

ParametersJSON Schema
NameRequiredDescriptionDefault
cell_identifierYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are present, so the description carries the burden. It discloses the returned payload (title, SVG file name, SVG URL, page link), which implies a read-only lookup, but it never states safety, permission needs, or error behavior for invalid identifiers.

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 Args/Returns structure is front-loaded and easy to scan, and the examples earn their space by disambiguating the two identifier formats. The Returns block is slightly redundant given an output schema exists.

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 single-parameter read tool with an output schema, the essentials are covered: what it fetches, how to address it, and what comes back. Missing only minor edge-case semantics for malformed or ambiguous identifiers.

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?

Schema coverage is 0%, so the description must compensate, and it does: it documents both accepted forms (numeric ID like 8719 and name paths like 'Animal_cell' or 'Rod-shaped_bacteria:_one_membrane_(Gram+)') with concrete examples. It does not cover case sensitivity or ambiguous-name resolution.

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 opens with a specific verb+resource ('Get details for a specific cell type') and immediately scopes the lookup key to a numeric ID or name. It implicitly distinguishes itself from the list-style sibling get_cell_types by specifying a single cell type, but never names an alternative outright.

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?

It tells the agent where identifiers come from ('search results or the cell-type list'), which effectively routes to the sibling search/list tools. It stops short of explicit when-not guidance or a named alternative such as get_cell_svg.

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

get_cell_typesB

List all available cell types on SwissBioPics.

SwissBioPics includes cell types from all kingdoms of life: animal cells (muscle, neuron, epithelial, etc.), fungal cells, plant cells, archaeal cells, and various bacterial morphologies (rod, coccus, spiral, etc.).

Returns: A formatted list of all cell types with their identifiers and URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the return format ('a formatted list with identifiers and URLs') and the domain scope, but says nothing about read-only safety, pagination, rate limits, or ordering. For a simple listing tool the gaps are modest, so a 3 is fair.

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?

Purpose is front-loaded in the first sentence. The enumeration of kingdoms is longer than strictly necessary but earns its place by defining what 'all cell types' actually spans, which helps the agent decide relevance.

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?

An output schema exists, so return values need not be detailed further. With zero params and a clear scope statement, the description is complete enough for an agent to invoke it correctly. Only workflow placement is missing.

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 tool takes zero parameters, so there is nothing for the description to compensate for. Baseline 4 applies.

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?

States a specific verb and resource: 'List all available cell types on SwissBioPics.' The scope ('all') distinguishes it from get_cell_type_detail, though that sibling is not named explicitly. Clear on its own, but lacks explicit sibling differentiation.

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 on when to use this versus get_cell_type_detail or the search tools. No exclusions, prerequisites, or context beyond the implicit assumption that a discovery listing is wanted. The agent must infer the placement in the workflow.

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

get_location_detailA

Get the detailed description of a specific subcellular location.

Subcellular locations in SwissBioPics are identified by SL identifiers (e.g. SL0173 for Mitochondrion). This tool looks up the full description of a location as defined within a cell type's SVG.

Args: sl_id: The subcellular-location identifier (e.g. SL0173). Both SL0173 and SL-0173 formats are accepted. cell_identifier: The cell type to look up within. Defaults to 8719 (Animal cell) which has the most comprehensive set of locations. Can be a numeric ID, name, or SVG file name.

Returns: The location's SL ID, name, and full description.

ParametersJSON Schema
NameRequiredDescriptionDefault
sl_idYes
cell_identifierNo8719

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description carries the full behavioral burden. It does add useful context: the accepted ID formats (SL0173 and SL-0173), the default cell type and why it is the default, and the accepted forms of cell_identifier. It says nothing about failure behavior for unknown IDs or any rate/permission constraints.

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?

Front-loaded with the one-line purpose before the Args/Returns blocks, and each sentence carries information. The Args/Returns sections are somewhat verbose but well structured and easy to scan.

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?

An output schema exists, so the Returns line is a mild redundancy rather than a gap. With both parameters fully explained and the ID scheme clarified, an agent has everything needed to invoke this correctly; only error behavior is left unspecified.

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?

Schema description coverage is 0%, so the description must carry the load, and it does: sl_id is documented with concrete examples and both accepted formats, and cell_identifier is documented with its default, purpose, and the three accepted input forms (numeric ID, name, SVG file name). This meaningfully exceeds the bare 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?

States a specific verb and resource ('Get the detailed description of a specific subcellular location') and pins down the identifier scheme (SL IDs like SL0173). This implicitly separates it from the search/list siblings such as search_locations and get_subcellular_locations, though it never names them explicitly.

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 gives useful selection guidance for the cell_identifier value (defaults to 8719, the most comprehensive set) but offers no when-to-use guidance relative to siblings like search_locations or get_subcellular_locations. Usage context is implied by the 'detail lookup by ID' framing rather than stated.

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

get_search_suggestionsA

Get auto-complete search suggestions for a partial query.

This is useful for interactive search experiences — as the user types, you can call this tool to show matching terms from the SwissBioPics vocabulary.

Args: query: A partial search term (e.g. mito).

Returns: A list of suggested completion terms.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the burden, but this is a low-risk read/suggestion operation and the description does convey the shape of the result ('a list of suggested completion terms'). It does not mention rate limits, permissions, or empty-result behavior, so it is adequate rather than rich.

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 purpose is front-loaded in the first sentence, which is good. But the trailing 'Args:' and 'Returns:' blocks restate the schema and the existing output schema respectively, adding length without new 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 one-parameter suggestion tool with an output schema, the description covers what the tool does, when it is useful, and what the input means. The only gap is sibling differentiation, which the output schema does not need to supply.

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?

Schema coverage is 0% and the single parameter has no schema description, so the description must compensate. It does by defining query as 'a partial search term' and giving a concrete example ('mito'), which is meaningfully more than the bare 'string' type in the 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?

States a specific verb and resource — 'Get auto-complete search suggestions for a partial query' — which an agent can distinguish from the plain search siblings like search_locations. It does not explicitly name a sibling to contrast against, so it stops short of a 5.

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?

It gives the scenario ('useful for interactive search experiences — as the user types'), which implies when to reach for it. However, it never says when NOT to use it or how to choose it over search_locations, so the routing guidance is only implied.

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

get_subcellular_locationsB

Extract all subcellular locations defined in a cell type's SVG.

Each location includes an SL identifier (e.g. SL0173), a human-readable name (e.g. Mitochondrion), and a detailed description.

Args: cell_identifier: Numeric cell ID (e.g. 8719), name path (e.g. Animal_cell), or SVG file name (e.g. Animal_cells.svg).

Returns: A formatted list of all subcellular locations with SL IDs, names, and truncated descriptions.

ParametersJSON Schema
NameRequiredDescriptionDefault
cell_identifierYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose useful behavior — output is a formatted list and descriptions are truncated — and the read-only nature is self-evident from 'Extract' plus the view-only sibling set. It says nothing about error handling for an unresolvable identifier or any limits on the result set, so it falls short of a full behavioral picture.

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 core purpose is front-loaded in the first sentence, and the Args/Returns blocks are compact and skimmable. The Google-style docstring framing is slightly heavier than needed, but nothing is padding.

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

Completeness4/5

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

With an output schema present, the description need not detail return structure, and it still usefully notes the truncated descriptions. Input formats are fully covered. The remaining gap is the absence of any sibling routing or failure-mode note for an invalid cell identifier.

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?

Schema description coverage is 0% for the single parameter, so the description must compensate, and it does: it spells out three accepted identifier forms (numeric ID like 8719, name path like Animal_cell, or SVG file name like Animal_cells.svg) with concrete examples. It stops short of saying how precedence or ambiguity between forms is resolved.

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 names a specific verb and resource — extracting all subcellular locations defined in a given cell type's SVG — and enumerates the fields returned (SL ID, name, description). It is clear on its own, but it never distinguishes itself from siblings like get_cell_type_detail or search_locations, so an agent must infer which one to pick.

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 explicit when-to-use statement and no mention of alternatives such as search_locations (for querying by keyword) or get_location_detail (for a single SL entry). The description implies a lookup-by-cell-identifier pattern but leaves routing entirely to inference.

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

get_swissbiopics_infoA

Get general information about the SwissBioPics project.

Returns a summary including the project description, license, citation, and links to key resources.

Returns: A formatted information string about SwissBioPics.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden, and it does disclose the substantive behavior: this is a parameterless read that returns project description, license, citation, and resource links. It doesn't mention caching, rate limits, or error behavior, but for a static metadata endpoint that is a minor gap.

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?

Front-loaded with the purpose in the first sentence, and the following lines are short and scannable. The 'Returns:' block partially duplicates the declared output schema, which is mild redundancy, but it costs little and nothing is padded.

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?

An output schema exists, so the description is not obliged to explain return values, yet it adds a short summary of them anyway. For a zero-parameter, no-annotation metadata tool, nothing an agent needs to invoke it correctly is missing.

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 tool takes zero parameters, so the baseline of 4 applies. There is nothing for the description to disambiguate beyond the absence of inputs.

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?

States a specific verb and resource ('Get general information about the SwissBioPics project') and enumerates the content of that information (description, license, citation, links). This clearly separates it from the sibling tools, which all query biological data (locations, cell types, SVGs) rather than project metadata. It stops just short of explicitly naming a sibling as the alternative, so a 5 isn't warranted.

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?

Usage is only implied: an agent can infer this is the tool for license/citation/project-provenance questions, but the description never states when to call it versus the data-query siblings, nor any exclusions. Adequate but leaves the routing decision to inference.

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

search_locationsB

Search SwissBioPics for subcellular locations and cell types.

The query supports advanced syntax:

  • spindle body or spindle AND body — both terms must be present (AND)

  • SL-0073 OR chromatophore — either term (OR)

  • "golgi stack" — exact phrase

  • endosome -peroxisome — exclude a term (NOT)

  • bact* — wildcard prefix

  • rhoptri~ — fuzzy search (allows ~2 typos)

  • Parentheses: lumen AND (SL0158 OR wall)

Args: query: Search query string using the syntax described above.

Returns: A formatted summary of matching cell types and their locations.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It implies a read-only search and notes the return is 'a formatted summary of matching cell types and their locations', but says nothing about auth requirements, result limits, pagination, or error behavior on malformed syntax.

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?

Front-loads the purpose, then itemizes syntax with aligned examples and a short Returns note; every line is scannable and earns its place. The syntax block is long but justified by the 0%-coverage parameter, so it is efficient rather than padded.

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?

An output schema exists, so not explaining return values in detail is acceptable, and the description does mention the summary shape. Combined with exhaustive query-syntax documentation, the agent has enough to invoke correctly; only the missing sibling routing keeps it from a 5.

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 coverage is 0% (the schema says only 'Query'), so the description must compensate and does so thoroughly: it documents AND/OR/NOT, exact phrases, wildcard prefix, fuzzy matching, and parentheses, each with a concrete example. This is far beyond what the bare string parameter conveys.

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?

States a specific verb and resource ('Search SwissBioPics for subcellular locations and cell types'), so the agent knows exactly what corpus is queried. It does not name a sibling to differentiate from, which matters given seven closely related tools (get_subcellular_locations, get_search_suggestions), so it falls short of a 5.

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 or when-not-to-use guidance is given despite seven siblings that overlap heavily (e.g., get_search_suggestions for autocomplete, get_subcellular_locations for browsing). The examples teach query syntax, not tool selection, so the agent must infer the routing itself.

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.

  1. 8 tool updatesv0.1.0
    • First observedget_cell_svg
    • First observedget_cell_type_detail
    • First observedget_cell_types
    • First observedget_location_detail
    • First observedget_search_suggestions
    • First observedget_subcellular_locations
    • First observedget_swissbiopics_info
    • First observedsearch_locations

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation5/5

Tools operate at clearly distinct levels: search (free text and autocomplete), browse (list all cell types), detail (cell type, raw SVG, subcellular location list, location detail), and project info. Overlaps are minimal and descriptions clarify granularity (e.g., raw SVG vs. extracted location list).

Naming Consistency5/5

All eight tools use snake_case with a verb_noun structure (mostly get_*, one search_*), which is predictable and consistent. No mixed conventions or confusing abbreviations.

Tool Count5/5

8 tools is well-scoped for a read-only reference database covering search, browse, detail, and raw asset retrieval. Each tool fills a distinct need with no obvious redundancy or missing count pressure.

Completeness4/5

The surface covers search, suggestions, cell-type listing, cell-type detail, raw SVG, subcellular location listing, location detail, and project info. Minor gap: no global/aggregate listing of all subcellular locations across cell types without specifying a cell, but search can approximate this.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers