Skip to main content
Glama
Strom-Capital

mcp-server-db2i

Db2 for i MCP Server

CI npm version License: MIT MCP IBM i TypeScript Node.js Docker npm downloads Sponsor

mcp-server-db2i is a Model Context Protocol (MCP) server for IBM Db2 for i (Db2i) on IBM i (AS/400). It enables AI assistants like Claude and Cursor to query and inspect IBM i databases through the IBM i Access ODBC driver, or optionally the JT400 JDBC driver or Mapepire over SSH.

Listed in the MCP Registry as io.github.Strom-Capital/mcp-server-db2i.

Website: db2i-mcp.com, with a blog that explains each release. Docs: docs.db2i-mcp.com.

Architecture

AI clients connect to the MCP Server in one of two ways. Local clients such as Claude Desktop, Claude Code and Cursor can start it as a process and talk over stdio. Remote clients connect over Streamable HTTP at /mcp, signing in with OAuth 2.1 (claude.ai custom connectors) or a bearer token (custom agents). Local clients can also use the HTTP endpoint. The server executes read-only queries against Db2 for i using the IBM i Access ODBC driver (default, no Java), the optional JT400 JDBC driver (DB2I_DRIVER=jt400), or Mapepire over SSH (DB2I_DRIVER=mapepire) for systems where only SSH is reachable. One server can reach several IBM i systems through connection profiles, each with its own driver.

graph LR
    subgraph clients ["AI Clients"]
        local("Claude Desktop, Claude Code, Cursor")
        remote("claude.ai connectors")
        agents("Custom Agents")
    end

    subgraph server ["MCP Server"]
        stdio["stdio"]
        http["Streamable HTTP + Auth"]
        tools[["MCP Tools"]]
        profiles{{"System profiles"}}
        odbc["IBM i Access ODBC"]
        jdbc["JT400 JDBC (optional)"]
        mapepire["Mapepire over SSH (optional)"]
    end

    subgraph prod ["IBM i: prod"]
        db2prod[("Db2 for i")]
    end

    subgraph test ["IBM i: test"]
        db2test[("Db2 for i")]
    end

    subgraph dev ["IBM i: dev"]
        db2dev[("Db2 for i")]
    end

    local -->|local process| stdio
    local -.->|remote URL| http
    remote -->|OAuth 2.1| http
    agents -->|bearer token| http
    stdio & http --> tools
    tools --> profiles
    profiles --> odbc & jdbc & mapepire
    odbc -->|ODBC| db2prod
    jdbc -->|JDBC| db2test
    mapepire -->|SSH| db2dev

Related MCP server: IBM i MCP Server

Features

  • Read-only SQL queries - Execute SELECT statements safely with automatic result limiting, and a query timeout that cancels runaway statements on the IBM i

  • Schema inspection - List all schemas/libraries with optional filtering

  • Table metadata - List tables, describe columns, view indexes and constraints

  • View inspection - List and explore database views

  • Secure by design - Only SELECT queries allowed, credentials via environment variables

  • Docker support - Run as a container for easy deployment

  • HTTP Transport - MCP over Streamable HTTP with token authentication for remote clients and agents

  • OAuth for Remote Clients - Built-in OAuth 2.1 sign-in with the user's own IBM i profile, so claude.ai custom connectors can connect. The sign-in page can carry your company's name, logo, colors and language (Customize for your company)

  • Current MCP spec - Speaks 2026-07-28 and still serves stateless 2025-era clients

  • Dual Transport - Run stdio and HTTP simultaneously

  • Multiple systems - Reach several IBM i systems from one server with DB2I_PROFILES, each with its own driver, credentials, and library allowlist. Tools take an optional system argument. See Multiple systems

  • SSH-only systems - With DB2I_DRIVER=mapepire, reach an IBM i where only SSH is open. Mapepire starts inside the SSH session, with no server install and a host key check. See Using the Mapepire driver

  • Tool selection - Enable or disable individual tools, e.g. a metadata-only mode without execute_query

  • Business SQL tools - Load read-only ERP queries and table notes from YAML, and check the files with mcp-server-db2i validate-tools before the server starts. See Business SQL tools

  • Server instructions - Send the rules no query may miss, such as which flag marks a deleted row, to the model at the start of every session. See Instructions

  • Compact responses - Compact JSON by default, or markdown tables to save tokens

  • Statement checks and DDL - Validate object names, return the SQL that recreates an object, and list what depends on a table

  • Catalog search and profiling - Find tables and columns across libraries, check journaling, and profile a table's row counts and value ranges

  • Column masking - Redact sensitive columns, or show only their last four characters, in query results. See Column masking

  • Query exports - Hand the user a CSV or Excel file of a query's results, as a file path over stdio or a short-lived download link over HTTP. The rows never pass through the model. See Query exports

  • Audit log - Record every tool call and sign-in as one JSON line, with the SQL hashed by default. Optionally record the model's reason for each call (MCP_TOOL_INTENT). See Audit log

  • Tool reload - Reload YAML tool files when they change, with MCP_CUSTOM_TOOLS_WATCH=true

  • Resources and prompts - Read table columns and DDL as MCP resources, and start from prompts that explore a library, explain a table, or write a query. See Resources and prompts

Quick Start

Installation

npm install -g mcp-server-db2i

The default odbc driver needs unixODBC and the IBM i Access ODBC Driver on the machine. No Java is needed. The other drivers' packages are not installed by default, so add them next to the server:

npm install -g mcp-server-db2i node-jt400              # DB2I_DRIVER=jt400, needs a JDK to install and a JRE to run
npm install -g mcp-server-db2i @ibm/mapepire-js ssh2   # DB2I_DRIVER=mapepire, when only SSH reaches the IBM i

With npx, pass them with -p, for example npx -y -p mcp-server-db2i@latest -p node-jt400 mcp-server-db2i. See Installing the jt400 and mapepire packages.

Or with Docker:

docker build -t mcp-server-db2i .                  # odbc image (amd64; add --platform linux/amd64 on arm64)
docker build --target jt400 -t mcp-server-db2i .   # jt400 image (builds natively on arm64)

Configuration

Create a .env file with your IBM i credentials:

DB2I_HOSTNAME=your-ibm-i-host.com
DB2I_USERNAME=your-username
DB2I_PASSWORD=your-password
DB2I_SCHEMA=your-default-schema  # Optional

Client Setup

Add to your MCP client config (e.g., ~/.cursor/mcp.json):

