Skip to main content
Glama
ydb-platform

YDB MCP

Official
by ydb-platform

YDB MCP


License PyPI version

Servidor del Protocolo de Contexto de Modelo para YDB. Permite trabajar con bases de datos YDB desde cualquier LLM que admita MCP. Esta integración permite realizar operaciones de base de datos impulsadas por IA e interacciones en lenguaje natural con sus instancias de YDB.

Uso

A través de uvx

uvx, que es un alias para uv run tool, le permite ejecutar varias aplicaciones de Python sin instalarlas explícitamente. A continuación, se muestran ejemplos de cómo configurar YDB MCP usando uvx.

Ejemplo: Uso de autenticación anónima

{
  "mcpServers": {
    "ydb": {
      "command": "uvx",
      "args": [
        "ydb-mcp",
        "--ydb-endpoint", "grpc://localhost:2136",
        "--ydb-database", "/local"
      ]
    }
  }
}

A través de pipx

pipx le permite ejecutar varias aplicaciones desde PyPI sin instalar explícitamente cada una. Sin embargo, primero debe estar instalado. A continuación, se muestran ejemplos de cómo configurar YDB MCP usando pipx.

Ejemplo: Uso de autenticación anónima

{
  "mcpServers": {
    "ydb": {
      "command": "pipx",
      "args": [
        "run", "ydb-mcp",
        "--ydb-endpoint", "grpc://localhost:2136",
        "--ydb-database", "/local"
      ]
    }
  }
}

A través de pip

YDB MCP se puede instalar usando pip, el instalador de paquetes de Python. El paquete está disponible en PyPI e incluye todas las dependencias necesarias.

pip install ydb-mcp

Para comenzar con YDB MCP, deberá configurar su cliente MCP para comunicarse con la instancia de YDB. A continuación, se muestran ejemplos de archivos de configuración que puede personalizar según su configuración y luego colocar en la configuración del cliente MCP. Es posible que también deba ajustar la ruta al intérprete de Python al entorno virtual correcto que tenga instalado el paquete ydb-mcp.

Ejemplo: Uso de autenticación anónima

{
  "mcpServers": {
    "ydb": {
      "command": "python3",
      "args": [
        "-m", "ydb_mcp",
        "--ydb-endpoint", "grpc://localhost:2136",
        "--ydb-database", "/local"
      ]
    }
  }
}

Autenticación

Independientemente del método de uso (uvx, pipx o pip), puede configurar la autenticación para su instalación de YDB. Para hacer esto, pase argumentos especiales de línea de comandos.

Uso de autenticación de usuario/contraseña

Para usar la autenticación de usuario/contraseña, especifique los argumentos --ydb-auth-mode, --ydb-login y --ydb-password:

{
  "mcpServers": {
    "ydb": {
      "command": "uvx",
      "args": [
        "ydb-mcp",
        "--ydb-endpoint", "grpc://localhost:2136",
        "--ydb-database", "/local",
        "--ydb-auth-mode", "login-password",
        "--ydb-login", "<your-username>",
        "--ydb-password", "<your-password>"
      ]
    }
  }
}

Uso de autenticación mediante token de acceso

Para usar la autenticación mediante token de acceso, especifique los argumentos --ydb-auth-mode y --ydb-access-token:

{
  "mcpServers": {
    "ydb": {
      "command": "uvx",
      "args": [
        "ydb-mcp",
        "--ydb-endpoint", "grpc://localhost:2136",
        "--ydb-database", "/local",
        "--ydb-auth-mode", "access-token",
        "--ydb-access-token", "qwerty123"
      ]
    }
  }
}

Uso de autenticación de cuenta de servicio

Para usar la autenticación de cuenta de servicio, especifique los argumentos --ydb-auth-mode y --ydb-sa-key-file:

{
  "mcpServers": {
    "ydb": {
      "command": "uvx",
      "args": [
        "ydb-mcp",
        "--ydb-endpoint", "grpc://localhost:2136",
        "--ydb-database", "/local",
        "--ydb-auth-mode", "service-account",
        "--ydb-sa-key-file", "~/sa_key.json"
      ]
    }
  }
}

