Skip to main content
Glama
mbrummerstedt

secoda-analysis-mcp

Secoda Analysis MCP Server

A read-only Model Context Protocol (MCP) server for exploring and analysing your Secoda data catalog. Designed for business users who need to discover data, look up metric definitions, and understand data lineage — without any risk of modifying the catalog.

Features

  • Zero write access — completely safe to use; nothing in Secoda can be changed

  • AI chat — ask Secoda's AI natural language questions about your data

  • Semantic search — find tables, columns, dashboards, and documentation by keyword

  • Glossary & definitions — browse business term definitions

  • Data lineage — trace where data comes from and where it flows downstream

  • Browse collections & Q&A — explore organised resource groups and previously answered questions

Related MCP server: starrocks-mcp

Tools

Tool

Purpose

ai_chat

Ask Secoda AI a natural language question (supports multi-turn conversations)

search_data_assets

Find tables, columns, charts, and dashboards by keyword

search_documentation

Find docs, glossary terms, and Q&A by keyword

retrieve_entity

Get full details of any entity by its Secoda ID

get_resource

Get full details of a catalog resource (table, column, view) by ID

list_resources

Browse and filter resources using structured criteria

entity_lineage

Trace upstream/downstream data flow for any entity

glossary

Browse all business term definitions in the workspace

list_collections

Browse organised groups of resources

get_collection

Get details of a specific collection

list_questions

Browse previously asked and answered Q&A threads

get_question

Read a specific question and its answer

Requirements

  • Python 3.10+

  • A Secoda account with API access

  • A Secoda API token (read permissions are sufficient)

Setup

1. Get your Secoda API token

Generate a token at Secoda → Settings → API. Read permissions are sufficient.

No manual install needed — your MCP client runs the server automatically via uvx.

Claude Desktop — add to claude_desktop_config.json:

{
  "mcpServers": {
    "secoda-analysis": {
      "command": "uvx",
      "args": ["secoda-analysis-mcp"],
      "env": {
        "API_TOKEN": "your-secoda-api-token"
      }
    }
  }
}

Cursor — add to .cursor/mcp.json:

{
  "mcpServers": {
    "secoda-analysis": {
      "command": "uvx",
      "args": ["secoda-analysis-mcp"],
      "env": {
        "API_TOKEN": "your-secoda-api-token"
      }
    }
  }
}

3. Alternative: pip install

pip install secoda-analysis-mcp

Then replace the uvx block above with "command": "secoda-analysis-mcp" and "args": [].

4. Claude Desktop bundle (.mcpb) — for organisation-wide distribution

A .mcpb (MCP Bundle) is a ZIP archive that Claude Desktop installs via drag-and-drop — no manual config editing required. The bundle auto-installs all Python dependencies on first run; the only prerequisite is Python 3.9+.

Two manifests live in bundle/:

File

Purpose

Git

manifest.template.json

Generic — prompts the user for credentials at install time via Claude's UI

Committed

manifest.json

Org-specific — credentials hardcoded for silent deployment

Gitignored — never commit

Building an org bundle:

# 1. Create your org manifest (one-time setup)
cp bundle/manifest.template.json bundle/manifest.json

Edit bundle/manifest.json and set your values in mcp_config.env:

"env": {
  "API_TOKEN": "your-secoda-api-token",
  "API_URL": "https://your-org.secoda.co/api/v1/",
  "AI_PERSONA_ID": "your-persona-uuid"
}

AI_PERSONA_ID is optional — omit it to use the workspace default persona.

# 2. Build the bundle
chmod +x bundle/build.sh
./bundle/build.sh
# → dist/miinto-secoda-analyst.mcpb  (gitignored)