{
  "mcpServers": {
    "db2i": {
      "command": "npx",
      "args": ["-y", "mcp-server-db2i@latest"],
      "env": {
        "DB2I_HOSTNAME": "${env:DB2I_HOSTNAME}",
        "DB2I_USERNAME": "${env:DB2I_USERNAME}",
        "DB2I_PASSWORD": "${env:DB2I_PASSWORD}"
      }
    }
  }
}

This uses environment variable expansion to keep credentials out of config files. Set the variables in your shell profile (~/.zshrc or ~/.bashrc).

See the Client Setup Guide for Cursor, Claude Desktop, Claude Code, and Docker setup options.

Available Tools

Tool

Description

execute_query

Execute read-only SELECT queries

export_query

Write every row of a read-only query to a CSV or XLSX file: a path over stdio, a short-lived download link over HTTP. Off unless EXPORT_ENABLED is set

list_schemas

List schemas/libraries (with optional filter)

list_tables

List tables in a schema (with optional filter)

search_tables

Find tables by name or description across libraries

search_columns

Find columns by name or description across libraries

describe_table

Get detailed column information

list_views

List views in a schema (with optional filter)

list_indexes

List SQL indexes for a table

get_table_constraints

Get primary keys, foreign keys, unique constraints

list_routines

List SQL procedures and functions in a library, with language, external program, and SQL data access

describe_routine

Parameters, return value or result columns, and a call template for a procedure or function

validate_query

Check a statement without running it, including catalog names

get_object_ddl

Return the SQL DDL that recreates an object

get_related_objects

List objects that depend on a table

get_journal_info

List journal, images, and primary key per table, and flag tables a replication tool cannot read

index_advice

List the indexes the query optimizer asked for in a library, merged and ranked by temporary index use

profile_table

Row count, last change, and per-column distinct and null counts from stored statistics or a scan

get_business_context

List business descriptions, row filters and relations loaded from YAML

search_ibmi_services

Find IBM i services by keyword or category, with the release that added each one and an example query

Filter Syntax

The list tools support pattern matching:

  • CUST - Contains "CUST"

  • CUST* - Starts with "CUST"

  • *LOG - Ends with "LOG"

Resources and prompts

Clients that support MCP resources can read a table's context without a tool call, and complete library and table names as you type.

Resource

Contents

Registered when

db2i://{schema}/{table}

Columns from the catalog, plus the YAML business description, column notes, and relations

describe_table is enabled

db2i://{schema}/{table}/ddl

SQL from QSYS2.GENERATE_SQL that recreates the table, view, or alias

get_object_ddl is enabled

db2i://business-context

Every annotation loaded from MCP_CUSTOM_TOOLS

get_business_context is enabled

resources/list offers the annotated tables, for example db2i://MYLIB/ORDERS. Percent-encode # and other reserved characters in names (ORD%23X for ORD#X). A library outside QUERY_ALLOWED_SCHEMAS is rejected with the same message execute_query gives, and completion offers only allowed libraries. Reads and completions that query IBM i count against the rate limit, and reads are written to the audit log. Completion fetches a library's name list once and reuses it for 60 seconds, so typing a name costs one query rather than one per keystroke.

Prompt

Arguments

What it asks for

explore_library

schema

List the tables, describe the central ones, and summarize how they join

explain_table

schema, table

Explain rows, columns, keys, and relations in plain language

write_query

question, schema, table

Write one SELECT from the table's real columns and YAML relations, then validate and run it when those tools are enabled

A prompt is listed only when the tools it tells the model to call are enabled: explore_library needs list_tables and describe_table, and the other two need describe_table. None of them asks for a write.

Use cases

I've used this server on projects where the source system was the Iptor DC1 ERP on IBM i. The same patterns work with any IBM i ERP.

  • Building REST APIs - The agent finds the ERP tables and keys, checks its SQL with validate_query, tests it on sample rows, and then writes the endpoint.

  • ETL and ELT pipelines for BI - Profile source tables, generate staging DDL with get_object_ddl, and draft incremental extracts and code mappings for the warehouse.

  • Near-real-time replication to BI - Check which tables are journaled, and with which images, before a journal-based tool such as Fivetran streams changes to the warehouse.

  • Ad-hoc analysis - Connect Claude or Cursor directly to the ERP and ask business questions in plain language, with vetted Business SQL tools and column masking for sensitive fields.

See Use cases for sample prompts and the guardrails that go with each one.

Example Usage

Once connected, you can ask the AI assistant:

  • "List all schemas that contain 'PROD'"

  • "Show me the tables in schema MYLIB"

  • "Describe the columns in MYLIB/CUSTOMERS"

  • "What indexes exist on the ORDERS table?"

  • "Run this query: SELECT * FROM MYLIB.CUSTOMERS WHERE STATUS = 'A'"

  • "Find the order header and line tables in MYLIB and write a GET /orders/:orderNo endpoint"

  • "Draft an incremental extract of MYLIB.ORDERHDR rows changed since yesterday"

Documentation

Guide

Description

Tools, resources, and prompts

Built-in tools, filter syntax, MCP resources, and prompts

HTTP Transport

HTTP API, auth, and protocol versions

Configuration

All environment variables and driver options

Security

Credentials, rate limiting, query validation

Business SQL tools

YAML tools for orders, ledgers, and master data

Use cases

REST APIs, BI pipelines, replication, and ad-hoc analysis

Client Setup

Cursor, Claude, Claude Code setup

Docker Guide

Container deployment

Development

Contributing and local setup

Compatibility

  • IBM i V7R3 and later (V7R5 recommended)

  • validate_query and the execute_query parse check need QSYS2.PARSE_STATEMENT (IBM i 7.3 with Db2 PTF group SF99703 level 3, or 7.4 and later)

  • get_related_objects needs IBM i 7.3 Technology Refresh 9, IBM i 7.4 Technology Refresh 3, or a later release

  • get_journal_info needs the journal columns of QSYS2.OBJECT_STATISTICS (IBM i 7.3 Technology Refresh 2 or later)

  • search_ibmi_services needs QSYS2.SERVICES_INFO, which ships with the Db2 for i PTF group

  • The cause and recovery on a failed statement come from SYSTOOLS.SQLCODE_INFO. Without it, errors return the SQLSTATE, SQLCODE and message only

  • Node.js 22 or higher

  • unixODBC with the IBM i Access ODBC Driver for the default odbc driver, a JDK at install time and a JRE 11 or higher at runtime for the optional jt400 driver, or SSH access and Java 8 or higher on the IBM i for the optional mapepire driver (see Database Drivers)

  • MCP spec 2026-07-28, plus stateless clients from the 2025-era revisions (through 2025-11-25)

  • IBM ibmi-mcp-server - IBM's official MCP server for IBM i systems. Offers YAML-based SQL tool definitions and AI agent frameworks. Requires Mapepire. This project's mapepire driver uses Mapepire's SSH mode, which needs no Mapepire server running on the IBM i.

