Skip to main content
Glama
ydb-platform

YDB MCP

Official
by ydb-platform

ydb_query_with_params

Run parameterized SQL queries on YDB databases by providing SQL and JSON parameters. Enables safe, dynamic database operations from MCP-powered AI assistants.

Instructions

Run a parameterized SQL query with JSON parameters

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sqlYes
paramsYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • The async function that executes the 'ydb_query_with_params' tool logic. It receives 'sql' (str) and 'params' (str|dict), parses the parameters via _parse_params_str, executes the query via server.execute(), and serializes the result. Returns TextContent with JSON result or error.
    async def ydb_query_with_params(sql: str, params: str | dict) -> list[TextContent]:
        """Run a parameterized SQL query with JSON parameters."""
        try:
            result_sets = await server.execute(sql, _parse_params_str(params))
            return [TextContent(type="text", text=serialize_ydb_response({"result_sets": result_sets}))]
        except Exception as e:
            return [TextContent(type="text", text=json.dumps({"error": str(e)}, indent=2))]
  • Enum definition of YDBGenericTool.QUERY_WITH_PARAMS = 'ydb_query_with_params', the constant used to identify this tool.
    QUERY_WITH_PARAMS = "ydb_query_with_params"
  • The _parse_params_str helper function used by the handler to parse JSON string (or dict) parameters into a normalized dict for YDB execution.
    def _parse_params_str(params_str: str | dict) -> dict:
        """Parse a JSON params string (or dict) and normalize it for YDB."""
        if not params_str:
            return {}
        if isinstance(params_str, dict):
            return _build_ydb_params(params_str)
        if not params_str.strip():
            return {}
        return _build_ydb_params(json.loads(params_str))
  • Registration of the ydb_query_with_params handler with the server via server.add_tool(), mapping YDBGenericTool.QUERY_WITH_PARAMS to the async function with its description.
    for tool, fn, description in [
        (YDBGenericTool.QUERY, ydb_query, "Run a SQL query against YDB database"),
        (YDBGenericTool.QUERY_WITH_PARAMS, ydb_query_with_params, "Run a parameterized SQL query with JSON parameters"),
        (YDBGenericTool.EXPLAIN, ydb_explain_query, "Explain a SQL query against YDB"),
        (YDBGenericTool.EXPLAIN_WITH_PARAMS, ydb_explain_query_with_params,
         "Explain a parameterized SQL query against YDB"),
        (YDBGenericTool.STATUS, ydb_status, "Get the current YDB connection status"),
        (YDBGenericTool.LIST_DIRECTORY, ydb_list_directory, "List directory contents in YDB"),
        (YDBGenericTool.DESCRIBE_PATH, ydb_describe_path, "Get detailed information about a YDB path"),
    ]:
        if tool in enabled:
            server.add_tool(fn, name=tool.value, description=description)  # type: ignore[arg-type]
  • The call to register_generic_tools(self, type(self).generic_tools) in YDBMCPServer.__init__ which triggers registration of all enabled generic tools including ydb_query_with_params.
    register_generic_tools(self, type(self).generic_tools)
Behavior2/5

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

No annotations are present, so the description must fully disclose behavior. It only mentions JSON parameters but does not state if the query is executed (read/write), any limits, security implications, or whether results are returned. The behavioral transparency is insufficient.

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

Conciseness3/5

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

The description is very concise (one short sentence), which is efficient but underspecified. It earns its place by being clear but lacks sufficient detail for a tool with no annotations.

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 complexity of parameterized SQL, no annotations, and an output schema, the description is incomplete. It does not mention return values (despite output schema existing), expected parameter formats, or relationship to sibling tools.

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?

With 0% schema description coverage, the description must compensate. It mentions 'JSON parameters' but does not explain the 'sql' parameter or the expected format/structure of 'params'. The added meaning is minimal compared to what is 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 clearly states the action (run), resource (parameterized SQL query), and method (with JSON parameters). It distinguishes from siblings like ydb_query (likely non-parameterized) and ydb_explain_query_with_params (explain vs execute).

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_query or ydb_explain_query_with_params. The description lacks any context about preferences, prerequisites, or exclusions.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ydb-platform/ydb-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server