Distributing: Share dist/*.mcpb with colleagues. They drag-and-drop it onto Claude Desktop → Settings → Developer. Works on macOS and Windows.

Security: bundle/manifest.json and dist/ are both gitignored. Only the credential-free template is committed. Never add credentials to any file tracked by git.

Configuration

Variable

Description

Default

API_TOKEN

Your Secoda API token (required)

API_URL

Secoda API base URL

https://app.secoda.co/api/v1/

AI_PERSONA_ID

Secoda AI persona ID — pins a specific persona for all ai_chat calls. Find it in Secoda → Settings → AI → Personas.

workspace default

Example workflows

Ask a business question

ai_chat(prompt="How is Gross Margin calculated and what tables does it use?")

Find a table and explore its schema

# 1. Find the table
search_data_assets(query="order lines")

# 2. Get full details (columns, description, tags)
get_resource(resource_id="<id-from-search>", truncate_length=None)

Understand data lineage

# Find the entity first
search_data_assets(query="my_important_table")

# Then trace its lineage
entity_lineage(entity_id="<id-from-search>")

License

Apache License 2.0 — see LICENSE for details.


Development

Setup

Clone the repo and install all dependencies (including dev tools) with uv:

git clone https://github.com/mbrummerstedt/secoda-analysis-mcp.git
cd secoda-analysis-mcp
uv sync --extra dev

Copy .env.example to .env and fill in your credentials:

cp .env.example .env

Project structure

secoda-analysis-mcp/
├── src/
│   └── secoda_analysis/        # Main package
│       ├── __init__.py
│       ├── __main__.py         # python -m secoda_analysis entrypoint
│       ├── server.py           # FastMCP server setup and tool registration
│       ├── prompt.py           # MCP system prompt (tool guidance for the LLM)
│       ├── core/
│       │   ├── client.py       # HTTP client with retry logic
│       │   ├── config.py       # Environment variable configuration
│       │   └── models.py       # Pydantic models (filter/sort validation)
│       └── tools/
│           ├── ai_chat.py      # AI chat tool (submit + poll)
│           ├── collections.py  # list_collections, get_collection
│           ├── entity.py       # retrieve_entity, entity_lineage, glossary
│           ├── questions.py    # list_questions, get_question
│           ├── resources.py    # list_resources, get_resource
│           └── search.py       # search_data_assets, search_documentation
├── tests/
│   ├── conftest.py             # Root fixtures (env var defaults)
│   ├── mock/                   # Unit tests — all HTTP calls mocked
│   │   ├── conftest.py         # Shared mock fixtures and response payloads
│   │   ├── test_client.py
│   │   ├── test_models.py
│   │   ├── test_prompt.py
│   │   ├── test_tools_ai_chat.py
│   │   ├── test_tools_collections.py
│   │   ├── test_tools_entity.py
│   │   ├── test_tools_questions.py
│   │   ├── test_tools_resources.py
│   │   └── test_tools_search.py
│   └── integration/            # Integration tests — hit the real Secoda API
│       ├── conftest.py         # Auto-skip when API_TOKEN is not set
│       ├── test_ai_chat.py
│       ├── test_collections.py
│       ├── test_entity.py
│       ├── test_questions.py
│       ├── test_resources.py
│       └── test_search.py
├── pyproject.toml
├── .env.example
└── .python-version

Architecture

LLM / MCP client
      │  MCP protocol (stdio)
      ▼
  server.py  ──── registers tools from tools/*.py
      │
      ├── tools calling Secoda AI MCP endpoint
      │     tools/search.py, entity.py
      │           │
      │           └── core/client.py  call_tool()
      │                     │
      │                     └── POST {API_URL}/ai/mcp/tools/call/
      │
      ├── tools making direct REST calls
      │     tools/resources.py, collections.py, questions.py
      │           │
      │           └── core/client.py  _make_request_with_retry()
      │                     │
      │                     └── GET {API_URL}/resource/... etc.
      │
      └── ai_chat tool (submit + poll)
            tools/ai_chat.py
                  │
                  └── POST/GET {base_url}/ai/embedded_prompt/

All tools are read-only — there are no write, update, or delete operations.

Running tests

Mock tests (no credentials required, fast):

uv run pytest tests/mock/ -v

Integration tests (requires a valid API_TOKEN in your .env):

uv run pytest tests/integration/ -v

Integration tests hit the live Secoda API. The ai_chat tests are slow (30–120s each) as they wait for the AI to respond.

All tests:

uv run pytest -v

Integration tests are automatically skipped when API_TOKEN is not set.

Code style

This project uses Ruff for linting and formatting, and mypy for type checking.

# Lint
uv run ruff check src/ tests/

# Format
uv run ruff format src/ tests/

# Type check
uv run mypy src/

Available Tools

12 tools
ai_chatA

Start an AI chat session in Secoda and wait for the response.

Submits a prompt to the Secoda embedded AI endpoint and polls until the
response is complete. Sends MCP progress notifications at each poll interval
so clients can show elapsed time. Returns the AI's response text along with
the chat ID, which can be passed as `parent` in a follow-up call to continue
the conversation.

Args:
    prompt: The message or question to send to the Secoda AI.
    ctx: MCP context (injected by FastMCP; not part of the tool schema).
    parent: Chat ID of a previous conversation to continue (optional).
        Pass the chat_id from a previous ai_chat response to maintain context.
    persona_id: Persona ID to use for the AI chat (optional).
        Defaults to AI_PERSONA_ID env var if set, otherwise the workspace default persona.
    poll_interval_seconds: Seconds between polling attempts (default: 10).
    timeout_seconds: Maximum seconds to wait for completion (default: 360).

Returns:
    JSON with keys:
        - success: true
        - chat_id: The ID of this chat (use as `parent` in follow-up calls)
        - status: "completed"
        - response_content: The AI's response text

Example:
    # Start a new conversation
    ai_chat(prompt="How do we handle price reductions in GMV calculations?")

    # Continue a previous conversation
    ai_chat(
        prompt="Can you elaborate on the discount logic?",
        parent="0d53d57b-d1ef-4fc2-bc50-fd3fba2fea93"
    )

Error handling:
    - 403: Permission denied - check API token has AI chat permissions
    - 429: Rate limit exceeded - tool retries automatically
    - Timeout: Increase timeout_seconds if the AI takes longer than expected
ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesThe message or question to send to the Secoda AI
parentNoChat ID of a previous conversation to continue. Use the chat_id returned from a previous ai_chat call to maintain conversation context.
persona_idNoPersona ID to use for the AI chat. Defaults to the AI_PERSONA_ID environment variable if set, otherwise the workspace default persona is used.
poll_interval_secondsNoSeconds between polling attempts while waiting for the AI to respond (default: 10)
timeout_secondsNoMaximum seconds to wait for the AI to complete the response (default: 360)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Disclosures beyond annotations: polling with progress notifications, continuation via parent, return structure, error handling (403, 429, timeout), and that ctx is injected by FastMCP. Annotations (openWorldHint=true) are consistent with non-idempotent chat behavior.

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

Conciseness5/5

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

Well-structured: summary line, then parameters with defaults, return format, example, and error handling. Each section is concise and front-loaded. No redundant information.

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

Completeness5/5

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

Complete for a tool with 5 parameters, polling, continuation, and error handling. The description covers all aspects: how to start, continue, handle errors, and what to expect as output. Output schema is implied in the returns section.

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 100%, so baseline is 3. Description adds value by explaining the purpose of each parameter (e.g., parent usage, persona defaults, polling/timeout defaults) and provides usage context beyond schema descriptions.

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

Purpose5/5

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

The description clearly states the verb 'start', resource 'AI chat session', and action 'wait for response'. It distinguishes this tool from sibling tools which are about data retrieval and entity lineage, not AI chat.

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?

Provides explicit context for when to use the tool, including examples for starting and continuing conversations. Error handling with specific HTTP codes and automatic retries is included. No explicit 'when not to use' statement, but sibling tools imply alternatives.

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

entity_lineageA

Retrieve the upstream and downstream lineage of an entity.

Args:
    entity_id: The ID of the entity to get lineage for
    truncate_length: Maximum characters for text fields in results (default: 150)

Returns:
    Entity lineage with text fields truncated to specified length
ParametersJSON Schema
NameRequiredDescriptionDefault
entity_idYesThe ID of the entity to get lineage for
truncate_lengthNoMaximum characters for text fields in results

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 are provided, so the description carries the full burden. It discloses the truncation behavior (truncate_length parameter and return truncation), but does not mention error handling, performance, or permissions. Adequate but minimal.

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

Conciseness4/5

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

The description is short and front-loaded with the main purpose. The Args/Returns section adds structure. It could be slightly more concise, but overall efficient.

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

Completeness3/5

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

The tool has an output schema, but the description only mentions truncation. For a lineage tool, it could specify the direction (upstream/downstream is already stated) or expected structure. The description is adequate but not rich.

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

Parameters3/5

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

Schema coverage is 100%, with both parameters having descriptions. The description repeats the same information (entity_id, truncate_length, default 150), adding no new meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool retrieves 'upstream and downstream lineage' for an entity, using a specific verb and resource. This distinguishes it from sibling tools like get_entity or get_resource which fetch a single entity, not its lineage.

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 explains what the tool does but provides no guidance on when to use it versus alternatives like retrieve_entity or search_data_assets. No explicit when-not or comparison is given.

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

get_collectionA

Retrieve a specific collection by its ID.

Use this to get full details about a collection after finding it via list_collections.

Args:
    collection_id: The unique identifier of the collection
    truncate_length: Maximum characters for text fields in results (default: 150).
        Set to None for full descriptions.

Returns:
    Collection details with text fields truncated to specified length

Example:
    get_collection(collection_id="collection-123")
ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYesThe unique identifier of the collection
truncate_lengthNoMaximum characters for text fields in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses truncation behavior for text fields, default length, and option for full descriptions. It doesn't mention read-only nature, but 'Retrieve' implies it.

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

Conciseness5/5

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

The description is concise, well-structured with purpose, usage, args, returns, and example. No wasted words, front-loaded.

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

Completeness5/5

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

The description fully covers the tool's behavior given an output schema exists. It explains the key nuance of truncation and provides a complete example.

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 100%. The description adds value by explaining 'Set to None for full descriptions' for truncate_length, which is not in the schema's anyOf description.

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

Purpose5/5

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

The description clearly states 'Retrieve a specific collection by its ID' and explicitly distinguishes from sibling tool 'list_collections' by advising to use this after finding the collection via list_collections.

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

Usage Guidelines5/5

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

The description provides explicit context: 'Use this to get full details about a collection after finding it via list_collections.' This tells the agent exactly when to invoke this tool, including a specific alternative.

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

get_questionA

Retrieve a specific question and its answer by ID.

Use this to read the full content of a question and any accepted answers after
finding it via list_questions or search_documentation.

Args:
    question_id: The unique identifier of the question
    truncate_length: Maximum characters for text fields in results (default: 150).
        Set to None to read the full question and answer text.

Returns:
    Question details including title, description, and answers
ParametersJSON Schema
NameRequiredDescriptionDefault
question_idYesThe unique identifier of the question
truncate_lengthNoMaximum characters for text fields in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description must disclose behavior. It clearly indicates a read operation ('Retrieve', 'read'), describes the truncate_length parameter, and mentions the return structure. However, it does not explicitly state that there are no side effects or auth requirements.

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

Conciseness5/5

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

The description is concise with 5 sentences, front-loaded with the primary purpose, and efficiently covers usage, parameters, and return values without unnecessary detail.

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

Completeness5/5

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

Given that an output schema exists (as indicated by context), the description adequately covers the tool's purpose, parameters, and when to use it. It also provides guidance on truncation, making it complete for the tool's complexity.

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 100% (both parameters described), so baseline is 3. The description adds value by explaining the effect of setting truncate_length to None, which provides actionable guidance beyond the schema.

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

Purpose5/5

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

The description explicitly states 'Retrieve a specific question and its answer by ID,' which is a clear verb+resource combination. It differentiates from siblings by mentioning usage after list_questions or search_documentation.

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

Usage Guidelines4/5

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

The description advises using this tool after finding the question via list_questions or search_documentation, providing context. While it doesn't explicitly list when not to use, the guidance is helpful and clear.

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

get_resourceA

Retrieve a specific resource by its ID.

Use this to get full details of a catalog resource (table, column, view, etc.)
after finding it through list_resources or search_data_assets.

Args:
    resource_id: The unique identifier of the resource to retrieve
    truncate_length: Maximum characters for text fields in results (default: 150).
        Set to None when you need full descriptions/definitions.

Returns:
    Resource details with text fields truncated to specified length
ParametersJSON Schema
NameRequiredDescriptionDefault
resource_idYesThe unique identifier of the resource to retrieve
truncate_lengthNoMaximum characters for text fields in results. Set to None for full descriptions/definitions

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It explains truncation behavior and return value, but does not explicitly state that the operation is read-only. However, the action word 'Retrieve' implies no side effects, and the description is otherwise transparent about parameters and results.

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?

Description is concise with structured Args/Returns sections. Each sentence serves a purpose. Could be slightly tighter by removing default mention in description since schema already has default, but overall good.

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

Completeness4/5

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

Given output schema exists and sibling tools context, the description covers usage, parameters, and return value adequately. Missing explicit mention of permissions or rate limits, but these are not critical for a retrieval tool. High completeness for the context.

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

Parameters3/5

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

Schema covers both parameters with descriptions (100% coverage). Description adds context about truncate_length default and setting to None for full descriptions, but this is complementary rather than essential beyond what schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Retrieve a specific resource by its ID' and specifies it is for catalog resources like table, column, view. This distinguishes it from sibling tools like list_resources (listing) and search_data_assets (searching).

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

Usage Guidelines5/5

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

The description explicitly says 'Use this to get full details ... after finding it through list_resources or search_data_assets,' providing clear when-to-use and implicitly when-not-to-use (e.g., not for listing or searching).

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

glossaryA

Retrieve all business term definitions from the workspace glossary.

Args:
    truncate_length: Maximum characters for text fields in results (default: 150)

Returns:
    Glossary with text fields truncated to specified length
ParametersJSON Schema
NameRequiredDescriptionDefault
truncate_lengthNoMaximum characters for text fields in results

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?

With no annotations provided, the description carries the full burden. It discloses the truncation behavior but does not mention that it is a read-only operation, potential performance impact, or any side effects. The behavior is partially transparent.

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

Conciseness5/5

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

The description is concise with only three sentences, each adding value. It uses a clear structure with Args and Returns sections, and front-loads the main action immediately.

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

Completeness4/5

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

For a simple read tool with one optional parameter and an output schema, the description is largely complete. However, it does not mention pagination or size limits for the glossary, which might be important for large glossaries.

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 100%, and the description adds the default value and return structure (truncated fields), which provides additional context beyond the schema alone. The parameter meaning is clear.

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

Purpose5/5

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

The description clearly states the verb 'Retrieve' and the resource 'workspace glossary', and it distinguishes itself from siblings like ai_chat or entity_lineage by focusing on business term definitions.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus alternatives. It lacks context about prerequisites, limitations, or when to prefer glossary over similar tools like list_resources.

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

list_collectionsA

List all collections in the workspace.

Collections are organized groups of related resources (tables, dashboards, documents).
Use this to browse what topic areas and resource groups exist.

Args:
    title: Filter collections by title (optional)
    page: Page number for pagination (default: 1)
    truncate_length: Maximum characters for text fields in results (default: 150)

Returns:
    List of collections with text fields truncated to specified length

Example:
    list_collections(title="Customer")
    list_collections(page=2)
ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoFilter collections by title (optional)
pageNoPage number for pagination
truncate_lengthNoMaximum characters for text fields in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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 explains filtering, pagination, and truncation behavior, but does not disclose whether the operation is read-only (likely), required permissions, or any potential side effects. Adequate but not fully transparent.

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

Conciseness4/5

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

The description is well-structured with Args, Returns, and Example sections. It is front-loaded with the core purpose. Minor redundancy with schema descriptions, but overall efficient.

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

Completeness5/5

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

Given the presence of an output schema (handling return values), the description covers all necessary aspects: purpose, parameters, and usage example. No gaps identified.

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

Parameters3/5

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

Schema description coverage is 100%, so the description adds minimal value beyond repeating parameter info. It provides an example usage, which helps illustrate how parameters combine, but does not explain them in more depth than the schema.

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

Purpose5/5

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

The description clearly states 'List all collections in the workspace' and explains what collections are (organized groups of related resources). It distinguishes from sibling tools like get_collection (single collection) and list_questions/list_resources (different resource types).

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

Usage Guidelines4/5

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

The description says 'Use this to browse what topic areas and resource groups exist,' providing clear context for when to use it. It does not explicitly state when not to use it or mention alternatives, but the purpose is well-defined.

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

list_questionsA

List all questions in the workspace.

Questions in Secoda represent data consumer inquiries that have been asked and
answered by the data team. Use this to find existing answers before asking
a new question.

Args:
    page: Page number for pagination (default: 1)
    truncate_length: Maximum characters for text fields in results (default: 150)

Returns:
    List of questions with text fields truncated to specified length
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
truncate_lengthNoMaximum characters for text fields in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses pagination and truncation behavior, and implies read-only nature. Lacks explicit mention of authentication or performance, but sufficient for a listing tool.

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

Conciseness5/5

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

Concise, front-loaded with main purpose, followed by brief domain context and parameter descriptions. No unnecessary words.

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

Completeness4/5

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

Covers purpose, usage, and parameters. Since output schema exists, return value explanation is adequate. Could add details about ordering or error handling, but overall sufficient.

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 100%, but description adds meaning by explaining that 'page' controls pagination and 'truncate_length' limits text field lengths in results, providing context beyond schema.

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

Purpose5/5

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

Description clearly states 'List all questions in the workspace' with specific verb and resource. Explains what questions are in Secoda, distinguishing from sibling 'get_question'.

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?

Explicitly says 'Use this to find existing answers before asking a new question.' Provides clear usage context but does not explicitly mention when not to use or alternatives like 'get_question'.

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

list_resourcesA

List catalog resources with advanced filtering capabilities.

This endpoint provides precise control over resource queries using structured filters.
Use this when you need exact matching, specific field filtering, or complex queries.

Args:
    filter: FilterOperand (field or logical) for filtering resources
    sort: SortConfig for ordering results
    page: Page number for pagination (default: 1)
    truncate_length: Maximum characters for text fields in results (default: 150)

Returns:
    Paginated list of resources matching the filter criteria

Filter Examples:

    # Single condition - title contains
    filter = {"operator": "contains", "field": "title", "value": "order_lines"}

    # Single condition - entity type
    filter = {"operator": "exact", "field": "native_type", "value": "table"}

    # Find all columns of a specific table
    filter = {"operator": "exact", "field": "parent_id", "value": "table-id-123"}

    # Multiple conditions with AND
    filter = {
        "operator": "and",
        "operands": [
            {"operator": "exact", "field": "native_type", "value": "table"},
            {"operator": "contains", "field": "title", "value": "customer"}
        ]
    }

Sort Examples:

    # Sort by title ascending
    sort = {"field": "title", "order": "asc"}

    # Sort by external_usage descending (most popular first)
    sort = {"field": "external_usage", "order": "desc"}
ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFilter dictionary for filtering resources. Can be either a field filter or logical filter. Field filter example: {"operator": "exact", "field": "title", "value": "my_table"} Logical filter example: {"operator": "and", "operands": [{"operator": "exact", "field": "native_type", "value": "table"}, {"operator": "contains", "field": "title", "value": "order"}]} PARENT/CHILD RELATIONSHIPS (COMMON PATTERN): - Filter by parent_id to find ALL columns of a table: {"operator": "exact", "field": "parent_id", "value": "table-id-123"} Available field operators: "exact", "contains", "in", "is_set" Available logical operators: "and", "or", "not"
sortNoSort configuration dictionary for ordering results. Example: {"field": "title", "order": "asc"} With tie breaker: {"field": "updated_at", "order": "desc", "tie_breaker": {"field": "created_at", "order": "desc"}}
pageNoPage number for pagination
truncate_lengthNoMaximum characters for text fields in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/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 full burden. It details the tool's behavior: listing with filtering, sorting, pagination, and truncation. Filter examples and sort examples are given. No side effects are mentioned, but as a list operation, none are expected.

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

Conciseness3/5

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

The description is long with extensive examples. While valuable, it could be more concise. The 'Args:' section largely repeats schema information. The structure is logical, but the length could be reduced without losing clarity.

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

Completeness5/5

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

Given the tool's complexity (4 parameters, filtering, sorting, pagination) and the presence of an output schema, the description is comprehensive. It covers all needed use cases with examples, making it fully adequate for an AI agent.

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 100%, but the description adds significant value beyond the schema, especially for complex parameters. It provides multiple filter examples (including parent/child relationships) and sort examples, which help an AI agent construct correct parameters. For page and truncate_length, it reinforces defaults already in schema.

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

Purpose5/5

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

The description clearly states 'List catalog resources with advanced filtering capabilities,' specifying the action (list) and resource (catalog resources). It distinguishes itself from siblings like get_resource (single resource) and search_data_assets (broader search) through the description.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this when you need exact matching, specific field filtering, or complex queries,' providing clear guidance on when to use. It does not mention when not to use or direct alternatives like get_resource, but the context of sibling tools is provided.

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

retrieve_entityB

Retrieve an entity from the catalog by ID.

Args:
    entity_id: The ID of the entity to retrieve
    truncate_length: Maximum characters for text fields in results (default: 150).
        Often useful to set to None when you need full descriptions/definitions.

Returns:
    Entity details with text fields truncated to specified length
ParametersJSON Schema
NameRequiredDescriptionDefault
entity_idYesThe ID of the entity to retrieve
truncate_lengthNoMaximum characters for text fields in results. Often useful to set to None when you need full descriptions/definitions

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

Discloses truncation behavior and default value, which is key behavioral context. No annotations provided, so description carries full burden. Lacks details on error handling (e.g., invalid ID) or response structure beyond 'Entity details'.

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

Conciseness5/5

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

Extremely concise: two sentences plus args/returns bullet. Front-loaded purpose, no fluff.

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

Completeness3/5

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

Adequate for a simple retrieval tool with output schema. Explains truncation behavior but misses error states and does not address sibling context. Could be more complete given no annotations.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description rephrases schema descriptions but adds practical note on setting truncate_length to None for full content. Minimal added value beyond 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?

Clearly states it retrieves an entity by ID, with parameters explained. However, does not differentiate from sibling get_* tools like get_collection, get_question, get_resource, which also retrieve specific items by ID. The generic term 'entity' is ambiguous.

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?

Provides truncation usage hints but no guidance on when to use this tool vs alternatives like search_data_assets or list tools. No when-not-to-use or exclusion criteria.

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

search_data_assetsA

Search for data assets in the catalog.

Args:
    query: Search query for finding tables, columns, charts, dashboards
    page: Page number for pagination (default: 1)
    truncate_length: Maximum characters for text fields in results (default: 150)

Returns:
    Search results with text fields truncated to specified length
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query for finding tables, columns, charts, dashboards
pageNoPage number for pagination
truncate_lengthNoMaximum characters for text fields in results

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 are provided. The description states it returns truncated search results but does not explicitly declare it as read-only or disclose any other behavioral traits beyond what the schema implies.

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

Conciseness5/5

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

The description is concise, front-loaded with the purpose, and includes a structured args section. Every sentence adds value without fluff.

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

Completeness4/5

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

Given that an output schema exists and the tool is a simple search, the description covers the essential functionality and parameters. However, it could mention the scope of the catalog or pagination behavior.

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

Parameters3/5

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

The input schema already provides full descriptions for all three parameters. The description adds marginal value by listing defaults, but largely duplicates the schema.

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

Purpose5/5

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

The description clearly states 'Search for data assets in the catalog' and lists specific asset types (tables, columns, charts, dashboards), which distinguishes it from sibling tools like search_documentation and get_resource.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus its siblings. It does not mention context, prerequisites, or any exclusions.

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

search_documentationA

Search for documentation in the catalog.

Args:
    query: Search query for finding documents, questions, glossary terms
    page: Page number for pagination (default: 1)
    truncate_length: Maximum characters for text fields in results (default: 150)

Returns:
    Search results with text fields truncated to specified length
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query for finding documents, questions, glossary terms
pageNoPage number for pagination
truncate_lengthNoMaximum characters for text fields in results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/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 full burden. It discloses that results have text fields truncated to a specified length, but does not mention any behavioral traits like read-only nature, auth needs, or potential side effects. For a search tool, read-only is implied but not stated.

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

Conciseness5/5

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

The description is concise and well-structured with Args and Returns sections. Every sentence serves a purpose, no extraneous information. Front-loaded with the core purpose.

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

Completeness5/5

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

For a search tool with 3 parameters and no output schema, the description is complete. It explains the purpose, parameters (with defaults and constraints), and the return behavior (truncation). No obvious gaps given the tool's complexity.

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

Parameters3/5

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

The input schema has 100% coverage, so baseline is 3. The description repeats the schema's parameter descriptions without adding new semantics, such as query syntax or formatting rules. No additional value beyond the schema.

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

Purpose5/5

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

The description clearly states 'Search for documentation in the catalog', specifying a concrete verb and resource. It distinguishes from sibling 'search_data_assets' which presumably searches data assets, making the purpose unambiguous.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like 'search_data_assets' or when not to use it. The description only states what the tool does, without usage context.

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. 12 tool updatesv0.3.3
    • First observedai_chat
    • First observedentity_lineage
    • First observedget_collection
    • First observedget_question
    • First observedget_resource
    • First observedglossary
    • First observedlist_collections
    • First observedlist_questions
    • First observedlist_resources
    • First observedretrieve_entity
    • First observedsearch_data_assets
    • First observedsearch_documentation

TDQS

A3.8/5.0

Scored across 12 tools

Disambiguation3/5

Most tools have distinct purposes, but 'get_resource' and 'retrieve_entity' overlap significantly, both retrieving a catalog item by ID. This creates ambiguity for an agent about which to use.

Naming Consistency3/5

Most tools follow a verb_noun pattern (e.g., get_collection, list_resources), but 'entity_lineage' and 'glossary' are noun-only names, breaking consistency. The pattern is mostly readable but not uniform.

Tool Count5/5

With 12 tools, the set is well-scoped for a data catalog analysis server. It covers listing, retrieval, search, and AI chat without being bloated.

Completeness4/5

The tools cover core read operations (list, get, search) and AI chat, but miss a dedicated tool to retrieve a single glossary term by ID. For an analysis server, this is a minor gap.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    A read-only MCP server that enables users to query Databricks SQL, browse metadata, and monitor Delta Lake tables. It also supports tracking Databricks Jobs, DLT Pipelines, and cluster metrics through natural language interfaces.
    25
    4
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A read-only MCP server that enables users to query and explore StarRocks databases through AI assistants like Claude. It supports SQL execution, schema discovery, and secure LDAP authentication for data analysis and metadata exploration.
    4
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP server for Microsoft SQL Server that retrieves connection details from AWS Secrets Manager, enabling database exploration and querying via natural language.
    12
    8 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    A read-only MCP server that exposes SQL database access to LLMs, supporting multiple database types, compact columnar results, pagination, and file export.
    6
    17 npm
    MIT