Contributing

Contributions are welcome! See the Development Guide for setup instructions.

License

MIT License - see LICENSE for details.

Trademarks

IBM, IBM i and Db2 are trademarks of International Business Machines Corporation. This project is not affiliated with or endorsed by IBM.

Acknowledgments

Available Tools

19 tools
describe_routineDescribe RoutineA
Read-onlyIdempotent

Describe an SQL procedure or function from QSYS2.SYSPARMS: parameters in order with mode, data type, and default; the return value of a scalar function; and the result columns of a table function. An overloaded name returns every overload unless specific_name picks one. call_template is a statement with a ? marker per parameter. callable_with_execute_query says whether execute_query can run it: procedures (CALL) and functions that modify SQL data cannot, and note says why. Uses the system's default schema if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRoutine name. Required unless specific_name is given.
schemaNoSchema (library) containing the routine. Uses the system's default schema if not provided.
specific_nameNoSpecific name of one overload, from list_routines.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
causeNoWhy the statement failed. &1-style placeholders stand for values in error.
countNo
errorNo
schemaNo
sqlcodeNoSQLCODE of the failed statement, such as -204
successYes
recoveryNoWhat to change before trying again
sqlstateNoSQLSTATE of the failed statement
truncatedNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/closed-world annotations, it discloses non-obvious behavior: overloaded names return every overload, call_template uses a ? marker per parameter, and procedures (CALL) plus SQL-data-modifying functions cannot be run via execute_query, with note explaining why. That is substantive operating context the annotations do not provide.

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 dense but front-loaded, leading with what it returns before qualifying details. Each clause carries information, though the return-value enumeration is partly redundant given the output schema.

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 3-parameter read tool with an output schema, the description covers everything an agent needs: source catalog, overload semantics, execution eligibility, and default-schema fallback. Nothing required for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning: the name/specific_name mutual-exclusion rule is restated and default-schema fallback is confirmed. It does not add format or syntax detail beyond that.

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 opens with a specific verb and resource tied to a concrete source (QSYS2.SYSPARMS) and enumerates exactly what is described: parameter mode/type/default, scalar return value, and table-function result columns. This clearly separates it from describe_table and list_routines.

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

Usage Guidelines4/5

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

It states when the overload behavior applies ('An overloaded name returns every overload unless specific_name picks one') and routes execution decisions to callable_with_execute_query, naming execute_query as the related sibling. It stops short of explicitly saying to call list_routines first to obtain a specific_name, though the schema hints at it.

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

describe_tableDescribe TableA
Read-onlyIdempotent

Get detailed column information for a specific table including data types, lengths, nullability, defaults, and CCSID. Uses the system's default schema if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name to describe
schemaNoSchema (library) name containing the table. Uses the system's default schema if not provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
filtersNoRow filters most queries on this table need, such as leaving out deleted rows
successYes
relationsNo
business_descriptionNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description usefully adds the default-schema fallback and the fact that CCSID metadata is included, but says nothing about failure modes (e.g., unknown table/schema) or result shape, and an output schema exists anyway.

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?

Two front-loaded sentences with no filler: the purpose and returned attributes come first, then the schema-default caveat. Slightly list-heavy, but every clause carries information.

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

Completeness4/5

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

For a two-parameter read tool with full schema coverage, an output schema, and annotations covering the safety profile, the definition is nearly complete. It could still note that the table must already exist or how a missing schema resolves, but no critical invocation detail is missing.

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% and both parameters (table, schema) are already documented in the schema, including the same default-schema note. The description adds no format, qualification, or naming-convention detail beyond what the structured fields provide, so baseline 3 applies.

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?

States a specific verb ('Get') and resource ('detailed column information for a specific table') and enumerates the returned attributes (data types, lengths, nullability, defaults, CCSID), which clearly separates it from siblings like list_tables, get_object_ddl, or get_table_constraints.

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 implies the use case (inspecting one table's column structure) but never states when to prefer this over get_object_ddl, search_columns, or list_tables, nor any conditions or exclusions. The only guidance given is the default-schema fallback behavior.

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

execute_queryExecute SQL QueryB
Read-onlyIdempotent

Execute a read-only SQL SELECT query against the IBM Db2i database. Only SELECT statements are allowed for security. Results are limited by default to prevent large result sets.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesSQL SELECT query to execute
limitNoMaximum number of rows to return (default: QUERY_DEFAULT_LIMIT, max: QUERY_MAX_LIMIT)
paramsNoQuery parameters for prepared statement

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
causeNoWhy the statement failed. &1-style placeholders stand for values in error.
errorNo
sqlcodeNoSQLCODE of the failed statement, such as -204
successYes
recoveryNoWhat to change before trying again
rowCountNo
sqlstateNoSQLSTATE of the failed statement
warningsNoTell the user these, such as columns the driver rounded
truncatedNoTrue when the result stopped at limitApplied and more rows match
violationsNo
limitAppliedNo
skippedFiltersNoAnnotated tables whose row filter, such as leaving out deleted rows, the query does not use. See warnings

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered structurally. The description adds two useful behavioral facts beyond the annotations: the SELECT-only security restriction and that result sets are capped by default. It does not disclose the actual default limit value, failure behavior, or timeout characteristics.

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?

Three short sentences, front-loaded with the core action and immediately followed by the key constraint. Every sentence carries information, though the final sentence is slightly redundant with the limit parameter already described in the schema.

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?

An output schema exists, so return-value explanation is not required. However, for a query-execution tool surrounded by validate_query and schema-introspection siblings, the description omits error-handling expectations and any guidance on validating queries first, leaving minor gaps for correct invocation in a workflow.

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 sql, limit, and params are already documented in the schema, which sets the baseline at 3. The description adds only marginal meaning for 'limit' by noting results are limited by default, but it does not explain parameter binding syntax for 'params' or the practical impact of the default cap.

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 specific verb and resource ('Execute a read-only SQL SELECT query against the IBM Db2i database'), making the operation instantly recognizable. It does not, however, explicitly distinguish itself from the sibling validate_query, which an agent might reasonably consider for the same SQL text.

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

Usage Guidelines3/5

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

It implies usage through the constraint 'Only SELECT statements are allowed for security,' which tells the agent this is for querying rather than DDL/DML. There is no explicit when-to-use clause and no mention of when to prefer validate_query, list_tables, or search_tables instead.

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

get_business_contextGet Business ContextA
Read-onlyIdempotent

List business entities, row filters most queries need (such as leaving out deleted rows), table and column descriptions, and relations that the catalog does not declare as foreign keys. Filter by entity or table. Omit both to return every annotation loaded from MCP_CUSTOM_TOOLS. An unknown entity name falls back to names that partly match it, and when nothing matches, the result lists the loaded entity names.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableNoTable name, or SCHEMA.TABLE
entityNoEntity name, for example sales_order

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
hintNoWhat to call next when the filters did not match exactly
countNo
errorNo
successYes
partial_matchNoTrue when no entity had the requested name and data holds entities whose names partly match it
available_tablesNoEvery annotated SCHEMA.TABLE, when the table filter matched nothing
available_entitiesNoEvery loaded entity name, when nothing matched the filters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive). The description adds genuinely useful behavior beyond them: the MCP_CUSTOM_TOOLS data source, fuzzy fallback on unknown entity names, and the empty-result fallback that lists loaded entity names. It does not cover output shape, but an output schema exists.

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