Related MCP server: GreptimeDB MCP Server

Herramientas disponibles

YDB MCP proporciona las siguientes herramientas para interactuar con bases de datos YDB:

  • ydb_query: Ejecutar una consulta SQL en una base de datos YDB

    • Parámetros:

      • sql: Cadena de consulta SQL a ejecutar

  • ydb_query_with_params: Ejecutar una consulta SQL parametrizada con parámetros JSON

    • Parámetros:

      • sql: Cadena de consulta SQL con marcadores de posición de parámetros

      • params: Cadena JSON que contiene los valores de los parámetros

  • ydb_explain_query: Explicar una consulta SQL (devuelve el plan de ejecución)

    • Parámetros:

      • sql: Cadena de consulta SQL a explicar

  • ydb_explain_query_with_params: Explicar una consulta SQL parametrizada

    • Parámetros:

      • sql: Cadena de consulta SQL con marcadores de posición de parámetros

      • params: Cadena JSON que contiene los valores de los parámetros

  • ydb_list_directory: Listar el contenido del directorio en YDB

    • Parámetros:

      • path: Ruta del directorio YDB a listar

  • ydb_describe_path: Obtener información detallada sobre una ruta YDB (tabla, directorio, etc.)

    • Parámetros:

      • path: Ruta YDB a describir

  • ydb_status: Obtener el estado actual de la conexión YDB

Creación de servidores MCP personalizados

YDBMCPServer está diseñado para ser heredado. Puede agregar sus propias herramientas sobre una conexión YDB establecida y, opcionalmente, deshabilitar las herramientas genéricas integradas para exponer solo las consultas que su aplicación necesita.

¿Por qué crear un servidor personalizado?

  • Seguridad: restrinja el LLM a un conjunto fijo de consultas de solo lectura en lugar de exponer la ejecución arbitraria de SQL.

  • Especificidad del dominio: proporcione al modelo herramientas que coincidan con su lógica de negocio en lugar de primitivas de base de datos sin procesar.

  • Simplicidad: menos herramientas significan menos ambigüedad para el modelo.

Métodos disponibles

Invalide o llame a estos en su subclase:

Método

Descripción

await self.execute(sql, params=None)

Ejecutar una consulta SQL. Devuelve list[dict], cada dict tiene "columns" y "rows".

await self.explain(sql, params=None)

Devuelve el plan de ejecución de la consulta como un dict.

await self.list_directory(path)

Listar un directorio YDB. Devuelve un dict con "path" y "items".

await self.describe_path(path)

Describir una ruta YDB (esquema de tabla, directorio, etc.). Devuelve un dict.

El argumento params es un dict simple. Las claves sin un prefijo $ lo reciben automáticamente. Para especificar un tipo YDB explícito, use una tupla (value, "TypeName") — p. ej. {"id": (42, "Int64")}.

Control de herramientas genéricas

Use el atributo de clase generic_tools para controlar qué herramientas integradas se registran:

Valor

Efecto

set(YDBGenericTool)

Todas las herramientas integradas (predeterminado)

set()

Sin herramientas integradas: solo las suyas

{YDBGenericTool.QUERY, YDBGenericTool.STATUS}

Solo las herramientas enumeradas

YDBGenericTool es una enumeración de cadenas: valores disponibles: QUERY, QUERY_WITH_PARAMS, EXPLAIN, EXPLAIN_WITH_PARAMS, STATUS, LIST_DIRECTORY, DESCRIBE_PATH.

Ejemplo

# my_server.py
from ydb_mcp import YDBMCPServer, YDBGenericTool, serialize_ydb_response


class OrdersServer(YDBMCPServer):
    """Minimal read-only MCP server for the orders service."""

    generic_tools = {YDBGenericTool.STATUS}  # keep status check for diagnostics

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        @self.tool()
        async def get_order(order_id: str) -> str:
            """Fetch a single order by ID."""
            rows = await self.execute(
                "SELECT * FROM orders WHERE id = $id",
                {"id": order_id},
            )
            return serialize_ydb_response(rows)

        @self.tool()
        async def list_recent_orders(limit: int = 10) -> str:
            """Return the most recent orders."""
            rows = await self.execute(
                "SELECT * FROM orders ORDER BY created_at DESC LIMIT $limit",
                {"limit": limit},
            )
            return serialize_ydb_response(rows)