Conciseness4/5

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

Front-loaded with what is returned, then filtering, then edge-case behavior. It is information-dense and every sentence carries weight, though the first sentence is a long run-on list that could be tightened slightly.

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

Completeness4/5

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

With an output schema present, return values need not be described, and the description covers source, filtering, and fallback behavior adequately for a 2-param read-only lookup. Only the explicit sibling-routing guidance is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description earns extra credit by explaining the interaction between the two params: filter by either entity or table, omit both to return everything, and unknown entity names trigger partial matching rather than failure.

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

Purpose4/5

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

States a specific verb (List) and enumerates the resource types returned: business entities, row filters, table/column descriptions, and non-FK relations. The phrase 'relations that the catalog does not declare as foreign keys' implicitly distinguishes it from get_table_constraints, though it does not name that sibling outright.

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

Usage Guidelines3/5

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

Usage is implied rather than stated — 'row filters most queries need' hints it belongs in query-construction workflows, and the filter/omit semantics are explained. But it never says when to prefer this over describe_table, get_table_constraints, or get_related_objects, so the agent must infer the boundary.

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

get_journal_infoGet Journal InfoA
Read-onlyIdempotent

List the physical data files in a library with their journal, journal library, journal images, omitted entries, and whether they have a primary key, using QSYS2.OBJECT_STATISTICS. needs_attention is true when a table is not journaled, or has no primary key and does not journal both images, which journal-based replication tools need. Requires IBM i 7.3 Technology Refresh 2 or later.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Capped by QUERY_MAX_LIMIT.
filterNoFilter pattern for table names. Use * as wildcard. Example: "ORDER*" matches tables starting with ORDER
schemaNoSchema (library) to inspect. Uses the system's default schema if not provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
schemaNo
successYes
truncatedNo
needsAttentionNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare it as a safe, idempotent read (readOnlyHint, idempotentHint, destructiveHint: false, openWorldHint: false). The description adds valuable context beyond that: it explains the computed 'needs_attention' flag, what conditions set it, and why it matters (journal-based replication). It also notes the OS version requirement, which is a meaningful operational constraint.

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?

Three sentences, front-loaded with the core purpose. Every sentence earns its place: the first describes the output, the second explains the needs_attention flag, and the third states the version requirement. No redundancy.

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?

An output schema exists, so return values need not be explained. Annotations cover the safety profile. The description provides the necessary domain context (what needs_attention means, replication use case, IBM i version) and the underlying API, making it complete for correct invocation.

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 schema fully documents the three parameters (limit, filter, schema). The description adds no parameter-level syntax or format details. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource: 'List the physical data files... with their journal...'. It names the underlying IBM i API (QSYS2.OBJECT_STATISTICS) and the exact fields returned. It doesn't explicitly differentiate from siblings like list_tables or describe_table, but the domain specificity is high.

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 the semantics of needs_attention and its relevance to 'journal-based replication tools', which implies a use case. However, it doesn't state when to use this tool versus alternatives like list_tables or describe_table, nor does it mention exclusions or prerequisites beyond the OS version.

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

get_object_ddlGet Object DDLA
Read-onlyIdempotent

Return the SQL DDL that recreates a database object, using QSYS2.GENERATE_SQL. Does not run the generated statements. Requires IBM i 7.3 or later.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesObject type: TABLE, VIEW, INDEX, ALIAS, TRIGGER, FUNCTION, PROCEDURE, or SEQUENCE
objectYesObject name
schemaNoSchema (library) that contains the object. Uses the system's default schema if not provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
ddlNo
typeNo
errorNo
objectNo
schemaNo
successYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: the output is DDL only and is not executed, and it carries a platform version requirement (IBM i 7.3+).

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?

Three short, front-loaded sentences with no filler. The core action comes first, then the non-execution caveat, then the version requirement.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description supplies the mechanism and version prerequisite; only the routing against sibling tools is absent, which is a minor gap for this fairly self-contained tool.

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%, with an enum on 'type' and clear text on 'object' and 'schema', so the schema does the heavy lifting. The description adds no parameter detail (e.g., format of 'object', qualified name handling), matching the baseline 3 when coverage is complete.

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 specific verb and resource: return the SQL DDL that recreates a database object, and names the underlying mechanism (QSYS2.GENERATE_SQL). This is clearly distinct from metadata-oriented siblings like describe_table, though no sibling is named explicitly to sharpen the contrast.

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

Usage Guidelines3/5

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

It implies usage via a behavioral caveat ('Does not run the generated statements') and a version prerequisite ('Requires IBM i 7.3 or later'), but never states when to choose this over describe_table or execute_query, nor any explicit exclusions. Adequate context, but no alternative routing.

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

get_table_constraintsGet Table ConstraintsB
Read-onlyIdempotent

Get all constraints (primary keys, foreign keys, unique constraints) for a specific table. Uses the system's default schema if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name to get constraints for
schemaNoSchema (library) name containing the table. Uses the system's default schema if not provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
successYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is fully covered by structured data. The only extra behavioral fact the description offers, the default-schema fallback, is duplicated verbatim in the schema, and there is no output schema explanation needed since one exists. A 3 reflects modest added value over annotations.

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?

Two short sentences, front-loaded with the core action and the return contents, with the schema-default caveat last. No filler or redundancy beyond the minor overlap with the schema text.

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

Completeness4/5

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

With annotations covering safety, an output schema covering return values, and 100% schema description coverage on both parameters, the description is sufficient for correct invocation. The only omission is disambiguation from sibling metadata tools, which keeps it from a 5.

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 both parameters ('table' and 'schema') are fully documented in the schema. The description's mention of the default schema fallback restates the schema's own wording rather than adding format, casing, or qualification semantics. Baseline 3 is appropriate.

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 uses a specific verb and resource ('Get all constraints ... for a specific table') and enumerates the constraint types returned (primary keys, foreign keys, unique constraints), so an agent knows exactly what this returns. It does not differentiate itself from adjacent siblings like list_indexes or describe_table, which also expose table metadata, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisites, and no named alternative. The implied context (you need constraint metadata for one table) is inferable from the sibling list, but the description itself does not route the agent between get_table_constraints, describe_table, and list_indexes.

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

index_adviceIndex AdviceA
Read-onlyIdempotent

List the indexes the query optimizer asked for on the tables of a library, from the IBM i index advisor (QSYS2.SYSIXADV). Rows with the same table, key columns, and index type are merged into one, with counts summed and reason codes described. Sorted by mti_used, then times_advised: advice where the optimizer kept building and reusing a maintained temporary index (MTI) is the strongest signal. key_columns are in CREATE INDEX order and can end in DESC. last_advised and since are in the system's local time. This tool only reads the advice; it does not create indexes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Capped by QUERY_MAX_LIMIT.
sinceNoOnly advice last given on or after this date or timestamp, in the IBM i system's local time with no time zone. Example: "2026-01-31" or "2026-01-31 08:00:00"
tableNoTable name. Omit for every table in the library.
schemaNoSchema (library) whose tables to read advice for. Uses the system's default schema if not provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
causeNoWhy the statement failed. &1-style placeholders stand for values in error.
countNo
errorNo
sinceNo
tableNo
schemaNo
sqlcodeNoSQLCODE of the failed statement, such as -204
successYes
recoveryNoWhat to change before trying again
sqlstateNoSQLSTATE of the failed statement
truncatedNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: it discloses row-merging behavior with summed counts, sort order (mti_used then times_advised), CREATE INDEX column ordering with possible DESC suffix, local-time semantics for last_advised/since, and the explicit constraint that no indexes are created. This is exactly the behavioral context an agent needs.

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

Conciseness4/5

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

Front-loaded with purpose, then ordered into aggregation, sorting, column format, time semantics, and the read-only guarantee. Dense but every sentence adds distinct information; only the time-zone sentence is arguably redundant with the schema.

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

Completeness4/5

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

With an output schema present, return values need not be explained, yet the description still usefully characterizes the shape of results (merged rows, reason codes, sort order) and the read-only scope. Scope, filters, and interpretation are covered; only explicit sibling routing is missing.

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 all four parameters are already documented in the schema, including the local-time format for 'since' and the limit cap. The description's remark that last_advised and since are in system local time largely restates the schema, adding no syntax or format detail beyond it, so the baseline 3 applies.

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?

States a specific verb and resource ('List the indexes the query optimizer asked for... from the IBM i index advisor (QSYS2.SYSIXADV)') and distinguishes itself from siblings like list_indexes by making clear this is advisor output, not actual index definitions. An agent can tell exactly what it returns without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the tool is for inspecting optimizer advice before creating indexes, and the description helps interpret results ('advice where the optimizer kept building and reusing an MTI is the strongest signal'). However, it never names an alternative sibling (e.g. list_indexes) or an explicit when-not condition, so routing guidance is left to inference.

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

list_indexesList IndexesB
Read-onlyIdempotent

List all indexes for a specific table including uniqueness and column information. Uses the system's default schema if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name to list indexes for
schemaNoSchema (library) name containing the table. Uses the system's default schema if not provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
successYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only what the listing contains (uniqueness, column info), which is largely redundant with the existing output schema.

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?

Two short sentences, front-loaded with the core action. Nothing is padded or repeated, and the secondary default-schema note is appropriately placed at the end.

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 read-only listing tool with full annotation coverage, a complete output schema, and fully documented parameters, the description is essentially sufficient. It omits any hint about result size or indexing edge cases, but nothing required to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented in the schema. The description's note about the default schema duplicates the schema text for the 'schema' parameter and adds no new syntax or format detail, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('List all indexes for a specific table') plus the scope of returned fields (uniqueness, column information). It is clearly distinct from siblings like describe_table or get_table_constraints, though it does not name an alternative explicitly.

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 never says when to prefer this tool over siblings such as get_table_constraints or describe_table, nor does it give any exclusions. The only conditional statement concerns the optional schema parameter's default, which is usage of a parameter rather than guidance on tool selection.

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

list_routinesList RoutinesA
Read-onlyIdempotent

List SQL procedures and functions in a library from QSYS2.SYSROUTINES, one row per specific routine, so overloads appear once each. Shows the type (procedure, scalar function, or table function), language, external program, SQL data access, result sets, and text. Use describe_routine for parameters and a call template. Uses the system's default schema if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoOnly procedures or only functions. Omit for both.
limitNoMaximum routines to return. Capped by QUERY_MAX_LIMIT.
filterNoFilter routine names. Use * as wildcard, e.g. "GET*". Without a wildcard, matches names containing the text.
schemaNoSchema (library) to list routines in. Uses the system's default schema if not provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
causeNoWhy the statement failed. &1-style placeholders stand for values in error.
countNo
errorNo
schemaNo
sqlcodeNoSQLCODE of the failed statement, such as -204
successYes
recoveryNoWhat to change before trying again
sqlstateNoSQLSTATE of the failed statement
truncatedNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so safety is covered. Beyond that, the description adds real behavioral detail: it documents the deduplication semantics for overloads and enumerates the returned attributes (type, language, external program, SQL data access, result sets, text). It omits the limit/QUERY_MAX_LIMIT behavior, leaving that to 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.

Conciseness4/5

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

Front-loaded with the purpose and the source view, then the dedup rule and the routing hint. The column enumeration in sentence two is somewhat list-heavy but still informative rather than filler. No wasted preamble.

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?

An output schema exists, so return values need no further explanation, and annotations carry the safety profile. Combined with the schema's full parameter documentation, the description supplies everything an agent needs to select and call this tool correctly.

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 schema already documents type, limit, filter, and schema thoroughly. The description restates only the default-schema behavior, adding no syntax or filter-format guidance beyond what the 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 states a specific verb and resource ('List SQL procedures and functions in a library') and anchors it to its source (QSYS2.SYSROUTINES), with the notable qualifier 'one row per specific routine, so overloads appear once each'. That granularity lets an agent distinguish it from list_tables, list_views, and describe_routine without opening a schema.

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