if __name__ == "__main__":
    OrdersServer(
        endpoint="grpc://localhost:2136",
        database="/local",
    ).run()

Ejecútelo directamente:

python my_server.py

O configúrelo como un servidor MCP en la configuración de su cliente:

{
  "mcpServers": {
    "orders": {
      "command": "python",
      "args": ["my_server.py"]
    }
  }
}

Desarrollo

El proyecto utiliza Make como su herramienta de desarrollo principal, proporcionando una interfaz consistente para tareas de desarrollo comunes.

Comandos de Make disponibles

El proyecto incluye un Makefile completo con varios comandos para tareas de desarrollo. Cada comando está diseñado para agilizar el flujo de trabajo de desarrollo y garantizar la calidad del código:

  • make all: Ejecutar clean, lint y test en secuencia (objetivo predeterminado)

  • make clean: Eliminar todos los artefactos de compilación y archivos temporales

  • make test: Ejecutar todas las pruebas usando pytest

    • Se puede configurar con variables de entorno:

      • LOG_LEVEL (predeterminado: WARNING) - Controlar la verbosidad de la salida de prueba (DEBUG, INFO, WARNING, ERROR)

  • make unit-tests: Ejecutar solo pruebas unitarias con salida detallada

    • Se puede configurar con variables de entorno:

      • LOG_LEVEL (predeterminado: WARNING) - Controlar la verbosidad de la salida de prueba (DEBUG, INFO, WARNING, ERROR)

  • make integration-tests: Ejecutar solo pruebas de integración con salida detallada

    • Se puede configurar con variables de entorno:

      • YDB_ENDPOINT (predeterminado: grpc://localhost:2136)

      • YDB_DATABASE (predeterminado: /local)

      • MCP_HOST (predeterminado: 127.0.0.1)

      • MCP_PORT (predeterminado: 8989)

      • LOG_LEVEL (predeterminado: WARNING) - Controlar la verbosidad de la salida de prueba (DEBUG, INFO, WARNING, ERROR)

  • make run-server: Iniciar el servidor YDB MCP

    • Se puede configurar con variables de entorno:

      • YDB_ENDPOINT (predeterminado: grpc://localhost:2136)

      • YDB_DATABASE (predeterminado: /local)

    • Se pueden pasar argumentos adicionales usando ARGS="your args"

  • make lint: Ejecutar todas las comprobaciones de linting (flake8, mypy, black, isort)

  • make format: Formatear código usando black e isort

  • make install: Instalar el paquete en modo de desarrollo

  • make dev: Instalar el paquete en modo de desarrollo con todas las dependencias de desarrollo

Control de verbosidad de pruebas

De forma predeterminada, las pruebas se ejecutan con una salida mínima (nivel WARNING) para mantener la salida limpia. Puede controlar la verbosidad de la salida de prueba utilizando la variable de entorno LOG_LEVEL:

# Run all tests with debug output
make test LOG_LEVEL=DEBUG

# Run integration tests with info output
make integration-tests LOG_LEVEL=INFO

# Run unit tests with warning output (default)
make unit-tests LOG_LEVEL=WARNING

Niveles de registro disponibles:

  • DEBUG: Mostrar todos los mensajes de depuración, útil para un flujo de prueba detallado

  • INFO: Mostrar mensajes informativos y superiores

  • WARNING: Mostrar solo advertencias y errores (predeterminado)

  • ERROR: Mostrar solo mensajes de error

Available Tools

7 tools
ydb_describe_pathC

Get detailed information about a YDB path

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

With no annotations, the description carries full burden for behavioral disclosure. It only states a read operation but does not describe error behavior (e.g., path not found), rate limits, or authentication requirements. Minimal transparency.

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 a single sentence, which is concise but under-informative. It lacks crucial details that could be added without significant length.

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

Completeness2/5

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

The tool has low complexity with one required parameter and an output schema, yet the description fails to explain what information is returned or any preconditions. It is incomplete for effective agent use.

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

Parameters1/5

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

Schema coverage is 0% and the description adds no meaning to the 'path' parameter. It does not specify format, constraints, or examples. The parameter remains completely undocumented.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'detailed information about a YDB path', distinguishing it from sibling tools like 'ydb_list_directory' (lists directory contents) and 'ydb_explain_query' (explains queries). However, it lacks specificity about what 'detailed information' includes.

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 explicit guidance on when to use this tool versus alternatives. The description does not mention exclusions, prerequisites, or context. Usage is only implied by the tool's purpose.

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

ydb_explain_queryC

Explain a SQL query against YDB

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/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 does not disclose whether the query is executed or just planned, required permissions, or side effects. Basic behavioral traits like read-only nature are omitted.

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 very concise (one sentence, five words). While efficient, it lacks necessary details. It is not verbose, but the conciseness comes at the cost of clarity. It barely meets the minimum threshold.

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

Completeness2/5

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

Given no annotations and low parameter coverage, the description is incomplete. It explains the basic purpose but omits key context such as the output format (though an output schema exists), prerequisites, or behavior. The agent may not be able to invoke correctly without additional information.

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

Parameters2/5

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

The schema has 0% description coverage for the 'sql' parameter. The description adds no extra meaning beyond the parameter type. It does not specify syntax, constraints, or examples, failing to compensate for the lack of schema documentation.

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?

Description clearly states the tool explains a SQL query against YDB. However, it does not differentiate from the sibling tool 'ydb_explain_query_with_params', which also explains queries but with parameters. The description should specify that this tool is for queries without parameters to avoid confusion.

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 the alternatives. There is no mention of when not to use it, such as for parameterized queries where 'ydb_explain_query_with_params' is more appropriate. The agent is left to infer usage context.

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

ydb_explain_query_with_paramsC

Explain a parameterized SQL query against YDB

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYes
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It states 'Explain', implying a read-only operation, but does not disclose any behavioral traits such as side effects, permissions, rate limits, or output format beyond what is in the schema.

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 a single sentence with no extraneous words. However, it is too brief and could include more essential information without being verbose. It is concise but at the expense of completeness.

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

Completeness2/5

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

Given the absence of annotations and only 2 parameters, the description is insufficiently complete. It does not mention that both parameters are required, or provide context on how to supply parameters. An output schema exists but is not referenced.

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

Parameters2/5

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

Schema has 0% description coverage. The description does not explain the format or meaning of the 'params' parameter, which accepts a string or object. This lack of semantic guidance increases ambiguity for the AI agent.

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?

Description uses verb 'Explain' and specifies resource 'parameterized SQL query against YDB', which clearly indicates the tool's action and target. However, it does not differentiate from sibling tool 'ydb_explain_query' which likely does the same without parameters.

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 tool vs ydb_explain_query or other siblings. The description implies it is for queries with parameters but does not explicitly state when it should be preferred.

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

ydb_list_directoryC

List directory contents in YDB

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are present, so the description bears full responsibility for behavioral disclosure. It only states the function without mentioning side effects, read-only nature, error handling, or recursion behavior.

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

Conciseness2/5

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

The description is overly brief at 4 words, lacking structure and essential details. It does not earn its place as it adds no value beyond the tool name.

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

Completeness2/5

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

Given the simple single-parameter schema and presence of an output schema, the description omits critical context such as return types, pagination, or behavior for nonexistent paths, making it insufficient for correct agent invocation.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain the format or semantics of the 'path' parameter (e.g., full vs relative path, supported patterns).

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

Purpose4/5

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

The description clearly states the verb 'List' and resource 'directory contents', but does not differentiate from sibling tools like ydb_describe_path, which might also list path details.

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 ydb_describe_path or ydb_query. There is no context for typical use cases or exclusions.

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

ydb_queryB

Run a read-only SQL query against YDB database

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

The description discloses that the operation is 'read-only', which is a useful safety-related behavioral trait, especially since no annotations are provided. However, it does not mention return behavior, error cases, or limitations, so the description only partially carries the behavioral transparency burden.

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 a single focused sentence with no filler. It front-loads the action and resource, and every word contributes to meaning.

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 is simple, has an output schema to cover return values, and one obvious parameter, so the description is nearly adequate. However, it lacks any usage guidance relative to the sibling tools, leaving an important gap for correct tool selection.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain the 'sql' parameter beyond implying it contains the query text. With only one required parameter, the gap is small, but the description still fails to explicitly document what the parameter should contain.

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 ('Run') and resource ('SQL query against YDB database'), clearly stating the tool's core purpose. However, it does not explicitly distinguish this from the sibling ydb_query_with_params, so sibling differentiation is absent.

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 given about when to use this tool instead of ydb_query_with_params, ydb_explain_query, or the other siblings. The description simply states what it does, leaving the agent to infer selection criteria from the tool name alone.

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

ydb_query_with_paramsC

Run a read-only parameterized SQL query with JSON parameters

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYes
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It clearly discloses the read-only nature of the operation, which is the most critical behavioral trait. However, it does not mention execution semantics, authentication, or error behavior, though the output schema covers result shape.

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 a single, front-loaded sentence with no filler. It is appropriately compact for the tool's simplicity, though it is terse enough that some semantic gaps remain.

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

Completeness2/5

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

Given the lack of annotations, minimal parameter documentation, and presence of close sibling tools, the description is not complete enough for reliable selection and invocation. An agent would need to inspect other tools or examples to know when to choose this one and how to construct valid parameters.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It conveys that parameters are passed as JSON, which slightly clarifies the schema's anyOf string/object type, but it does not explain what 'sql' contains, how params map to query placeholders, or how JSON strings versus objects are handled.

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

Purpose4/5

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

The description states a clear action ('Run'), a specific resource ('read-only parameterized SQL query'), and the input format ('JSON parameters'). It mostly distinguishes itself from siblings like ydb_explain_query_with_params by indicating execution rather than explanation, though it doesn't explicitly name the non-parameterized alternative.

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 given about when to use this tool versus sibling tools such as ydb_query, ydb_explain_query, or ydb_explain_query_with_params. The agent is left to infer selection criteria from the name and one-line description.

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

ydb_statusA

Get the current YDB connection status

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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?

With no annotations, the description carries full burden but only states a read operation. It does not disclose whether the operation is safe, fast, or what happens on failure, but for a simple status check this minimal disclosure is adequate.

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?

A single sentence that is front-loaded and contains no unnecessary words, ideal for a simple status-check tool.

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 is simple with no parameters and an output schema exists. The description covers the basic purpose but could be enhanced by clarifying what 'connection status' encompasses. Still, it is minimally complete.

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

Parameters3/5

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

No parameters exist and schema coverage is 100%, so the baseline of 3 applies. No additional parameter semantics are needed.

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

Purpose5/5

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

The description uses a specific verb 'Get' and identifies the resource 'current YDB connection status', clearly distinguishing it from sibling tools that deal with path description, query execution, and directory listing.

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. The context of checking connectivity is implied but not explicitly stated.

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. 7 tool updatesv0.1.4
    • Changedydb_describe_path2 fields changed
      • changedInput schema / title
        Previous value: -"describe_pathArguments"New value: +"ydb_describe_pathArguments"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Annotations": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "audience": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "enum": [
        +                  "user",
        +                  "assistant"
        +                ],
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Audience"
        +        },
        +        "priority": {
        +          "anyOf": [
        +            {
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Priority"
        +        }
        +      },
        +      "title": "Annotations",
        +      "type": "object"
        +    },
        +    "TextContent": {
        +      "additionalProperties": true,
        +      "description": "Text content for a message.",
        +      "properties": {
        +        "_meta": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Meta"
        +        },
        +        "annotations": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/Annotations"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "text": {
        +          "title": "Text",
        +          "type": "string"
        +        },
        +        "type": {
        +          "const": "text",
        +          "title": "Type",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "text"
        +      ],
        +      "title": "TextContent",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "$ref": "#/$defs/TextContent"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "ydb_describe_pathOutput",
        +  "type": "object"
        +}
    • Changedydb_explain_query3 fields changed
      • removedInput schema / properties / params
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Params"
        -}
      • changedInput schema / title
        Previous value: -"explain_queryArguments"New value: +"ydb_explain_queryArguments"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Annotations": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "audience": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "enum": [
        +                  "user",
        +                  "assistant"
        +                ],
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Audience"
        +        },
        +        "priority": {
        +          "anyOf": [
        +            {
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Priority"
        +        }
        +      },
        +      "title": "Annotations",
        +      "type": "object"
        +    },
        +    "TextContent": {
        +      "additionalProperties": true,
        +      "description": "Text content for a message.",
        +      "properties": {
        +        "_meta": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Meta"
        +        },
        +        "annotations": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/Annotations"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "text": {
        +          "title": "Text",
        +          "type": "string"
        +        },
        +        "type": {
        +          "const": "text",
        +          "title": "Type",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "text"
        +      ],
        +      "title": "TextContent",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "$ref": "#/$defs/TextContent"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "ydb_explain_queryOutput",
        +  "type": "object"
        +}
    • Changedydb_explain_query_with_params4 fields changed
      • addedInput schema / properties / params / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / params / type
        Removed value: -"string"
      • changedInput schema / title
        Previous value: -"explain_query_with_paramsArguments"New value: +"ydb_explain_query_with_paramsArguments"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Annotations": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "audience": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "enum": [
        +                  "user",
        +                  "assistant"
        +                ],
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Audience"
        +        },
        +        "priority": {
        +          "anyOf": [
        +            {
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Priority"
        +        }
        +      },
        +      "title": "Annotations",
        +      "type": "object"
        +    },
        +    "TextContent": {
        +      "additionalProperties": true,
        +      "description": "Text content for a message.",
        +      "properties": {
        +        "_meta": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Meta"
        +        },
        +        "annotations": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/Annotations"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "text": {
        +          "title": "Text",
        +          "type": "string"
        +        },
        +        "type": {
        +          "const": "text",
        +          "title": "Type",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "text"
        +      ],
        +      "title": "TextContent",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "$ref": "#/$defs/TextContent"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "ydb_explain_query_with_paramsOutput",
        +  "type": "object"
        +}
    • Changedydb_list_directory2 fields changed
      • changedInput schema / title
        Previous value: -"list_directoryArguments"New value: +"ydb_list_directoryArguments"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Annotations": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "audience": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "enum": [
        +                  "user",
        +                  "assistant"
        +                ],
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Audience"
        +        },
        +        "priority": {
        +          "anyOf": [
        +            {
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Priority"
        +        }
        +      },
        +      "title": "Annotations",
        +      "type": "object"
        +    },
        +    "TextContent": {
        +      "additionalProperties": true,
        +      "description": "Text content for a message.",
        +      "properties": {
        +        "_meta": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Meta"
        +        },
        +        "annotations": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/Annotations"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "text": {
        +          "title": "Text",
        +          "type": "string"
        +        },
        +        "type": {
        +          "const": "text",
        +          "title": "Type",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "text"
        +      ],
        +      "title": "TextContent",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "$ref": "#/$defs/TextContent"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "ydb_list_directoryOutput",
        +  "type": "object"
        +}
    • Changedydb_query3 fields changed
      • removedInput schema / properties / params
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Params"
        -}
      • changedInput schema / title
        Previous value: -"queryArguments"New value: +"ydb_queryArguments"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Annotations": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "audience": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "enum": [
        +                  "user",
        +                  "assistant"
        +                ],
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Audience"
        +        },
        +        "priority": {
        +          "anyOf": [
        +            {
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Priority"
        +        }
        +      },
        +      "title": "Annotations",
        +      "type": "object"
        +    },
        +    "TextContent": {
        +      "additionalProperties": true,
        +      "description": "Text content for a message.",
        +      "properties": {
        +        "_meta": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Meta"
        +        },
        +        "annotations": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/Annotations"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "text": {
        +          "title": "Text",
        +          "type": "string"
        +        },
        +        "type": {
        +          "const": "text",
        +          "title": "Type",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "text"
        +      ],
        +      "title": "TextContent",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "$ref": "#/$defs/TextContent"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "ydb_queryOutput",
        +  "type": "object"
        +}
    • Changedydb_query_with_params4 fields changed
      • addedInput schema / properties / params / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "type": "object"
        +  }
        +]
      • removedInput schema / properties / params / type
        Removed value: -"string"
      • changedInput schema / title
        Previous value: -"query_with_paramsArguments"New value: +"ydb_query_with_paramsArguments"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Annotations": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "audience": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "enum": [
        +                  "user",
        +                  "assistant"
        +                ],
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Audience"
        +        },
        +        "priority": {
        +          "anyOf": [
        +            {
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Priority"
        +        }
        +      },
        +      "title": "Annotations",
        +      "type": "object"
        +    },
        +    "TextContent": {
        +      "additionalProperties": true,
        +      "description": "Text content for a message.",
        +      "properties": {
        +        "_meta": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Meta"
        +        },
        +        "annotations": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/Annotations"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "text": {
        +          "title": "Text",
        +          "type": "string"
        +        },
        +        "type": {
        +          "const": "text",
        +          "title": "Type",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "text"
        +      ],
        +      "title": "TextContent",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "$ref": "#/$defs/TextContent"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "ydb_query_with_paramsOutput",
        +  "type": "object"
        +}
    • Changedydb_status2 fields changed
      • changedInput schema / title
        Previous value: -"get_connection_statusArguments"New value: +"ydb_statusArguments"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$defs": {
        +    "Annotations": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "audience": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "enum": [
        +                  "user",
        +                  "assistant"
        +                ],
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Audience"
        +        },
        +        "priority": {
        +          "anyOf": [
        +            {
        +              "maximum": 1,
        +              "minimum": 0,
        +              "type": "number"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Priority"
        +        }
        +      },
        +      "title": "Annotations",
        +      "type": "object"
        +    },
        +    "TextContent": {
        +      "additionalProperties": true,
        +      "description": "Text content for a message.",
        +      "properties": {
        +        "_meta": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null,
        +          "title": "Meta"
        +        },
        +        "annotations": {
        +          "anyOf": [
        +            {
        +              "$ref": "#/$defs/Annotations"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "default": null
        +        },
        +        "text": {
        +          "title": "Text",
        +          "type": "string"
        +        },
        +        "type": {
        +          "const": "text",
        +          "title": "Type",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type",
        +        "text"
        +      ],
        +      "title": "TextContent",
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "result": {
        +      "items": {
        +        "$ref": "#/$defs/TextContent"
        +      },
        +      "title": "Result",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "title": "ydb_statusOutput",
        +  "type": "object"
        +}
  2. 2 tool updatesv1.0.0
    • Addedydb_explain_query
    • Addedydb_explain_query_with_params
  3. 5 tool updates
    • First observedydb_describe_path
    • First observedydb_list_directory
    • First observedydb_query
    • First observedydb_query_with_params
    • First observedydb_status

TDQS

B3.3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a clearly distinct purpose: executing vs explaining queries, with vs without parameters, and separate tools for status, directory listing, and path details. No two tools are ambiguous or likely to be confused during selection.

Naming Consistency4/5

All tools share the ydb_ prefix, and most follow a verb_noun pattern (list_directory, describe_path) with a consistent with_params modifier. Minor deviations like the noun-only ydb_status and ydb_query are still predictable and do not hinder readability.

Tool Count5/5

Seven tools is well-scoped for a database server focused on read-only operations, covering queries, explanations, status, and structural navigation without overflow or sparse coverage.

Completeness5/5

The server's read-only scope is fully covered: plain and parameterized queries, explain plans for both, connection status, and directory/path inspection. No obvious missing operations are needed for the intended use case.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables Large Language Models to seamlessly interact with ClickHouse databases, supporting resource listing, schema retrieval, and query execution.
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    A Model Context Protocol server implementation that enables AI assistants to securely interact with GreptimeDB, allowing them to explore database schema, read data, and execute SQL queries through a controlled interface.
    15
    29
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for PostgreSQL, MySQL, and SQLite that gives AI assistants secure database access via the Model Context Protocol.
    37 npm
    4
    MIT