Usage Guidelines4/5

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

It explicitly routes complementary work elsewhere: 'Use describe_routine for parameters and a call template', which tells the agent when this tool is insufficient. It also clarifies the default-schema fallback. It does not, however, state exclusions or contrast against sibling listing tools such as search_ibmi_services.

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

list_schemasList SchemasA
Read-onlyIdempotent

List all schemas (libraries) in the IBM Db2i database. Optionally filter by name pattern using * as wildcard.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFilter pattern for schema names. Use * as wildcard. Example: "QSYS*" matches schemas starting with QSYS

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
successYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and repeatability profile is fully covered by structured data. The description adds the (libraries) terminology mapping, which is useful context, but nothing about result scope or limits beyond what annotations provide. With annotations carrying the behavioral burden, a 3 is appropriate.

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?

Two sentences, zero waste, and the core action is front-loaded before the optional filter detail. Every clause earns its place.

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 zero-required-parameter listing tool with rich annotations and an output schema, the description covers purpose, scope, and the only parameter's behavior. Nothing an agent needs to call it correctly is missing.

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% and the filter parameter is fully documented in the schema, including the wildcard syntax and an example. The description restates the wildcard behavior in one clause without adding format or edge-case detail beyond the schema. Baseline 3 is correct when the schema does the heavy lifting.

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?

States a specific verb (List) and resource (schemas/libraries) in a named database, and the parenthetical 'libraries' disambiguates the Db2 for i terminology. An agent can distinguish this from list_tables or list_views without opening any schema.

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 optional filter usage is stated ('Optionally filter by name pattern'), which implies when the parameter applies, but there is no explicit when-to-use versus siblings or when-not-to-use guidance. For an inventory-listing tool the usage context is largely self-evident, so this is adequate but not rich.

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

list_tablesList TablesB
Read-onlyIdempotent

List all tables in a schema (library). Uses the system's default schema if not provided. Optionally filter by name pattern using * as wildcard.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFilter pattern for table names. Use * as wildcard. Example: "CUST*" matches tables starting with CUST
schemaNoSchema (library) name to list tables from. Uses the system's default schema if not provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
successYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description's only added behavioral fact is the default-schema fallback; it says nothing about empty results, case sensitivity of the wildcard, or limits, so it adds modest value only.

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?

Three short sentences, front-loaded with the primary action and scope. Slight redundancy with the schema text on the wildcard and default schema, but overall efficient and easy to scan.

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

Completeness4/5

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

With an output schema present and full annotation coverage, the description need not explain return values, and it adequately covers invocation for a two-optional-param list tool. The only gap is disambiguation from search_tables, which is a routing concern the description should have closed.

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 both parameters (filter, schema) are already documented in the schema, including the wildcard example and default behavior. The description merely restates that the filter uses * and that schema defaults, adding no new syntax or constraint beyond the schema.

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

Purpose4/5

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

States a specific verb and resource (list tables) with scope (in a schema/library) and the default-schema fallback. However, it does not differentiate itself from the sibling search_tables, which also filters tables by name pattern, so an agent cannot cleanly choose between them from this text alone.

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?

It mentions that the default schema is used when none is supplied, which is helpful context, but gives no explicit when-to-use guidance and no exclusion or alternative pointing toward search_tables, list_schemas, or describe_table. The overlap with search_tables is left unresolved.

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

list_viewsList ViewsA
Read-onlyIdempotent

List all views in a schema (library). Uses the system's default schema if not provided. Optionally filter by name pattern using * as wildcard.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFilter pattern for view names. Use * as wildcard.
schemaNoSchema (library) name to list views from. Uses the system's default schema if not provided.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
successYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that an unspecified schema falls back to a system default and that the filter supports wildcards, but discloses nothing beyond that (e.g. result cap or ordering).

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?

Two tight sentences with the core action front-loaded; nothing is wasted. The default-schema and wildcard details are secondary but relevant, so minor trimming room remains rather than excess.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and both optional parameters are fully documented. For a simple read-only list tool with annotations covering safety, this is essentially complete, with only cross-tool routing left unaddressed.

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 both parameters are already documented in the schema. The description restates the wildcard filter and default-schema behavior rather than adding new format or constraint details, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource — 'List all views in a schema (library)' — so an agent knows exactly what object type is returned. It does not explicitly distinguish itself from siblings like list_tables or list_schemas, but the resource noun makes the separation obvious from name alone.

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

Usage Guidelines3/5

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

Usage is implied (call it to enumerate views) but there is no explicit when-to-use guidance or routing to an alternative. It also never says when not to use it, e.g. versus search_tables or describe_table, so the agent must infer the boundary.

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

profile_tableProfile TableA
Read-onlyIdempotent

Profile a table for ETL work: row count, deleted rows, size, and last change from QSYS2.SYSTABLESTAT, plus per-column distinct count, null count, and low and high values. By default column numbers come from stored statistics in QSYS2.SYSCOLUMNSTAT (low and high are the second-lowest and second-highest values), and columns without collected statistics report source "none". Set compute to true to scan the table for exact numbers on up to 20 columns. Masked columns keep their counts and return no values.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name
schemaNoSchema (library) that contains the table. Uses the system's default schema if not provided.
columnsNoColumns to profile. Defaults to every column (the first 20 when compute is true).
computeNoScan the table for exact counts, MIN, and MAX. Slower on large tables. Default false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
sqlNo
dataNo
modeNo
causeNoWhy the statement failed. &1-style placeholders stand for values in error.
countNo
errorNo
tableNo
schemaNo
sqlcodeNoSQLCODE of the failed statement, such as -204
successYes
recoveryNoWhat to change before trying again
sqlstateNoSQLSTATE of the failed statement
truncatedNo
table_statsNo
computed_rowsNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already establish this is a safe, idempotent read, and the description layers on substantial extra context: the source system tables, that low/high are the second-lowest/second-highest values, that unstatted columns report source "none", that masked columns return counts but no values, and the compute row-scan cost. These are exactly the non-obvious behaviors an agent needs before invoking.

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?

Three dense sentences, each carrying distinct information (what is profiled, default source, compute opt-in, masking). It is front-loaded with the deliverable and wastes little, though the second sentence is long and packs several ideas that could be split for faster scanning.

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?

With an output schema present, the description need not explain return values, and it instead covers the behavioral gaps: data sources, stats staleness semantics, masking, and compute limits. For a profiling tool with subtle stat-based defaults, nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: compute's 20-column ceiling, that the default column set is every column vs. the first 20 under compute, and the masking behavior that affects which parameters yield values. It stops short of documenting the schema parameter's fallback beyond what the schema already says.

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

Purpose4/5

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

The description opens with a specific verb+resource ("Profile a table for ETL work") and enumerates exactly what is produced: row count, deleted rows, size, last change, and per-column distinct/null/low/high values. This is far more informative than a tautology, though it never names or contrasts itself with the closest sibling, describe_table, which an agent may consider a substitute.

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

Usage Guidelines4/5

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

It clearly states the default behavior (stats from SYSCOLUMNSTAT) and the condition that changes it ("Set compute to true to scan the table for exact numbers"), including the cost tradeoff ("Slower on large tables") and the 20-column cap. There is no explicit when-not or named alternative, but the context for choosing compute is unambiguous.

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

search_columnsSearch ColumnsA
Read-onlyIdempotent

Find columns by name or description text across libraries. Matches COLUMN_NAME, SYSTEM_COLUMN_NAME, and COLUMN_TEXT. Use * as a wildcard. When a schema allowlist is configured, only those libraries are searched. Otherwise system libraries (Q* and SYS*) are skipped unless include_system is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Capped by QUERY_MAX_LIMIT.
filterYesName or text to match. Use * as a wildcard. Example: "ITEM*" matches columns starting with ITEM
schemaNoLimit the search to one library. Must be in the schema allowlist when one is configured.
include_systemNoInclude Q* and SYS* libraries. Ignored when a schema or a schema allowlist is set.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
successYes
truncatedNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds non-obvious scoping behavior — allowlist narrowing and implicit system-library exclusion — which an agent could not infer from the annotations or schema.

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?

Four tight sentences, front-loaded with the core action and matching fields, then the scoping rules. No filler, though the allowlist/system behavior is stated twice in compressed form and could be slightly tighter.

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?

An output schema exists, so return values need no explanation. The description covers matching semantics, wildcard, default scope, and allowlist behavior — everything needed to call this correctly.

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 every parameter is already documented in the schema, including wildcard usage and the include_system/allowlist interaction. The description largely restates this, adding little syntax or format detail beyond the schema, so the baseline of 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?

States a specific verb (find/search) and resource (columns) plus the matching fields (COLUMN_NAME, SYSTEM_COLUMN_NAME, COLUMN_TEXT) and the cross-library scope. This clearly separates it from the sibling search_tables, which an agent could otherwise confuse with a table lookup.

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?

Gives concrete operating context: wildcard syntax, the allowlist constraint, and the default of skipping Q*/SYS* libraries unless include_system is true. It does not explicitly name a sibling alternative or say when NOT to use it, but the conditions for correct use are clear.

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

search_ibmi_servicesSearch IBM i ServicesA
Read-onlyIdempotent

Find IBM i SQL services (views, table functions, procedures, and more in QSYS2 and SYSTOOLS) in the catalog QSYS2.SERVICES_INFO, with the release that added each one and an example query. Call it before writing SQL that uses an IBM i service, instead of guessing names and parameters. With no query and no category, it lists the categories with a count each. This tool only reads the catalog. Running an example with execute_query still needs the IBM i authority the service documents and, when QUERY_ALLOWED_SCHEMAS is set, the service's schema in that list. Table functions must be qualified, as in TABLE(QSYS2.ACTIVE_JOB_INFO(DETAILED_INFO => 'NONE')), with plain values as arguments.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum services to return. Capped by QUERY_MAX_LIMIT.
queryNoKeywords, all of which must appear in the service name or category (case-insensitive). Example: "journal entries"
categoryNoExact category, such as JOURNAL, SECURITY, or WORK MANAGEMENT. Call with no arguments to list them.
include_exampleNoInclude the example query for each service. Default true.
search_examplesNoAlso match keywords against the example queries. Default false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
successYes
truncatedNo
categoriesNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint true and destructiveHint false, but the description adds that the tool only reads the catalog and explains downstream authority and schema constraints when running returned examples via execute_query. It also notes that table functions must be qualified, which is useful behavioral context beyond the annotations.

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 front-loads the core purpose, then layers in usage guidance, fallback behavior, and caveats. It is dense and mostly earns its sentences, though the downstream execute_query and qualification details make it longer than strictly necessary for a search tool.

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?

An output schema exists, so the description need not explain return values. It covers the catalog source, the included metadata, the zero-argument behavior, and relevant caveats for using the returned examples, making it complete for an agent to call the tool correctly.

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 input schema already documents all five parameters in detail. The description adds only a small amount of parameter-interaction context, such as what happens with no query and no category, which does not materially exceed the schema baseline.

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?

States a specific verb and resource: 'Find IBM i SQL services (views, table functions, procedures, and more...)' in the named catalog QSYS2.SERVICES_INFO. It also clarifies the context of use before writing SQL that uses an IBM i service, which helps distinguish it from generic query or metadata tools.

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?

Gives clear when-to-use guidance: call it before writing SQL that uses an IBM i service instead of guessing names and parameters. It also describes the no-argument fallback behavior. It does not name alternative sibling tools for related metadata searches, so it stops short of full when-not/alternatives coverage.

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

search_tablesSearch TablesA
Read-onlyIdempotent

Find tables by name or description text across libraries. Matches TABLE_NAME, SYSTEM_TABLE_NAME, and TABLE_TEXT. Use * as a wildcard. When a schema allowlist is configured, only those libraries are searched. Otherwise system libraries (Q* and SYS*) are skipped unless include_system is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows to return. Capped by QUERY_MAX_LIMIT.
filterYesName or text to match. Use * as a wildcard. Example: "ORDER*" matches tables starting with ORDER
schemaNoLimit the search to one library. Must be in the schema allowlist when one is configured.
include_systemNoInclude Q* and SYS* libraries. Ignored when a schema or a schema allowlist is set.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNo
countNo
errorNo
successYes
truncatedNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the schema allowlist restricts which libraries are searched, and Q*/SYS* libraries are skipped by default — scope behavior the annotations cannot convey.

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?

Three front-loaded sentences with no filler: purpose, match targets, then wildcard syntax and scope rules. Dense and efficient, though the scope sentence could be tightened.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description adequately covers search scope and system-library handling. The only real gap is the missing routing against list_tables, which leaves a sibling-selection ambiguity for the agent.

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 all four parameters are already documented in the schema, including wildcard syntax and the include_system interdependency. The description restates the allowlist/system rules without adding syntax or format detail beyond what the schema provides, so the baseline of 3 applies.

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

Purpose4/5

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

States a clear verb+resource ('Find tables') and names the specific match surfaces (TABLE_NAME, SYSTEM_TABLE_NAME, TABLE_TEXT), which is more precise than the name alone. It does not explicitly distinguish itself from the close sibling list_tables, so an agent must infer that this is the filtered variant.

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 search scope behavior (allowlist, system-library skipping) which implies when results are constrained, but it never says when to prefer this over list_tables or search_columns. Usage is inferable rather than stated.

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

validate_queryValidate SQL QueryA
Read-onlyIdempotent

Check a SQL statement without running it. Parses it with QSYS2.PARSE_STATEMENT and checks that referenced tables, columns, and qualified routines exist in the catalog. Also reports read-only and schema-allowlist findings.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesSQL statement to validate. It is not executed.

Output Schema

ParametersJSON Schema
NameRequiredDescription
causeNoWhy the statement failed. &1-style placeholders stand for values in error.
errorNo
validNo
sqlcodeNoSQLCODE of the failed statement, such as -204
successYes
recoveryNoWhat to change before trying again
sqlstateNoSQLSTATE of the failed statement
warningsNo
violationsNo
missingTablesNo
statementTypeNo
missingColumnsNo
skippedFiltersNoAnnotated tables whose row filter, such as leaving out deleted rows, the query does not use. See warnings
missingRoutinesNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description adds meaningful mechanics beyond that: parsing via QSYS2.PARSE_STATEMENT, catalog resolution of tables/columns/routines, and that read-only and schema-allowlist findings are reported.

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?

Two tight sentences, front-loaded with the core action and the non-execution guarantee before the implementation detail. Every clause earns its place with no redundancy.

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?

An output schema exists, so return-value explanation is unnecessary, and the description covers the action, the mechanism, the checks performed, and the non-execution guarantee. Nothing an agent needs to call it correctly is missing.

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?

With a single parameter at 100% schema description coverage, the schema already carries the semantics. The description reinforces that the statement is not executed, which mirrors the schema text rather than adding new meaning, so the baseline 3 applies.

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?

States a specific verb ('Check a SQL statement') plus the crucial scoping constraint 'without running it', and explains the mechanism (QSYS2.PARSE_STATEMENT plus catalog existence checks). This clearly separates it from the sibling execute_query, which actually runs SQL.

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?

'without running it' implicitly tells the agent to use this before execute_query, and the enumeration of checks makes the intended use case clear. It stops short of explicitly naming execute_query as the alternative or stating when validation is mandatory, so it is clear context rather than full routing guidance.

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. 4 tool updatesv3.5.0
    • Changeddescribe_table1 field changed
      • addedOutput schema / properties / filters
        Added value: +{
        +  "description": "Row filters most queries on this table need, such as leaving out deleted rows",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "columns": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "reason": {
        +        "type": "string"
        +      },
        +      "sql": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "sql",
        +      "columns"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedexecute_query2 fields changed
      • addedOutput schema / properties / skippedFilters
        Added value: +{
        +  "description": "Annotated tables whose row filter, such as leaving out deleted rows, the query does not use. See warnings",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / truncated
        Added value: +{
        +  "description": "True when the result stopped at limitApplied and more rows match",
        +  "type": "boolean"
        +}
    • Changedget_business_context5 fields changed
      • addedOutput schema / properties / available_entities
        Added value: +{
        +  "description": "Every loaded entity name, when nothing matched the filters",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / available_tables
        Added value: +{
        +  "description": "Every annotated SCHEMA.TABLE, when the table filter matched nothing",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / data / items / properties / filters
        Added value: +{
        +  "description": "Row filters most queries on this table need, such as leaving out deleted rows",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "columns": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "reason": {
        +        "type": "string"
        +      },
        +      "sql": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "sql",
        +      "columns"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "description": "What to call next when the filters did not match exactly",
        +  "type": "string"
        +}
      • addedOutput schema / properties / partial_match
        Added value: +{
        +  "description": "True when no entity had the requested name and data holds entities whose names partly match it",
        +  "type": "boolean"
        +}
    • Changedvalidate_query2 fields changed
      • addedOutput schema / properties / skippedFilters
        Added value: +{
        +  "description": "Annotated tables whose row filter, such as leaving out deleted rows, the query does not use. See warnings",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / warnings
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  2. 19 tool updatesv3.0.0
    • First observeddescribe_routine
    • First observeddescribe_table
    • First observedexecute_query
    • First observedget_business_context
    • First observedget_journal_info
    • First observedget_object_ddl
    • First observedget_related_objects
    • First observedget_table_constraints
    • First observedindex_advice
    • First observedlist_indexes
    • First observedlist_routines
    • First observedlist_schemas
    • First observedlist_tables
    • First observedlist_views
    • First observedprofile_table
    • First observedsearch_columns
    • First observedsearch_ibmi_services
    • First observedsearch_tables
    • First observedvalidate_query

TDQS

A3.7/5.0

Scored across 19 tools

Disambiguation4/5

Most tools target clearly distinct resources or actions, such as list_tables vs list_views vs list_routines. A few overlaps exist between list_tables/search_tables, describe_table/search_columns, and list_indexes/get_related_objects/index_advice, but the descriptions generally explain the boundaries enough for correct selection.

Naming Consistency4/5

Names are overwhelmingly consistent snake_case with predictable verb_noun patterns like list_tables, describe_table, search_columns, and get_table_constraints. The main minor deviation is index_advice, which is noun-only rather than using a list_/get_ verb.

Tool Count4/5

19 tools is slightly above the typical sweet spot, but the breadth reflects genuinely different DB2 for i metadata and query-assistance needs. Each tool appears to map to a concrete catalog, service, or query operation rather than duplicating another tool.

Completeness4/5

The set covers a strong read-only lifecycle: schemas, tables, views, routines, columns, constraints, indexes, DDL, journaling, profiling, validation, and business context. Gaps remain around explain-plan tooling, explicit trigger/view listing, and any write/DDL execution, though the server appears deliberately read-only.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to interact with IBM i systems through SQL tools and commands, supporting secure authentication, system monitoring, and database operations via the Model Context Protocol.
    85
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to interact with IBM i systems through the Model Context Protocol, providing secure SQL-based access to Db2 for i databases for querying, monitoring, and executing operations.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only interaction with IBM DB2 databases, including listing tables and retrieving table metadata.
    2
    MIT