Skip to main content
Glama
Teradata

Teradata MCP Server

Official
by Teradata

Шаблон сервера Teradata MCP

Обзор

Сервер Teradata MCP — это проект с открытым исходным кодом, и мы приветствуем любые предложения через запросы на включение внесенных изменений.

Мы предоставляем три набора инструментов и соответствующие полезные подсказки.

  1. td_base_tools:

    • execute_read_query — запускает запрос на чтение

    • execute_write_query — запускает запрос на запись

    • read_table_DDL - возвращает результаты показа таблицы

    • read_database_list - возвращает список всех баз данных

    • read_table_list — возвращает список таблиц в базе данных

    • read_column_description - возвращает описание столбцов в таблице

    • read_table_preview - возвращает информацию о столбце и 5 строках из таблицы

    • read_table_affinity — получает таблицы, которые часто используются вместе

    • read_table_usage — измерение использования таблицы и представлений пользователями в заданной схеме.

    • prompt_general - Создание SQL-запроса к базе данных

    • prompt_table_business_description - формирует бизнес-описание таблицы

    • prompt_database_business_description - формирует бизнес-описание базы данных на основе таблиц

  2. td_dba_tools:

    • read_user_sql_list — возвращает список недавно выполненных SQL для пользователя

    • read_table_sql_list — возвращает список недавно выполненных SQL для таблицы

    • read_table_space - возвращает табличное пространство CurrentPerm

    • read_database_space — возвращает выделенное пространство, использованное пространство и процент использования для базы данных

    • read_database_version — возвращает информацию о версии базы данных

    • read_resuage_summary — получение сводных показателей использования системы Teradata по дням недели и часам для каждого типа рабочей нагрузки и уровня сложности запроса.

    • read_flow_control — получение метрик управления потоком данных системы Teradata по дням и часам

    • read_feature_usage — Получить метрики использования функций пользователя

    • read_user_delay — получение метрик задержки пользователя Teradata.

    • prompt_table_archive — создание стратегии архивации таблиц для таблиц базы данных.

    • prompt_database_lineage — создает направленную карту происхождения таблиц в базе данных.

  3. инструменты_качества_данных_td:

    • missing_values — возвращает список имен столбцов с отсутствующими значениями

    • negative_values — возвращает список имен столбцов с отрицательными значениями

    • distinct_categories — возвращает список категорий в столбце

    • standard_deviation — возвращает среднее значение и стандартное отклонение для столбца

Вы можете добавить пользовательские инструменты "query" в файл custom_tools.yaml или в любой файл, заканчивающийся на _tools.yaml . Просто укажите имя инструмента, описание и SQL-запрос для выполнения. На данный момент параметры не поддерживаются.

Каталог Test содержит простой инструмент ClientChatBot для тестирования инструментов.


Настройка среды

Шаг 1 - Окружение было собрано, предполагая, что у вас установлен пакет uv на локальной машине. Инструкции по установке uv можно найти на https://github.com/astral-sh/uv

Шаг 2 — Клонируйте репозиторий mcp-server с помощью

В Windows

mkdir MCP
cd MCP
git clone https://github.com/Teradata/teradata-mcp-server.git
cd teradata-mcp-server
uv sync
.venv/Scripts/activate

На Mac/Linux

mkdir MCP
cd MCP
git clone https://github.com/Teradata/teradata-mcp-server.git
cd teradata-mcp-server
uv sync
source .venv/bin/activate

Шаг 3 — Вам необходимо обновить файл .env

  • Переименуйте env-файл в .env

  • URI базы данных будет иметь следующий формат teradata://имя пользователя:пароль@хост:1025/имя базы данных, используйте ClearScape Analytics Experience https://www.teradata.com/getting-started/demos/clearscape-analytics

    • имя пользователя нуждается в обновлении

    • пароль необходимо обновить

    • хост Teradata нуждается в обновлении

    • имя базы данных нуждается в обновлении

  • Для работы кода /test/pydanticaiBedrock.py должны быть доступны учетные данные LLM.

  • Настройка SSE

    • SSE: логическое значение, определяющее, будет ли ваш сервер использовать транспорт SSE (SSE = True) или транспорт stdio (SSE=False)

    • SSE_HOST: IP-адрес, по которому можно найти сервер, по умолчанию должен быть 127.0.0.1

    • SSE_PORT: Адрес порта, по которому может быть найден сервер, по умолчанию должен быть 8001.

Пример файла .env

############################################
DATABASE_URI=teradata://username:password@host:1025/databasename
SSE=False
SSE_HOST=127.0.0.1
SSE_PORT=8001

############################################
aws_access_key_id=
aws_secret_access_key=
aws_session_token=
aws_region_name=

############################################
OPENAI_API_KEY=

Тестирование вашего сервера с помощью MCP Inspector

Шаг 1 — Запустите сервер, введите в терминале следующее

uv run mcp dev ./src/teradata_mcp_server/server.py

ПРИМЕЧАНИЕ: Если вы запускаете это на компьютере с Windows и получаете ошибки npx, npm или node.js, установите необходимое программное обеспечение node.js отсюда: https://github.com/nodists/nodist

Шаг 2 — Откройте MCP Inspector

  • Вам следует открыть инструмент инспектора, перейти по адресу http://127.0.0.1:6274

  • Нажмите на инструменты

  • Нажмите на список инструментов

  • Нажмите на read_database_list

  • Нажмите «Выполнить»

Протестируйте другие инструменты, каждый из них должен дать успешный результат.

Control+c для остановки сервера в терминале

Запуск сервера

Вы можете просто запустить сервер с помощью: uv run teradata-mcp-server

Добавление вашего сервера к агенту с помощью stdio

Вариант 1 - чат-бот pydanticai

шаг 1 — убедитесь, что флаг SSE в файле .env установлен на значение False

SSE=False

Шаг 2 — Измените скрипт ./test/ClientChatBot.py так, чтобы он указывал на место установки сервера. Для этого вам нужно будет изменить следующую строку:

    td_mcp_server = MCPServerStdio('uv', ["--directory", "/Users/Daniel.Tehan/Code/MCP/teradata-mcp-server", "run", "teradata-mcp-server"])

Шаг 3 - запустите скрипт ./test/ClientChatBot.py, это создаст интерактивный сеанс с агентом, имеющим доступ к серверу MCP. Из терминала.

uv run ./test/ClientChatBot.py
  • Попросите агента составить список баз данных.

  • Попросите агента внести таблицу в базу данных.

  • Попросите агента показать все объекты в базе данных.

  • Задайте агенту вопрос, требующий выполнения SQL-запроса по таблице.

  • Для выхода введите «quit».

Вариант 2 — чат-бот ADK

шаг 1 — убедитесь, что флаг SSE в файле .env установлен на значение False

SSE=False

Шаг 2 — перейдите в каталог teradata_mcp_server/test из терминала.

cd test
adk web

Шаг 3 — откройте веб-сервер ADK

Шаг 4 — чат с td_agent

Вариант 3 - mcp_chatbot

шаг 0 — Измените server_config.json в тестовом каталоге, убедитесь, что путь указан правильно.

шаг 1 — убедитесь, что флаг SSE в файле .env установлен на значение False

SSE=False

Шаг 2 — перейдите в каталог teradata_mcp_server из терминала и запустите mcp_chatbot

uv run test/mcp_chatbot.py

Шаг 3 — выведите список подсказок, введя /prompts

Query: /prompts

Шаг 4 — запуск запроса на описание базы данных

Query: /prompt database_business_description database_name=demo_user

Добавление инструментов с помощью stdio в Visual Studio Code Co-pilot

  • убедитесь, что флаг SSE в файле .env установлен на значение False

SSE=False
  • В VS Code «Показать и выполнить команды»

  • выберите «MCP: Добавить сервер»

  • выберите «Командный Stdio»

  • введите «uv» в команду для запуска

  • введите имя сервера для идентификатора

  • файл settings.json должен открыться

  • измените путь к каталогу и убедитесь, что он указывает на место, где установлен сервер.

  • добавьте аргументы так, чтобы это выглядело так:

Примечание: вам нужно будет изменить путь к каталогу в args для вашей системы, это должен быть полный путь. Вам также может понадобиться полный путь к uv в команде.

    "mcp": {
        "servers": {
            "TeradataStdio": {
                "type": "stdio",
                "command": "uv",
                "args": [
                    "--directory",
                    "/Users/Daniel.Tehan/Code/MCP/teradata-mcp-server",
                    "run",
                    "teradata-mcp-server"
                ]
            }
        }
    }
  • Вы можете запустить сервер из файла settings.json или с помощью «MCP: Start Server»

Добавление инструментов с использованием SSE в Visual Studio Code Co-pilot

  • убедитесь, что флаг SSE в файле .env установлен на значение False

SSE=True
SSE_HOST=127.0.0.1
SSE_PORT=8001
  • вам нужно запустить сервер из терминала

uv run teradata-mcp-server
  • В VS Code «Показать и выполнить команды»

  • выберите «MCP: Добавить сервер»

  • выберите «События, отправленные HTTP-сервером»

  • введите URL-адрес местоположения сервера, например http://127.0.0.1:8001/sse

  • введите имя сервера для идентификатора

  • выберите пользовательское пространство

  • файл settings.json должен открыться

  • добавьте аргументы так, чтобы это выглядело так:

   "mcp": {
        "servers": {
            "TeradataSSE": {
                "type": "sse",
                "url": "http://127.0.0.1:8001/sse"
            }
        }
    }
  • в файле settings.json или вы можете "MCP: Запустить сервер"

Добавление MCP-сервера в Claude Desktop

Вы можете добавить этот сервер Claude Desktop, добавив эту запись в ваш файл конфигурации claude_desktop_config.json :

Примечание: вам нужно будет изменить путь к каталогу в args для вашей системы, это должен быть полный путь. Вам также может понадобиться полный путь к uv в команде.

Примечание: для этого необходимо, чтобы uv был доступен Клоду в системном пути или был установлен глобально в вашей системе (например, uv был установлен с помощью brew для пользователей Mac OS).

{
  "mcpServers": {
    "teradata": {
      "command": "uv",
      "args": [
        "--directory",
        "/path_to_code/teradata-mcp-server",
        "run",
        "teradata-mcp-server"
      ],
      "env": {
        "DATABASE_URI": "teradata://demo_user:teradata-demo@test-vikzqtnd0db0nglk.env.clearscape.teradata.com:1025/demo_user"
      }
    }
  }
}

Представление инструментов как конечных точек REST с помощью mcpo

Вы можете использовать mcpo , чтобы представить этот инструмент MCP как HTTP-сервер, совместимый с OpenAPI.

Например, используя uv: uvx mcpo --port 8001 --api-key "top-secret" -- uv run teradata-mcp-server

Ваши инструменты Teradata теперь доступны как локальные конечные точки REST, просмотрите документацию и протестируйте ее по адресу http://localhost:8001/docs

Использование сервера с Open WebUI

Open WebUI — это удобная для пользователя самостоятельная платформа ИИ, разработанная для работы полностью в автономном режиме, поддерживающая различные LLM-бегунки, такие как Ollama. Она обеспечивает удобный способ взаимодействия с LLM и серверами MCP из интуитивно понятного графического интерфейса. Она может быть интегрирована с этим сервером MCP с помощью компонента mcpo .

Сначала запустите mcpo, как указано в разделе выше .

python -m venv ./env
source ./env/bin/activate
pip install open-webui   
open-webui serve

Откройте пользовательский интерфейс по адресу http://localhost:8080 . Чтобы добавить инструменты MCP, перейдите в Настройки > Инструменты > Добавить подключение и введите данные подключения к серверу mcpo (например, localhost:8001 , пароль = top-secret если вы выполнили командную строку в разделе mcpo).

Вы должны увидеть инструменты в разделе «Клапаны управления чатом» справа и настроить свои модели для их использования.


Сертификация

Available Tools

47 tools
base_columnDescriptionA
Read-onlyIdempotent

List the column names, data types, and basic attributes for a single Teradata table or view. Use for straightforward questions like 'what columns does this table have?' or 'what are the fields and their types?'. For precise Teradata-specific type codes, character sets, decimal precision, index details, or bulk metadata across many objects, use base_columnMetadata instead.

Arguments: database_name - Database name. Defaults to '%' (all databases). table_name - Table or view name. Defaults to '%' (all tables). persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameNoTable or view name. Defaults to '%' (all tables).%
database_nameNoDatabase name. Defaults to '%' (all databases).%

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already indicate readOnlyHint=true and idempotentHint=true, so the description does not need to repeat safety. However, the description adds valuable behavioral context about the 'persist' parameter, explaining it materializes the result as a volatile table and returns the table name. This informs the agent about a side effect beyond a simple read.

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 efficient, with the purpose stated in the first sentence, followed by usage guidance and a bulleted list of parameters. It is not overly verbose, though the parameter descriptions are repeated from the schema (which is acceptable). Could be slightly more concise by eliminating redundancy, but overall well-structured.

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

Completeness4/5

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

Given that the tool is simple (listing columns with attributes) and there is no output schema, the description adequately covers behavior. However, it does not specify the exact return format (e.g., a table-like result) or whether the output includes all rows or is truncated. For completeness, mention of the output nature would be helpful, but the current clarity is sufficient for typical use.

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% with descriptions for all parameters. The description adds extra context by explaining default values ('Defaults to '%' (all databases/all tables)') and the behavior of the 'persist' parameter, which is not fully detailed in the schema. This exceeds the baseline of 3 for full schema coverage.

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

Purpose5/5

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

The description clearly states the tool lists column names, data types, and basic attributes for a Teradata table/view, using specific verbs and resources. It also distinguishes from the sibling tool base_columnMetadata by indicating that for precise type codes, character sets, etc., that tool should be used instead.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('for straightforward questions like what columns does this table have?') and when to use an alternative ('for precise Teradata-specific type codes... use base_columnMetadata instead'). This provides clear guidance for selecting the appropriate tool.

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

base_columnMetadataA
Read-onlyIdempotent

Retrieve detailed technical column metadata for Teradata tables and views, including exact Teradata type codes, character sets (LATIN/UNICODE), decimal precision, scale, nullability, and index classification. Use when the user needs precise Teradata-specific column information, not just basic column names and types. For a simple list of columns and types for a single object, use base_columnDescription instead. Supports bulk retrieval across many objects with payload and time budgets.

Resolution paths: Tables (T, O, Q) — DBC.ColumnsVX + DBC.IndicesVX. No HELP COLUMN. Views (V) — HELP COLUMN with derived-table wrapper, the only reliable mechanism for resolving view column types.

Uses the native TeradataConnection cursor pattern, consistent with all other tools in this module.

Technical capabilities:

  • Exact Teradata type codes and their SQL type string equivalents

  • Character set information (LATIN, UNICODE, etc.)

  • Decimal precision and scale

  • Detection of broken/invalid views

  • Column-level metadata for all objects in a database at once

LARGE-SCALE USAGE GUIDANCE:

When retrieving metadata for many objects (e.g. all views in DBC), both the response payload and the execution time can exceed limits. Use these strategies to control both:

  1. FILTER FIELDS: Pass only the columns you need via the fields parameter. View rows via HELP COLUMN return ~49 fields by default; table rows via DBC.ColumnsVX return fewer. Trimming to 6-8 fields can reduce payload by 80%+. Three computed fields (ColumnTypeString, IndexTypeString, CharSetString) are always included automatically. Example: fields='ColumnName,ColumnType,ColumnLength,CharType, UpperCase,Nullable,Indexed?,Primary?,Unique?'

  2. EXCLUDE OBJECTS: Use exclude_objects to skip objects you do not need. Accepts SQL LIKE patterns (% wildcard) as a CSV. Applied before any metadata queries, so excluded objects consume zero time and zero payload. Example: exclude_objects='ResUsage%,%ResUsage%,Res%View'

  3. INCREASE PARALLELISM: Set max_workers to 12-16 for large databases. Each worker gets its own Teradata session via conn.cursor(). Default is 8.

  4. FILTER BY KIND: Use table_kind to limit to just the object types you need (e.g. 'V' for views only, 'T' for tables only).

  5. PAYLOAD BUDGET: Use max_payload_kb (default 900) to set the maximum response payload size in kilobytes. When the accumulated result data approaches this limit, the tool stops collecting and returns what it has, plus a remaining_objects CSV in metadata listing the unprocessed objects. Pass that CSV straight into object_name on the next call for automatic continuation. This self-adapts to object sizes: small-column views fit more per call, large-column views page earlier.

  6. TIME BUDGET: Use max_execution_seconds (default 180) to set the maximum wall-clock execution time. The tool monitors elapsed time as each object completes, and self-interrupts BEFORE the MCP transport timeout (typically 240s) kills the session without returning any data. When the time budget is reached, the tool returns all data collected so far plus remaining_objects for continuation — exactly the same pattern as payload budget. This is the key difference from an MCP timeout: a timeout returns NOTHING; a time budget returns EVERYTHING collected so far, plus a continuation token.

CONTINUATION PATTERN (automatic pagination): # Call 1 — starts processing, time or payload budget fills up result1 = base_columnMetadata(database_name='DBC', table_kind='V', ...) # metadata contains: remaining_objects='ViewX,ViewY,...'

# Call 2 — pass remaining_objects as object_name
result2 = base_columnMetadata(
    database_name='DBC',
    object_name='ViewX,ViewY,...',  # from result1 metadata
    ...
)
# Repeat until metadata has no remaining_objects key.

Typical call for a large database: base_columnMetadata( database_name='DBC', table_kind='V', exclude_objects='ResUsage%,%ResUsage%', fields='ColumnName,ColumnType,ColumnLength,CharType, UpperCase,Nullable,Indexed?,Primary?,Unique?', max_workers=16, max_payload_kb=900, max_execution_seconds=180 )

Arguments: conn - TeradataConnection (injected by MCP server) database_name - Name of the Teradata database to inspect object_name - Optional: specific object name, or a CSV of names. Also used for continuation: pass the remaining_objects value from a previous truncated call to resume. If omitted, all objects matching table_kind are processed. table_kind - Optional: CSV of TableKind codes to filter by. Examples: 'V' (views only), 'T,O' (tables + NoPI), 'T,V' (tables and views). Defaults to all qualifying object types (T, O, V, Q). Tables (T, O, Q) use DBC.ColumnsVX + DBC.IndicesVX. Views (V) use HELP COLUMN with a derived-table wrapper to force type resolution — this is the only reliable mechanism for view column types. Stored procedures (P, E), functions (A, F, R, B, S), and macros (M) are not supported. DBC.ColumnsVX does return parameter rows for these object types, but their parameter semantics (IN/OUT/INOUT, SPParameterType) are incompatible with the column metadata model this tool produces. Support is a planned future enhancement. max_workers - Optional: number of parallel threads for view resolution via HELP COLUMN. Default: 8. Table metadata is retrieved via DBC.ColumnsVX and DBC.IndicesVX within the same worker pool. fields - Optional: CSV of field names to include in the response. Reduces payload size significantly. Computed fields (ObjectName, ColumnTypeString, IndexTypeString, CharSetString) always included. exclude_objects - Optional: CSV of object name patterns to exclude. Uses SQL LIKE-style % wildcards. Applied before any database calls — excluded objects incur zero query cost. max_payload_kb - Optional: maximum response payload budget in KB. Default: 900. Set to 0 to disable. max_execution_seconds - Optional: maximum wall-clock execution time in seconds. Default: 180. Set to 0 to disable. *args - Positional bind parameters (reserved) **kwargs - Named bind parameters (reserved)

Returns: MCP-compliant response via create_response() containing a list of column metadata records with normalised keys and four computed string fields per column:

    ColumnTypeString      - Human-readable SQL type (e.g. "VARCHAR(200)
                            UNICODE", "DECIMAL(18,2)", "INTEGER")
    IndexTypeString       - Index classification: 'UPI', 'NUPI', 'USI',
                            'NUSI', or None if not indexed.
                            For tables (T, O, Q): sourced from
                            DBC.IndicesVX — composite index grouping
                            (IndexNumber + ColumnPosition) is fully
                            preserved.
                            For views (V): sourced from HELP COLUMN
                            flags — reports column participation only,
                            not composite index grouping. Query
                            DBC.IndicesVX against the base table for
                            full composite index detail.
    CharSetString         - Character set name: 'LATIN', 'UNICODE',
                            'KANJI1', 'GRAPHIC', 'KANJISJIS', or None.
    CaseSpecificityString - Case attribute: 'UPPERCASE', 'CASESPECIFIC',
                            'NOT CASESPECIFIC', or None if no explicit
                            case attribute is defined on the column.

When truncated, metadata will include:
    remaining_objects  - CSV of unprocessed object names
    truncated          - True
    truncation_reason  - 'time_budget_exceeded' or
                         'payload_budget_exceeded'
    elapsed_seconds    - Wall-clock time consumed (always present)
ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo
table_kindNo
max_workersNo
object_nameNo
database_nameYes
max_payload_kbNo
exclude_objectsNo
max_execution_secondsNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and idempotentHint. Description adds extensive behavioral context: uses DBC.ColumnsVX and HELP COLUMN, supports bulk retrieval with payload/time budgets, continuation pattern, large-scale strategies, limitations on stored procedures, and parallelism details.

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

Conciseness4/5

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

Description is long but well-structured with clear sections, headings, and bullet points. Front-loaded with core purpose. Some redundancy (e.g., repeating type info), but overall appropriate for complexity.

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

Completeness5/5

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

Given 8 parameters, no output schema, and annotation coverage, description is fully complete. It details input parameters, return values (4 computed fields), continuation pattern, table kind handling, and limitations. Leaves no significant gaps.

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

Parameters5/5

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

Schema has 0% field descriptions, so description carries full burden. It provides detailed explanations for all 8 parameters including defaults, usage examples, and behavioral notes (e.g., continuation for object_name, table_kind filtering, field trimming).

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

Purpose5/5

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

Description clearly states it retrieves detailed technical column metadata for Teradata tables/views, listing specific attributes (type codes, character sets, precision, nullability, index classification). Distinguishes from sibling base_columnDescription for basic column listing.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool (precise Teradata-specific information) and when not (use base_columnDescription for simple list). Provides resolution paths for tables/views and large-scale usage strategies with 6 numbered guidance points.

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

base_databaseListA
Read-onlyIdempotent

List all databases or schemas available in the Teradata system. ONLY call when the user explicitly asks which databases or schemas exist on the system. Do NOT call this tool as a preliminary step toward listing tables — if the user asks about tables without naming a database, ask them which database they mean rather than discovering databases first.

Arguments: scope - Filter scope: 'user' returns only user-created databases (excludes system databases), 'all' returns every database. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoFilter scope: 'user' returns only user-created databases (excludes system databases), 'all' returns every database.user
persistNoIf True, materializes result as a volatile table and returns table name

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and idempotentHint=true. Description adds that materializing result creates a volatile table and returns its name, giving non-obvious behavioral context.

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

Conciseness5/5

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

Concise with a clear opening sentence and structured parameter descriptions. No unnecessary words, and important guidelines are front-loaded.

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

Completeness4/5

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

Covers core functionality and usage constraints, but does not specify the output format (e.g., list of names or objects). Minor gap for a tool with no output schema.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description repeats schema parameter details but does not add new meaning beyond them.

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

Purpose5/5

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

The description clearly states the tool lists databases/schemas in Teradata. It distinguishes from sibling tools like base_tableList by explicitly saying not to call it as a preliminary step for table listing.

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

Usage Guidelines5/5

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

Provides explicit when to use (user asks about databases) and when not to use (not as preliminary step for tables), including alternative behavior suggestion.

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

base_readQueryA
Read-onlyIdempotent

Execute a user-provided SQL query against Teradata and return the results. Use this tool ONLY when the user supplies an explicit SQL statement or a request that includes filter conditions (WHERE clause, aggregations, JOINs, etc.). Do NOT use for simply browsing or sampling rows from a table — use base_tablePreview for that. The sql parameter is required and must contain the full SQL text.

Arguments: sql - SQL text, with optional bind-parameter placeholders persist - Set to True to persist the results as a table and reuse it later. Recommended for large result sets. row_limit - Maximum rows to return (default 1000, ceiling 50000). Pass a higher value when you need more rows.

When the response metadata contains 'truncated: true', more rows exist beyond the limit. To get more data:

  • Pass a higher row_limit (up to 50000) to retrieve more rows in the response.

  • Use persist=true to write all rows to a volatile table and query it directly — this bypasses the row limit entirely and is the recommended approach for large result sets.

Returns: ResponseType: formatted response with query results + metadata (includes 'volatile_table' field in metadata if persist=True) (includes 'truncated' and 'row_limit' in metadata when results are capped)

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlNo
persistNo
row_limitNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. Description adds context on truncation behavior, persist option, and metadata fields. However, it does not explicitly state the tool only executes read-only queries (SQL could include DML), but annotations cover this. Slight gap in emphasizing safety beyond 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?

Well-structured with sections for arguments, truncated handling, and returns. Every sentence adds value; no fluff. Front-loaded with core purpose and usage guidance.

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

Completeness4/5

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

Covers all three parameters and return metadata fields (volatile_table, truncated, row_limit). Does not address error cases or invalid SQL, but given no output schema, it provides adequate completeness for the tool's complexity.

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

Parameters5/5

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

Schema has 0% description coverage, but the description provides thorough explanations for all three parameters: sql (required full SQL text), persist (persist results as table), row_limit (default 1000, ceiling 50000). Adds significant meaning beyond bare schema.

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

Purpose5/5

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

The description clearly states the tool executes user-provided SQL queries against Teradata and returns results. It explicitly distinguishes from sibling tool base_tablePreview for browsing, and mentions alternatives, avoiding ambiguity.

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

Usage Guidelines5/5

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

Provides explicit when-to-use (user supplies explicit SQL or filter conditions) and when-not-to-use (do not use for browsing/sampling - use base_tablePreview). Includes guidance on handling truncated results with higher row_limit or persist=true.

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

base_saveDDLA
Read-onlyIdempotent

Extract the DDL for a Teradata table, view, or stored procedure and SAVE it as a .sql file on disk. Use this tool ONLY when the user explicitly wants to export, write, download, or persist DDL to a file. Do NOT use simply to display or view DDL in the conversation — use base_tableDDL to display DDL without saving.

Arguments: database_name - Database name (e.g., 'MKTG_USR') table_name - Object name (e.g., 'SP_LOAD_VARIABLES_ARGUMENTARIO_IAG_FICHA_CLIENTE'). Accepts comma-separated values for bulk retrieval. object_type - Type of object: 'PROCEDURE', 'TABLE', 'VIEW' (default: 'PROCEDURE') output_dir - Directory where to save the DDL file (default: './ddls_extracted')

Returns: ResponseType: formatted response with file path, size, and metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
output_dirNo./ddls_extracted
table_nameYes
object_typeNoPROCEDURE
database_nameYes

TDQS

A3.9/5.0
Behavior1/5

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

The description states it saves a file to disk, which is a write side effect, but annotations set readOnlyHint=true and idempotentHint=true, creating a contradiction. This undermines trust in the tool's behavior.

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

Conciseness5/5

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

The description is efficient: one sentence for purpose, one for usage rules, then argument list, then return info. Front-loaded with critical information, no fluff.

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

Completeness3/5

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

The description covers purpose, arguments, and return format, and distinguishes sibling. However, the annotation contradiction undermines completeness, as the agent cannot trust whether the tool is read-only or not. Without output schema, the return description is adequate but not detailed.

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

Parameters4/5

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

Schema description coverage is 0%, so the description compensates well. It explains each parameter (database_name, table_name with comma-separated bulk, object_type with defaults, output_dir with default) beyond the schema's just type and defaults. However, it could add more detail on acceptable values for object_type.

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

Purpose5/5

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

The description clearly states the tool extracts DDL and saves it as a .sql file, distinguishing it from base_tableDDL which only displays DDL. The verb 'save' and resource 'DDL' are specific, and the sibling differentiation is explicit.

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

Usage Guidelines5/5

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

The description explicitly says to use this tool when the user wants to export/write/download/persist DDL to a file, and not to display/view DDL (use base_tableDDL instead). It also provides argument details and defaults, giving clear context.

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

base_tableAffinityA
Read-onlyIdempotent

Identify which tables in a database tend to co-occur together in the same SQL queries, revealing natural JOIN relationships and data affinity patterns. Use when the user asks which tables are queried together, what tables are related to a specific table, or what tables are commonly used in the same workflows. For access frequency, query counts, or per-user access statistics, use base_tableUsage instead.

Arguments: database_name - Database name table_name - Table or view name persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable or view name
database_nameYesDatabase name

TDQS

A4.2/5.0
Behavior4/5

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

Description adds behavioral context such as revealing natural JOIN relationships and data affinity patterns, and explains the persist parameter's effect of materializing a volatile table. Annotations already declare readOnlyHint and idempotentHint, so the description complements them without contradiction.

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 concise, front-loaded with the purpose, and includes usage guidelines and argument list in a clear structure. A small improvement could be organizing the argument list more formally.

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

Completeness3/5

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

The description covers purpose, usage, and parameters, but lacks details about the output format or example results. With no output schema, more descriptive output would enhance completeness.

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 baseline is 3. The description repeats parameter names and purpose but adds no additional meaning beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the tool identifies co-occurring tables in SQL queries, revealing JOIN relationships and affinity patterns. It uses a specific verb 'Identify' and distinguishes from sibling tool base_tableUsage.

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

Usage Guidelines5/5

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

Explicitly states when to use (queries about tables queried together, related tables, common workflows) and when not to (access frequency, query counts, per-user stats), directing to base_tableUsage as alternative.

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

base_tableDDLA
Read-onlyIdempotent

Return the CREATE TABLE DDL statement for a Teradata table, showing its full schema definition including column types, constraints, primary indexes, and keys. Use when the user wants the CREATE statement, the table definition, or needs to see how the table was built. If the user has not specified both a table name AND a database name, ask for clarification before calling — do not guess or use an empty database name. To save DDL to a file on disk, use base_saveDDL instead. For just column names and types, use base_columnDescription instead.

Arguments: table_name - Table name database_name - Database name persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable name
database_nameYesDatabase name

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnly and idempotent. Description adds context about not guessing empty database name and explains the persist parameter. No contradictions.

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

Conciseness4/5

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

Purpose is front-loaded and clearly stated. Subsequent sentences provide necessary usage guidance and alternatives. Slightly wordy but efficient overall.

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

Completeness4/5

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

Given the tool's simplicity (no output schema), the description covers purpose, usage, required parameters, and alternatives. The persist behavior is explained. Minimal gaps.

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

Parameters3/5

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

Schema coverage is 100% with descriptive parameter names and descriptions. The description repeats the same information, adding no new meaning beyond the schema.

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

Purpose5/5

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

The description clearly states it returns the CREATE TABLE DDL for a Teradata table, listing specific content (column types, constraints, indexes, keys). It distinguishes from siblings like base_saveDDL and base_columnDescription.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance (user wants CREATE statement, table definition, or how table was built). Includes caveat to ask for clarification if parameters missing, and directs to alternative tools for saving DDL or column descriptions.

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

base_tableListA
Read-onlyIdempotent

List all tables and views within a specific Teradata database or schema. Pass a specific database name to list tables in that database only. Omit or leave empty to list tables from all databases. If the user does not name a database and you want to list tables from a single database, ask a clarifying question instead of returning results from all databases.

Arguments: database_name - Database name. Leave empty to list tables from all databases. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
database_nameNoDatabase name. Leave empty to list tables from all databases.

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 idempotentHint=true. Description adds context about the persist parameter materializing as a volatile table. No additional behavioral details beyond that, which is sufficient given the safety profile.

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?

Multi-line structure with clear main point and parameter details. Not overly verbose, though could be slightly more structured. Front-loaded with tool action.

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?

No output schema, so description should describe return format. It only mentions for persist case. For default list, no output description is provided, leaving the agent unaware of result structure (e.g., columns).

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?

Input schema has 100% description coverage. Description largely repeats schema but adds the clarifying question guidance for database_name, enhancing semantic value beyond schema.

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

Purpose5/5

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

Verb 'List' + resource 'tables and views' + scope 'within a specific Teradata database or schema'. Distinct from sibling tools like base_databaseList (list databases) and base_tableDDL (get DDL).

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?

Explicit guidance on when to pass database_name vs omit, with a caution to ask clarifying question to avoid querying all databases. Lacks comparison to sibling tools but provides clear context.

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

base_tablePreviewA
Read-onlyIdempotent

Return a quick sample of the first few rows from a Teradata table or view so the user can see what data looks like, with no SQL required. Use this tool when the user wants to explore or peek at a table's contents without specifying conditions or writing a query. Do NOT use when the user provides a WHERE clause, filter, or explicit SQL statement — use base_readQuery for that.

Arguments: table_name - Table or view name database_name - Database name persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable or view name
database_nameNoDatabase name

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. The description adds context about returning a sample and the persist option materializing a volatile table, but doesn't specify row count or exact behavior beyond that.

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 concise paragraphs: first explains purpose and usage guidelines, second lists arguments. No redundant or unnecessary words.

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

Completeness4/5

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

The description covers the main purpose, parameter behavior, and distinguishes from siblings. However, it lacks details like how many rows are returned ('first few') and whether there are limits or performance considerations, but overall sufficient for a simple preview 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 coverage is 100%, so the description's argument list largely restates schema descriptions. It adds minor context (e.g., persist returns table name) but does not significantly enhance meaning beyond what's in the schema.

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

Purpose5/5

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

The description clearly states it returns a quick sample of first few rows from a Teradata table/view with no SQL required, and distinguishes from base_readQuery for filtered queries.

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

Usage Guidelines5/5

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

Explicitly says when to use (explore/peek without conditions) and when not to use (when WHERE clause, filter, or SQL is provided), and points to base_readQuery as the alternative.

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

base_tableUsageA
Read-onlyIdempotent

Report access frequency and per-user query patterns for tables and views in a Teradata database, showing which objects are most actively queried and by whom. Use when the user asks how often tables are accessed, which tables are most popular, or which users are running queries against a database. For discovering which tables appear together in the same queries, use base_tableAffinity instead.

Arguments: database_name - Database name. Leave empty for all databases. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
database_nameNoDatabase name. Leave empty for all databases.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and idempotentHint=true, so the description doesn't need to repeat safety. It adds behavioral context about output: 'showing which objects are most actively queried and by whom' and explains the persist parameter behavior. This adds value beyond 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?

The description is concise and well-structured: purpose sentence, usage guidelines, alternative, then parameter list. No fluff, every sentence earns its place.

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?

Despite no output schema, the description hints at the output format ('showing which objects...' and 'returns table name' for persist). It is fairly complete for a tool with clear annotations and parameters, though more detail on the output structure would help.

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 both parameters. The description repeats the parameter descriptions verbatim without adding new meaning beyond the schema, so 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?

Description starts with a specific verb+resource: 'Report access frequency and per-user query patterns for tables and views in a Teradata database'. It clearly states what the tool does and distinguishes itself from sibling base_tableAffinity by explicitly mentioning that alternative.

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

Usage Guidelines5/5

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

Explicitly states when to use: 'Use when the user asks how often tables are accessed, which tables are most popular, or which users are running queries against a database.' Also provides an explicit alternative: 'For discovering which tables appear together in the same queries, use base_tableAffinity instead.'

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

dba_databaseSpaceA
Read-onlyIdempotent

Show disk space allocation for a specific named Teradata database. Use when the user asks how much space a particular database is using or how much has been allocated to it. If no database name is provided, ask for clarification — do not call with an empty database name. For table-level breakdowns within a database, use dba_tableSpace. For system-wide totals across all databases, use dba_systemSpace.

Arguments: database_name - Database name. Required — do not pass empty string. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
database_nameYesDatabase name. Required — do not pass empty string.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations (readOnlyHint: true, idempotentHint: true) already indicate safe read operations. The description adds context about the persist parameter materializing results as a volatile table and returning the table name. It does not cover return format or error behavior, but the additions are valuable and consistent.

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 paragraphs: first gives purpose and usage guidance, second lists arguments with clear constraints. Every sentence adds value, no fluff. Front-loaded with the core purpose.

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

Completeness5/5

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

For a simple 2-parameter tool with no output schema, the description covers all essential aspects: purpose, usage context, parameter semantics, behavioral notes, and sibling differentiation. It is fully complete for an agent to correctly invoke this tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning: database_name is required and must not be empty, and persist with True materializes as a volatile table and returns the table name. This goes beyond the schema's simple type/required annotations.

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

Purpose5/5

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

The description clearly states it shows disk space allocation for a specific named Teradata database. It distinguishes itself from siblings dba_tableSpace (table-level) and dba_systemSpace (system-wide). The verb 'show' and resource 'disk space allocation for a specific named database' is precise.

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

Usage Guidelines5/5

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

Explicitly states when to use (user asks about space for a specific database) and when not (table-level or system-wide). Also provides a crucial guideline: if no database name is provided, ask for clarification; do not call with an empty string.

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

dba_databaseVersionA
Read-onlyIdempotent

Return the Teradata database software version and release information. Use when the user asks what version of Teradata is running on the system.

Arguments: persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. Description adds that persist materializes into a volatile table, providing extra behavioral context beyond 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 sentences plus one argument description, all front-loaded. No wasted words; every sentence adds value.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description adequately covers purpose and usage. Minor omission: does not explain what 'release information' includes, but acceptable.

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% and the description repeats the same information as the schema parameter description. No additional meaning added beyond what schema provides.

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

Purpose5/5

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

The description clearly states the tool returns Teradata database version and release information with a specific verb and resource. It distinguishes from siblings as no other dba tool focuses on version.

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

Usage Guidelines4/5

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

Explicitly states when to use: 'Use when the user asks what version of Teradata is running on the system.' No exclusions or alternatives provided, but context is clear.

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

dba_featureUsageA
Read-onlyIdempotent

Report which Teradata product features were used during a specified date range. Use when the user asks about feature adoption, which Teradata capabilities are being used, or how feature utilization has changed over a period.

Arguments: start_date - The start date for the query range in YYYY-MM-DD format. end_date - The end date for the query range in YYYY-MM-DD format. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
end_dateYesThe end date for the query range in YYYY-MM-DD format.
start_dateYesThe start date for the query range in YYYY-MM-DD format.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, indicating a safe, read-only operation. The description adds behavioral details beyond annotations, such as the ability to persist results as a volatile table via the 'persist' parameter, and the date range 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?

The description is concise with a clear purpose statement and usage guideline, followed by parameter definitions. It is front-loaded with the main purpose. Could be slightly more structured (e.g., separate sections), but it is efficient with no wasted words.

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

Completeness3/5

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

The description explains what the tool does and its parameters, but does not describe the output format or content of the report (e.g., list of features, counts, etc.). With no output schema, additional detail on return value would improve completeness. The persist behavior is explained, but the default output is vague.

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 the schema fully documents all parameters. The description repeats the parameter definitions, adding minimal value beyond a concise summary. It does not provide additional semantics or examples for parameters like start_date and end_date beyond format specification.

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

Purpose5/5

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

The description clearly states the action ('Report') and the resource ('Teradata product features used during a specified date range'). It also lists specific use cases, effectively distinguishing it from sibling tools like other dba_ tools which focus on space, version, sessions, etc.

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

Usage Guidelines4/5

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

The description explicitly states when to use the tool: 'Use when the user asks about feature adoption, which Teradata capabilities are being used, or how feature utilization has changed over a period.' It provides clear context, though it does not explicitly mention when not to use it or direct to alternatives.

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

dba_flowControlA
Read-onlyIdempotent

Report Teradata workload management flow control events showing when and how much the system throttled or delayed queries due to resource constraints. Use when the user asks about system throttling, flow control delays, or how often the workload manager imposed restrictions. For how long individual users personally waited in queues, use dba_userDelay instead.

Arguments: start_date - The start date for the query range in YYYY-MM-DD format. end_date - The end date for the query range in YYYY-MM-DD format. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
end_dateYesThe end date for the query range in YYYY-MM-DD format.
start_dateYesThe start date for the query range in YYYY-MM-DD format.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint=true, so the description adds context about the data reported (timing and magnitude of throttling) and optional persistence. No contradiction.

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

Conciseness5/5

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

The description is concise: two sentences for purpose and usage guidelines, then bullet-like argument list. No wasted words, well-structured.

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?

Lacking an output schema, the description does not specify the default output format (e.g., list of events). It mentions returning a table name when persist=True, but not the normal return. Slight gap.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description echoes the schema descriptions for parameters, adding no extra semantic depth beyond what the schema provides.

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

Purpose5/5

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

The description clearly states it reports flow control events (system throttling/delaying queries) and distinguishes from sibling dba_userDelay which deals with individual user queue waits.

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

Usage Guidelines5/5

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

Explicitly states when to use (when user asks about system throttling, flow control delays, workload manager restrictions) and when not to (for individual user waits, use dba_userDelay instead).

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

dba_resusageSummaryA
Read-onlyIdempotent

Report system-wide resource consumption (CPU, IO, memory) broken down by time period, application, workload type, or complexity class. Use when the user asks for system-level resource breakdowns, workload profiles, or consumption trends over a date range — not tied to a specific database. For per-database or per-user impact within a named database, use dba_tableUsageImpact instead.

Arguments: user_name - User name to filter by. Leave empty for all users. LogDate - Log date to filter by in YYYY-MM-DD format. Leave empty for all dates. dayOfWeek - Day of week to filter by (1=Sunday, 2=Monday, ..., 7=Saturday). Leave empty for all days. hourOfDay - Hour of day to filter by (0-23). Leave empty for all hours. workloadType - Workload type to filter by (e.g., 'Batch', 'Interactive'). Leave empty for all workload types. workloadComplexity - Workload complexity to filter by (e.g., 'Simple', 'Medium', 'Complex'). Leave empty for all complexity levels. AppID - Application ID to filter by. Leave empty for all applications. no_days - Number of days to look back from today (e.g., 7, 30, 90). persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
AppIDNoApplication ID to filter by. Leave empty for all applications.
LogDateNoLog date to filter by in YYYY-MM-DD format. Leave empty for all dates.
no_daysNoNumber of days to look back from today (e.g., 7, 30, 90).
persistNoIf True, materializes result as a volatile table and returns table name
dayOfWeekNoDay of week to filter by (1=Sunday, 2=Monday, ..., 7=Saturday). Leave empty for all days.
hourOfDayNoHour of day to filter by (0-23). Leave empty for all hours.
user_nameNoUser name to filter by. Leave empty for all users.
workloadTypeNoWorkload type to filter by (e.g., 'Batch', 'Interactive'). Leave empty for all workload types.
workloadComplexityNoWorkload complexity to filter by (e.g., 'Simple', 'Medium', 'Complex'). Leave empty for all complexity levels.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint as true, indicating a safe, read-only operation. The description adds behavioral context by mentioning the persist parameter behavior (materializes result as volatile table and returns table name). No contradictions.

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

Conciseness5/5

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

The description is front-loaded with a clear purpose and usage guidance, followed by a well-organized list of arguments. Every sentence adds value, and the structure is efficient and easy to parse.

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 reporting tool with 9 optional parameters and no output schema, the description covers purpose, usage, and parameter details adequately. It explains the persist parameter's return behavior. However, it lacks details about the default output format or potential size, which would be helpful.

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 the input schema already documents all parameters with descriptions. The description repeats these descriptions in a list format but does not add significant new meaning beyond what the schema provides.

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

Purpose5/5

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

The description clearly states it reports system-wide resource consumption (CPU, IO, memory) broken down by time period, application, workload type, or complexity class. It distinguishes itself from sibling dba_tableUsageImpact by specifying that it is not tied to a specific database, but for per-database or per-user impact.

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

Usage Guidelines5/5

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

The description explicitly states when to use: 'system-level resource breakdowns, workload profiles, or consumption trends over a date range — not tied to a specific database.' It also provides an alternative sibling: 'For per-database or per-user impact within a named database, use dba_tableUsageImpact instead.'

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

dba_sessionInfoA
Read-onlyIdempotent

Report currently active session information for a specific user or all users. Use when the user asks about open connections, active sessions, or currently logged-in users. You may call with the default '*' to show all sessions when no specific user is mentioned — no clarification required for this tool.

Arguments: user_name - User name to analyze. Use '*' to get all users. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
user_nameNoUser name to analyze. Use '*' to get all users.*

TDQS

A4.3/5.0
Behavior4/5

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

Annotations include readOnlyHint and idempotentHint, and the description confirms the tool reports current session information without side effects. It adds context about the persist parameter materializing results as a volatile table, which is beyond annotations. No contradictions.

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

Conciseness5/5

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

The description is concise with two focused paragraphs. The first defines purpose and usage, the second lists arguments. Every sentence adds value with no unnecessary words.

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

Completeness5/5

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

Given the simple tool with 2 fully documented parameters, annotations for safety, and no output schema, the description covers all necessary context: purpose, usage triggers, parameter details, and behavioral notes. No gaps remain.

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 the schema already documents both parameters. The description adds minimal extra meaning (default behavior and persist effect), but mostly repeats schema. 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?

The description clearly states 'Report currently active session information for a specific user or all users.' It uses a specific verb (report) and resource (session information), and distinguishes from sibling tools like dba_databaseSpace and base_columnDescription by focusing on sessions.

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

Usage Guidelines4/5

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

The description explicitly says 'Use when the user asks about open connections, active sessions, or currently logged-in users' and provides guidance on using '*' for all users without clarification. However, it does not mention when not to use this tool or provide alternatives.

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

dba_systemSpaceA
Read-onlyIdempotent

Show total disk space usage across the entire Teradata system, aggregated over all databases. Use when the user asks about warehouse-wide storage, total system capacity, or overall disk consumption across all databases. For a single named database, use dba_databaseSpace. For table-level details within a database, use dba_tableSpace.

Arguments: persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description need not repeat that. The description adds no additional behavioral context beyond the parameter effect (which is parameter semantics). A score of 3 is appropriate given the low burden but no extra disclosure.

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

Conciseness5/5

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

The description is concise (three sentences), front-loads the purpose, and uses clear structure. No unnecessary words.

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

Completeness4/5

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

The description covers purpose, usage guidelines, and parameter. However, it omits what the tool returns when persist=False (presumably direct results but not stated). Given the tool's simplicity and lack of output schema, this is a minor gap.

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% and the description's parameter explanation is identical to the schema's description. No added value beyond what the schema already provides. Baseline 3 for high coverage.

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

Purpose5/5

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

The description clearly states the tool shows total disk space usage across the entire Teradata system, aggregated over all databases. It differentiates from siblings by specifying use cases for system-wide vs. per-database vs. per-table queries.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool (warehouse-wide storage questions) and when to use alternatives (dba_databaseSpace for single database, dba_tableSpace for table-level). No ambiguity.

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

dba_tableSpaceA
Read-onlyIdempotent

Show table-level disk space usage within a specific Teradata database, ranked by size. Use when the user asks which tables are largest or consuming the most storage within a named database. NEVER call this tool with an empty database_name — if the user's message does not explicitly name a database, ask which database they want before calling. For space allocated to a whole database, use dba_databaseSpace. For total system-wide storage, use dba_systemSpace.

Arguments: database_name - Database name. Required — do not pass empty string. table_name - Table name filter. Leave empty for all tables. top_n - Limit results to top N largest tables by space. Set to 0 for no limit (default: 0). exclude_system - Exclude system databases and tables. Set to 'Y' to exclude, 'N' to include all (default: 'N'). persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoLimit results to top N largest tables by space. Set to 0 for no limit (default: 0).
persistNoIf True, materializes result as a volatile table and returns table name
table_nameNoTable name filter. Leave empty for all tables.
database_nameYesDatabase name. Required — do not pass empty string.
exclude_systemNoExclude system databases and tables. Set to 'Y' to exclude, 'N' to include all (default: 'N').N

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint and idempotentHint, which the description does not contradict. The description adds detail on the persist parameter: 'materializes result as a volatile table and returns table name,' which is behavioral context beyond annotations. No additional traits like side effects or auth needs are discussed, but annotations already cover safety.

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

Conciseness4/5

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

The description is well-structured: a concise purpose paragraph followed by a bulleted argument list. It is front-loaded with the main action. While slightly longer than necessary due to repeated parameter info, it remains readable and efficient.

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

Completeness3/5

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

Given no output schema, the description does not explain the return format (columns, structure) for the normal case. For persist, it notes returns table name. While annotations and schema cover safety and parameters, the missing output description leaves some ambiguity for the agent about what to expect from the response.

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 baseline is 3. The description duplicates parameter docs in an Arguments section, reinforcing requirements like 'database_name - Required — do not pass empty string' and defaults. However, it adds no new semantic meaning beyond the schema; the persist description is identical.

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

Purpose5/5

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

The description explicitly states 'Show table-level disk space usage within a specific Teradata database, ranked by size.' It distinguishes from sibling tools by mentioning 'Use when the user asks which tables are largest' and contrasts with dba_databaseSpace and dba_systemSpace.

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

Usage Guidelines5/5

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

Provides explicit when-to-use: 'Use when the user asks which tables are largest or consuming the most storage within a named database.' Also gives when-not-to-use: 'NEVER call this tool with an empty database_name' and instructs to ask for database if not provided. Alternatives are named: dba_databaseSpace and dba_systemSpace.

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

dba_tableSqlListA
Read-onlyIdempotent

Retrieve SQL statements that have been executed against a specific named table. Use when the user asks what queries have run against a particular table. ONLY call when the user has explicitly named a specific table — if no table name is in the message, ask for clarification. Do NOT use for SQL history by user — use dba_userSqlList when the user asks what queries a specific person has been running.

Arguments: table_name - Table name to search for no_days - Number of days to look back persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
no_daysNoNumber of days to look back
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable name to search for

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent. The description adds behavioral context about the 'persist' parameter materializing a volatile table and returning its name, which is useful beyond the annotations. However, it does not discuss authentication, rate limits, or other constraints.

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

Conciseness4/5

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

The description is well-structured with a purpose paragraph and a parameter list. It is concise but covers essential points; could be slightly tighter but is effective.

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?

With no output schema, the description does not explain the return format (e.g., whether it includes timestamps, SQL text). While the purpose and usage are clear, a bit more detail on what the result contains would improve completeness. The parameters are fully described.

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 baseline is 3. The description repeats parameter names and gives brief explanations, which are nearly identical to the schema descriptions, adding minimal extra value.

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

Purpose5/5

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

The description clearly states the action ('Retrieve SQL statements') and resource ('against a specific named table'). It distinguishes from the sibling tool 'dba_userSqlList' by specifying that this tool is for table-specific history, not user-specific history.

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

Usage Guidelines5/5

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

Explicit guidance is given on when to use (user asks about queries on a particular table), when not to use (if table name not explicit, ask for clarification), and alternative tool (dba_userSqlList for user-specific SQL history).

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

dba_tableUsageImpactA
Read-onlyIdempotent

Identify which users and tables are driving the most query and resource activity within a specific Teradata database. Use when the user asks who is hitting a named database hardest, which users are most active, or which tables generate the most load. ONLY call when the user has specified a database name — if no database name appears in the message, ask for clarification. For system-wide CPU, IO, and memory metrics by time period or application, use dba_resusageSummary instead.

Arguments: database_name - Database name to analyze. Required — do not pass empty string. user_name - User name to analyze. Leave empty for all users. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
user_nameNoUser name to analyze. Leave empty for all users.
database_nameYesDatabase name to analyze. Required — do not pass empty string.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. Description adds that persist=True materializes as volatile table and returns table name. No contradictions present.

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

Conciseness3/5

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

Description is front-loaded with purpose and usage guidelines but then repeats parameter descriptions already present in the schema. Could be more concise by omitting the parameter list.

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

Completeness2/5

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

No output schema. Description only hints at return value for persist=True. For default (persist=False), it does not explain what the tool returns. Missing details on result format or any limits.

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

Parameters3/5

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

Schema coverage is 100% with each parameter having a description. The description repeats the same information for each parameter, adding no new meaning beyond the schema. 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?

First sentence clearly states the tool's purpose: 'Identify which users and tables are driving the most query and resource activity within a specific Teradata database.' This distinguishes it from sibling tools like dba_resusageSummary.

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

Usage Guidelines5/5

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

Explicitly specifies when to use: 'Use when the user asks who is hitting a named database hardest' and when not to, with a direct alternative: 'For system-wide CPU, IO, and memory metrics... use dba_resusageSummary instead.' Also requires database name and advises to ask for clarification if missing.

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

dba_userDelayA
Read-onlyIdempotent

Report how long Teradata users waited in the query queue before their queries began executing. Use when the user asks about user wait times, queue delays, or how long users had to wait. For system-level throttling and workload management flow control events, use dba_flowControl instead.

Arguments: start_date - The start date for the query range in YYYY-MM-DD format. end_date - The end date for the query range in YYYY-MM-DD format. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
end_dateYesThe end date for the query range in YYYY-MM-DD format.
start_dateYesThe start date for the query range in YYYY-MM-DD format.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description adds value by describing the persist parameter's behavior (materializes as volatile table and returns table name). No contradiction.

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 concise sentences plus parameter list. Front-loaded with purpose and usage. Every sentence is informative and no wasted words.

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

Completeness4/5

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

Covers purpose, usage, parameters, and persist behavior. However, lacks explicit description of the return format (e.g., what the 'report' looks like). Still fairly complete for a read-only 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 coverage is 100% with descriptions for start_date, end_date, and persist. The description restates these but does not add new meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool reports how long users waited in the query queue, using specific verb 'Report' and resource 'user wait times'. It distinguishes from sibling dba_flowControl by specifying different focus areas.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool (user asks about user wait times, queue delays) and when not (system-level throttling should use dba_flowControl instead). Provides clear usage context.

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

dba_userSqlListA
Read-onlyIdempotent

Retrieve SQL statements executed by a specific named user. Use when the user asks what queries a particular person or account has been running. ONLY call when the user has explicitly named a specific user account — if no user name appears in the message, ask for clarification. NEVER call with an empty user_name. Do NOT use for SQL history by table — use dba_tableSqlList when the user asks about queries against a specific table.

Arguments: user_name - User name to filter by. Required — do not pass empty string. no_days - Number of days to look back persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
no_daysNoNumber of days to look back
persistNoIf True, materializes result as a volatile table and returns table name
user_nameYesUser name to filter by. Required — do not pass empty string.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds context about the persist parameter behavior (materializes as volatile table and returns table name). No contradiction with 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 is fairly concise with a clear purpose statement and parameter list, though the parameter list is somewhat redundant with the schema. It is well-structured and front-loaded.

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

Completeness3/5

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

The description covers input parameters well but does not describe the output format or return fields. Since there is no output schema, the description should detail what the retrieved SQL statements include (e.g., timestamp, text). This is a notable gap.

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% with descriptions for all three parameters. The description repeats and reinforces the user_name requirement and semantics, adding usage constraints beyond the schema.

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

Purpose5/5

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

The description clearly states the tool retrieves SQL statements executed by a specific user, with a specific verb and resource. It also distinguishes from the sibling dba_tableSqlList by explicitly stating when not to use it.

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

Usage Guidelines5/5

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

The description provides excellent guidance: when to use (user asks about queries by a named user), when not to use (if no user name is given, ask; never call with empty user_name; do not use for table history). It also names the alternative tool.

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

graph_analyseDatabaseA
Read-onlyIdempotent

Composite graph analysis — runs findRootObjects, connectedComponents, detectCycles, and bfsLevels in a single MCP call with ONE shared edge fetch.

This tool eliminates the scalability bottleneck of serial MCP round- trips by combining four graph analyses that would otherwise require four separate tool calls, each independently fetching the same edge set from Teradata.

Performance vs individual tools:

  • 1 SQL round-trip instead of 4 (shared edge fetch)

  • 1 MCP response instead of 4 (eliminates stdio serialisation overhead)

  • Same algorithmic complexity (O(V+E) BFS, O(α·N) Union-Find, O(V+E) DFS)

  • In-memory edge sharing: all analyses operate on the same Python list

Use this for:

  • Full database migration readiness assessment

  • Pre-migration cycle + root + wave analysis in one call

  • Dashboard data population (all four analyses needed simultaneously)

  • Any workflow that would otherwise call 3+ individual graph tools

Arguments: container_pattern - str: CSV LIKE patterns for container scope. Supports wildcards (%) and CSV format. Examples: '%SALES%', '%SALES%,%FINANCE%', 'PROD_%'

                  CRITICAL: STRING type, not array.
                  CORRECT: container_pattern="%SALES%,%FINANCE%"
                  WRONG:   container_pattern=["%SALES%", "%FINANCE%"]

exclude_objects - str: CSV LIKE patterns to exclude. Default: '' (no exclusions)

top_n_roots - int: Number of top root objects (by downstream dependent count) to include in BFS wave analysis. Default: 4

max_depth_down - int: Maximum downstream BFS hops from roots. Default: 10

max_depth_up - int: Maximum upstream BFS hops from roots. 0 = skip upstream analysis. Default: 0

edge_repository - str: Edge repository view/table conforming to the Graph Edge Contract (Src_Container_Name, Src_Object_Name, Src_Kind, Tgt_Container_Name, Tgt_Object_Name, Tgt_Kind columns). Call graph_edgeContractDDL to generate one. Required parameter — no default.

Returns: ResponseType: single response containing all four analyses:

{ "root_objects": { "objects": [...], "summary": {...} }, "components": { "node_details": [...], "summaries": [...], "stats": [...] }, "cycles": { "details": [...], "summaries": [...], "stats": [...] }, "bfs_waves": { "nodes": [...], "cycle_candidates": [...], "summary": {...} }, "edge_stats": { "total_edges": N, "fetch_time_ms": N } }

Example calls:

Full analysis of Sales and Finance databases

handle_graph_analyseDatabase( conn=connection, container_pattern="%SALES%,%FINANCE%", edge_repository="MY_LINEAGE_DB.EdgeRepository" )

Single database family with top 8 roots

handle_graph_analyseDatabase( conn=connection, container_pattern="%FINANCE%", top_n_roots=8, edge_repository="MY_LINEAGE_DB.EdgeRepository" )

Exclude sandbox schemas

handle_graph_analyseDatabase( conn=connection, container_pattern="PROD_%,STAGE_%", exclude_objects="SANDBOX%,%.temp_%", edge_repository="MY_LINEAGE_DB.EdgeRepository" )

ParametersJSON Schema
NameRequiredDescriptionDefault
top_n_rootsNo
max_depth_upNo
max_depth_downNo
edge_repositoryNo
exclude_objectsNo
container_patternYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the tool is safe. The description adds value by explaining the shared edge fetch, in-memory edge sharing, algorithmic complexity, and performance advantages over serial calls. No contradictions with 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 is well-structured with clear sections: purpose, performance, use cases, arguments, return format, and examples. It is front-loaded. However, it is relatively long; some redundancy exists in the performance section, but it's justified by the tool's complexity.

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?

Despite no output schema, the description includes a detailed return format with JSON example. All parameters are documented. The tool's relationship to siblings (composite vs individual) is clear. Context signals (6 params, no output schema) are fully addressed.

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

Parameters5/5

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

Schema coverage is 0%, but the description compensates fully: each parameter is explained with types, defaults, examples, and critical warnings (e.g., container_pattern must be string, not array). The edge_repository parameter is described with a reference to another tool. This is exemplary.

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

Purpose5/5

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

The description clearly defines the tool as a composite graph analysis combining four individual analyses into one call, with a specific verb ('runs') and resource ('graph analyses'). It distinguishes from siblings (e.g., graph_bfsLevels) by highlighting the composite nature and shared edge fetch.

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

Usage Guidelines5/5

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

Explicitly lists use cases such as full migration readiness assessment and dashboard data population. Contrasts with individual tools by noting performance benefits and suggests using this when 3+ individual calls would be needed. Includes example calls with different scenarios.

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

graph_bfsLevelsA
Read-onlyIdempotent

Compute BFS shortest-path hop distances from one or more root nodes.

Pure-Python implementation — no stored procedure required.

WHEN TO USE THIS TOOL vs graph_traceLineage:

Use graph_bfsLevels when asked to:

  • Sequence objects for deployment or migration (ORDER BY downstream_level gives correct topological deployment order for root objects)

  • Group objects into migration waves (nearest_root identifies which of the input root tables each object belongs to)

  • Find which migration root table each object is closest to across a multi-root migration scope

  • Identify cycle members by depth (direction='BOTH' nodes with unequal absolute upstream/downstream levels are cycle candidates)

  • Count objects within N hops of a change (blast-radius sizing)

  • Answer "how far is object X from the migration root tables?"

Do NOT use graph_bfsLevels for general lineage tracing, impact path analysis, or questions about which specific objects depend on which. Use graph_traceLineage for those — it returns the full edge set with relationship detail. graph_bfsLevels returns distances and wave groupings, not dependency paths or edge detail.

KEY DISTINCTION — root_node_list accepts EXACT FQ names only (no wildcards). Use graph_findRootObjects first to identify the seed objects, then pass their exact FQ names here.

Arguments: root_node_list - str: CSV of exact fully-qualified root node names. No wildcards — exact names only.

                  SINGLE ROOT:
                  'DEV01_StGeo_STD_T.mortgage_account'

                  MULTIPLE ROOTS (CSV):
                  'DEV01_StGeo_STD_T.mortgage_account,
                   DEV01_StGeo_STD_T.mortgage_borrower,
                   DEV01_StGeo_STD_T.mortgage_property'

                  CRITICAL: Exact FQ names, no wildcards.
                  Use graph_findRootObjects or
                  graph_traceLineage first to discover names.

max_depth_up - int: Maximum upstream hops to traverse. 0 = skip upstream analysis entirely. Default: 10

                  Upstream means "what this object DEPENDS ON" —
                  its sources, prerequisites, and ancestors.
                  For root objects with in-degree zero, upstream_level
                  will be NULL for all non-root nodes (correct).

max_depth_down - int: Maximum downstream hops to traverse. 0 = skip downstream analysis entirely. Default: 10

                  Downstream means "what DEPENDS ON this object" —
                  its consumers, dependents, and impact radius.
                  For root objects with in-degree zero, downstream_level
                  will show positive values for all consumers (correct).

exclude_objects - str: CSV of FQ object name LIKE patterns to exclude. Matched against both Src and Tgt sides of every edge. Python fnmatch is used for pattern matching (% → *). Example: 'DFJ%,C_D02%,%.temp_%' Default: '' (no exclusions)

include_containers - str: CSV of container name LIKE patterns to include. Only edges where BOTH Src and Tgt containers match at least one pattern are traversed. Python fnmatch used for matching (% → *). Empty = all containers included. Example: 'DEV01_StGeo%,MF_STGEO%,TABLEAU%,POWERBI%' Default: '' (all containers)

edge_repository - str: Edge repository view/table conforming to the Required parameter — no default.

Returns: ResponseType: formatted response with BFS node results + metadata. Schema is identical to handle_graph_bfsLevels (SP-based tool).

Response structure: { "nodes": [ { "node": "DEV01_StGeo_STD_T.mortgage_account", "container_name": "DEV01_StGeo_STD_T", "object_name": "mortgage_account", "object_kind": "Table", "upstream_level": None, // None (NULL) if unreachable or skipped "downstream_level": 0, // 0 for root, positive for consumers "nearest_root": "DEV01_StGeo_STD_T.mortgage_account", "direction": "ROOT", // ROOT / U / D / BOTH "is_root": "Y" }, ... ], "cycle_candidates": [...], // direction='BOTH' nodes with unequal // absolute upstream/downstream levels "summary": { "total_nodes": 46, "root_nodes": 3, "upstream_only": 12, "downstream_only": 28, "both_directions": 3, "cycle_candidates": 1, "max_upstream_depth": 4, "max_downstream_depth": 5, "nodes_per_nearest_root": {"DB.Root1": 20, "DB.Root2": 26}, "object_kind_counts": {"Table": 10, "View": 22, "Macro": 8, ...} } }

direction values: ROOT - One of the input root nodes U - Reachable upstream only (negative upstream_level) D - Reachable downstream only (positive downstream_level) BOTH - Reachable in both directions — possible cycle member. Unequal absolute levels indicate a back-edge (cycle). Equal absolute levels indicate a shared dependency.

Technical Implementation Notes:

  • One SQL round-trip to fetch all edges matching the container/exclusion filters. All BFS computation is then done in Python memory.

  • Standard queue-based BFS (O(V+E)) — optimal for unweighted graphs. This is more correct than the original Bellman-Ford style SQL relaxation loop that the SP inherited from the notebook.

  • Multi-source BFS: all root nodes are seeded simultaneously at level 0. Each non-root node settles at the distance to its nearest root, with ties broken deterministically by lexicographic root name order.

  • Upstream BFS follows Src→Tgt edges to discover Src-side ancestors.

  • Downstream BFS follows Tgt→Src edges to discover Tgt-side consumers.

  • This direction convention matches the corrected SP (Option B fix): upstream_level = NULL for root objects with in-degree zero (correct) downstream_level = positive for all consumers (correct)

  • Filter application order:

    1. SQL WHERE clause: fetch only edges matching include_containers (both Src and Tgt containers must match at least one pattern)

    2. Python post-filter: exclude edges where either endpoint matches an exclude_objects pattern (applied before building adjacency)

    3. BFS depth cap: enforced during queue processing

  • Node metadata (container_name, object_name, object_kind) is derived from the edge set and stored in a node registry during the fetch phase.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_depth_upNo
max_depth_downNo
root_node_listYes
edge_repositoryNo
exclude_objectsNo
include_containersNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint and idempotentHint, and the description adds substantial behavioral details: pure-Python BFS, one SQL round-trip, multi-source BFS, filter application order, direction conventions, and node metadata derivation. No contradiction with 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 is well-organized with clear headings and structure, though lengthy. Front-loaded with purpose and usage, every section adds value. Slightly verbose in technical implementation details but still effective.

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

Completeness5/5

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

Given the tool's complexity (6 parameters, no output schema), the description covers all aspects: return structure with example, direction values, cycle candidates, summary metadata, and technical implementation notes. It enables the agent to use the tool correctly without ambiguity.

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

Parameters5/5

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

Schema description coverage is 0%, but the description provides thorough explanations for each parameter, including examples, defaults, and behavioral notes (e.g., exact names requirement for root_node_list, fnmatch usage for exclude_objects). This fully compensates for the schema gap.

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 starts with a clear verb+resource statement: 'Compute BFS shortest-path hop distances from one or more root nodes.' It also explicitly contrasts with sibling tool graph_traceLineage, providing distinct usage scenarios.

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

Usage Guidelines5/5

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

The description includes a detailed 'WHEN TO USE THIS TOOL vs graph_traceLineage' section with explicit use cases and non-use cases. It also gives a key distinction about root_node_list requiring exact names and suggests using graph_findRootObjects first.

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

graph_connectedComponentsA
Read-onlyIdempotent

Identify all Weakly Connected Components (WCC) in the dependency graph.

Pure-Python implementation — no stored procedure required. Issues a single SQL SELECT to fetch the scoped edge set, then performs Union-Find WCC partitioning entirely in the MCP server process.

A connected component is a maximal set of nodes where every node can reach every other node when edge direction is ignored. This partitions the graph into isolated sub-graphs.

Use this tool for:

  • Understanding graph structure and partitioning

  • Identifying isolated sub-graphs

  • Scoping downstream impact analysis to a single component

  • Pre-filtering before cycle detection (cycles exist only within a component)

  • Identifying "islands" of related objects for migration or refactoring

  • Estimating blast radius

Arguments: container_pattern - str: CSV LIKE patterns for container scope. Supports wildcards (%) and CSV format. Examples: '%WBC%', '%WBC%,%StGeo%', 'DEV01_%,DEV02_%'

                  CRITICAL: STRING type, not array.
                  CORRECT: container_pattern="%WBC%,%StGeo%"
                  WRONG:   container_pattern=["%WBC%", "%StGeo%"]

exclude_objects - str: CSV LIKE patterns to exclude. Matches against container name (or DB.Object if the pattern contains a dot). Default: '' (no exclusions)

edge_repository - str: Edge repository view/table conforming to the Graph Edge Contract (Src_Container_Name, Src_Object_Name, Src_Kind, Tgt_Container_Name, Tgt_Object_Name, Tgt_Kind columns). For AI-Native Data Products use: '{ProductName}_Semantic.lineage_graph' Call graph_edgeContractDDL to generate a new one. Required — no default.

Returns: ResponseType: formatted response with connected component results.

Response structure: { "node_details": [...], // One row per node with Component_Id "component_summaries": [...], // One row per component "summary_stats": [...] // Single aggregate row }

node_details row fields: Node_FQ, DatabaseName, ObjectName, Component_Id, Object_Kind

component_summaries row fields: Component_Id, Node_Count, Node_List

summary_stats row fields: Component_Count, Node_Count, Edge_Count, Largest_Component, Smallest_Component, Singleton_Count, Summary_Message

ParametersJSON Schema
NameRequiredDescriptionDefault
edge_repositoryNo
exclude_objectsNo
container_patternYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly and idempotent. The description adds implementation details (pure-Python, Union-Find, single SQL SELECT) and clarifies no stored procedure, going beyond 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?

Well-structured with sections, parameters, and return structure. Every sentence adds value, though slightly verbose; could be trimmed slightly without losing clarity.

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

Completeness5/5

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

Given the algorithmic complexity, the description covers input, output format (with field lists), use cases, and edge conditions. No output schema, but response structure is detailed enough.

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

Parameters5/5

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

Despite 0% schema coverage, the description fully explains all three parameters with format, examples, critical warnings (string not array), and defaults. This provides excellent semantic value.

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?

Clearly states it identifies Weakly Connected Components in a dependency graph, explains what a component is, and distinguishes from sibling graph tools (bfsLevels, detectCycles, etc.).

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?

Includes a 'Use this tool for:' list covering six concrete use cases. Does not explicitly exclude alternatives but provides enough context for selection.

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

graph_detectCyclesA
Read-onlyIdempotent

Detect circular dependencies (cycles) in the dependency graph.

Pure-Python implementation — no stored procedure required. Issues a single SQL SELECT to fetch the scoped edge set, then performs WCC partitioning followed by iterative DFS cycle detection entirely in the MCP server process.

Use this tool for:

  • Validating graph integrity (DAG property)

  • Finding objects that form circular references

  • Identifying stub-then-replace code patterns

  • Debugging topological sort hangs

  • Pre-deployment cycle checks

Arguments: container_pattern - str: CSV LIKE patterns for container scope. Supports wildcards (%) and CSV format. Examples: 'DFJ%' — single database family '%WBC%,%StGeo%' — multiple families 'DEV01_%,DEV02_%' — multiple prefixes

exclude_objects - str: CSV LIKE patterns to exclude from the scan. Matches against container name (or DB.Object if the pattern contains a dot). Default: '' (no exclusions)

edge_repository - str: Edge repository view/table conforming to the Graph Edge Contract (Src_Container_Name, Src_Object_Name, Src_Kind, Tgt_Container_Name, Tgt_Object_Name, Tgt_Kind columns). For AI-Native Data Products use: '{ProductName}_Semantic.lineage_graph' Call graph_edgeContractDDL to generate a new one. Required — no default.

Returns: ResponseType: formatted response with cycle detection results.

Response structure: { "cycle_details": [...], // One row per node per cycle "cycle_summaries": [...], // One row per cycle with path string "summary_stats": [...] // Single aggregate row }

cycle_details row fields: Cycle_Id, Cycle_Pos, Node_FQ, Cycle_Length, Component_Id

cycle_summaries row fields: Cycle_Id, Cycle_Length, Component_Id, Cycle_Path

summary_stats row fields: Cycle_Count, Total_Nodes_In_Cycles, Components_With_Cycles, Edge_Count, Components_Scanned, Summary_Message

ParametersJSON Schema
NameRequiredDescriptionDefault
edge_repositoryNo
exclude_objectsNo
container_patternYes

TDQS

A4.6/5.0
Behavior4/5

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

The description adds behavioral details beyond the readOnlyHint and idempotentHint annotations: 'Pure-Python implementation', 'Issues a single SQL SELECT', 'performs WCC partitioning followed by iterative DFS cycle detection entirely in the MCP server process.' It also describes the response structure, providing transparency about execution and output.

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

Conciseness5/5

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

The description is well-structured with sections for purpose, implementation notes, use cases, arguments, and returns. Each sentence adds value, and the information is front-loaded with the main purpose. It is concise yet comprehensive.

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?

Despite the absence of an output schema, the description fully details the response structure with field names and types. It covers purpose, usage, parameters, behavior, and output, making it self-contained and complete for the agent to understand and invoke the tool correctly.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by documenting each parameter with format, examples, defaults, and constraints. For instance, container_pattern is explained with CSV LIKE patterns and examples, and edge_repository references the Graph Edge Contract and links to another tool.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Detect circular dependencies (cycles) in the dependency graph.' This is a specific verb+resource combination that distinguishes it from sibling tools like graph_traceLineage or graph_connectedComponents.

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

Usage Guidelines4/5

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

The description lists five explicit use cases (e.g., 'Validating graph integrity (DAG property)', 'Debugging topological sort hangs') and mentions sibling tool graph_edgeContractDDL for generating the edge repository. It provides clear context for when to use this tool, though it lacks explicit comparisons to alternatives.

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

graph_edgeContractDDLA
Read-onlyIdempotent

Generate DDL for a Graph Edge Contract-conforming table or view.

This tool does NOT require a database connection — it generates DDL text from templates. No SQL is executed. The conn parameter is accepted for ModuleLoader calling convention compatibility but is not used.

Required columns in the generated schema (6): Src_Container_Name, Src_Object_Name, Src_Kind, Tgt_Container_Name, Tgt_Object_Name, Tgt_Kind

Optional enrichment columns (2): Edge_Relationship — nature of the edge (ETL_INPUT, ETL_OUTPUT, DIRECT…) Transformation_Type — process category (ETL, FEATURE_ENG, AGGREGATION…) These are ignored by graph analysis tools but useful for visualisation.

AI-Native Data Product shortcut: If you are working within an AI-Native Data Product, the view {ProductName}Semantic.lineage_graph (Observability Module v1.5) already conforms to this contract. You do not need to generate DDL — pass that view's fully-qualified name directly as edge_repository on any graph* tool. Example: edge_repository='StGeoMortgage_Semantic.lineage_graph'

Arguments: conn: TeradataConnection (unused — accepted for ModuleLoader compatibility). target_database: Database in which to create the edge repository. For AI-Native Data Products this is typically {ProductName}_Semantic. Example: 'StGeoMortgage_Semantic' object_name: Name for the edge table/view. Default: 'EdgeRepository' output_type: 'TABLE' or 'VIEW'. TABLE: generates CREATE TABLE DDL + separate sample DML. Includes all 6 required + 2 optional columns. VIEW: generates a CREATE VIEW template for mapping an existing lineage source to all 8 contract columns. Default: 'TABLE'

Returns: list[dict]: Response payload containing: - ddl: DDL script (CREATE TABLE/VIEW + COMMENTs) - sample_dml: Sample INSERT statements + validation query (TABLE only; absent for VIEW) - output_type: 'TABLE' or 'VIEW' - contract_version: Contract version string

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameNoName for the edge table/view. Default: 'EdgeRepository'EdgeRepository
output_typeNo'TABLE' or 'VIEW'. TABLE: generates CREATE TABLE DDL + separate sample DML. Includes all 6 required + 2 optional columns. VIEW: generates a CREATE VIEW template for mapping an existing lineage source to all 8 contract columns. Default: 'TABLE'TABLE
target_databaseYesDatabase in which to create the edge repository. For AI-Native Data Products this is typically {ProductName}_Semantic. Example: 'StGeoMortgage_Semantic'

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true and idempotentHint=true. The description aligns perfectly: 'does NOT require a database connection — it generates DDL text from templates. No SQL is executed.' It also explains the conn parameter is unused, adding transparency beyond annotations. No contradiction.

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

Conciseness5/5

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

Well-structured: starts with core purpose, then details required/optional columns, provides a usage shortcut, lists arguments with examples, and describes return value. No fluff; every sentence adds value.

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?

Covers all aspects: behavioral (no DB connection), parameter semantics, return structure, and a practical usage shortcut. For a tool with this complexity and rich annotations, the description is complete and leaves no ambiguity.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value with examples (e.g., 'StGeoMortgage_Semantic'), default values, and differentiation between TABLE and VIEW output types. This extra context justifies a 4.

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

Purpose5/5

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

The description clearly states the tool 'generates DDL for a Graph Edge Contract-conforming table or view,' specifying a specific verb and resource. It distinguishes from sibling tools like graph_analyseDatabase by emphasizing it is for DDL generation, not analysis.

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

Usage Guidelines5/5

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

Explicit when-to-use guidance: 'If you are working within an AI-Native Data Product... you do not need to generate DDL — pass that view... directly.' Provides clear context for when to use this tool versus relying on an existing view, and explains the tool's uniqueness (no database connection needed).

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

graph_findRootObjectsA
Read-onlyIdempotent

Find root objects (objects with no upstream dependencies) in specified containers.

Root objects are ideal starting points for downstream impact analysis as they represent the foundational data sources that nothing else depends upon.

Use this for:

  • Finding starting points for downstream impact analysis

  • Identifying source tables and base objects in data pipelines

  • Discovering independent objects that can be safely analysed in isolation

  • Understanding data flow origins in a schema or database

  • Planning migration or refactoring by identifying foundation objects

Arguments: container_pattern - str: Database/schema pattern(s) to search. SUPPORTS WILDCARDS (%) and CSV.

                  IMPORTANT: This is a STRING parameter (type: str), not an array.
                  Pass multiple patterns as a single comma-separated string.

                  SINGLE CONTAINER:
                  'DEV01_StGeo_STD_T' - Specific database

                  WILDCARDS (%):
                  '%WBC%' - All databases containing WBC
                  'DEV01_%' - All databases starting with DEV01_
                  '%_STD_T' - All databases ending with _STD_T

                  MULTIPLE CONTAINERS (CSV format):
                  '%WBC%,%StGeo%' - All WBC and StGeo databases
                  'DEV01_StGeo_STD_T,DEV02_WBC_STD_T' - Specific databases
                  'DEV01_%,DEV02_%' - All DEV01 and DEV02 databases

                  WHITESPACE HANDLING:
                  Whitespace is automatically trimmed, so these are equivalent:
                  ✅ '%WBC%,%StGeo%' (no spaces)
                  ✅ '%WBC%, %StGeo%' (spaces after commas - OK)

                  HOW TO PASS IN CODE:
                  Python: container_pattern="%WBC%,%StGeo%"
                  JSON: {"container_pattern": "%WBC%,%StGeo%"}

                  CRITICAL: This is a STRING type parameter.
                  ✅ CORRECT: Pass as string: container_pattern="%WBC%,%StGeo%"
                  ❌ WRONG: Pass as array: container_pattern=["%WBC%", "%StGeo%"]

exclude_objects - str: Comma-separated list of patterns to exclude (SERVER-SIDE filter). Matches against DatabaseName.ObjectName format.

                  Common exclusion patterns:
                  'PRD_%,PROD_%' - Exclude production databases
                  '%.temp_%,%.bak_%' - Exclude temporary and backup objects
                  'DFJ%,C_D02%' - Exclude personal/sandbox schemas

                  Performance: Reduces result set and improves query time
                  Default: '' (empty string = no exclusions)

edge_repository - str: Edge repository table/view conforming to the Required parameter — no default.

object_types - str: Comma-separated list of object types to include (optional filter). Examples: 'T' (tables), 'V' (views), 'P' (procedures), 'M' (macros) Multiple: 'T,V' (tables and views only) Empty = all object types included Default: '' (all types)

return_format - str: Output format: 'detailed' or 'summary' 'detailed' (default): Full object list with metadata 'summary': High-level statistics and counts only Default: 'detailed'

Returns: ResponseType: formatted response with root objects + metadata

Example queries that trigger this tool:

  • "Which objects in WBC and StGeo databases have no dependencies?"

  • "Find root objects in DEV01 databases"

  • "What are the starting points for impact analysis in StGeo?"

  • "Show me base tables with no upstream dependencies"

  • "Which objects should I start analysing for downstream impact?"

Example calls:

Find root objects in WBC and StGeo databases

handle_graph_findRootObjects( conn=connection, container_pattern="%WBC%,%StGeo%" )

Find only root tables (no views/procedures)

handle_graph_findRootObjects( conn=connection, container_pattern="DEV01_%", object_types="T" )

Find root objects excluding production and temporary objects

handle_graph_findRootObjects( conn=connection, container_pattern="%WBC%,%StGeo%", exclude_objects="PRD_%,%.temp_%,%.bak_%" )

Quick summary of root objects

handle_graph_findRootObjects( conn=connection, container_pattern="DEV01_StGeo_STD_T", return_format="summary" )

Technical Implementation:

  • Queries the edge repository to find all objects in specified containers

  • Identifies objects that appear as sources but never as targets

  • These are "root" objects - they have no upstream dependencies

  • Results are filtered by exclude_objects and object_types parameters

  • Returns list of root objects suitable for downstream impact analysis

ParametersJSON Schema
NameRequiredDescriptionDefault
object_typesNo
return_formatNodetailed
edge_repositoryNo
exclude_objectsNo
container_patternYes

TDQS

A4.8/5.0
Behavior5/5

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

The description adds behavioral details beyond annotations (readOnlyHint, idempotentHint): it explains the read-only query nature, server-side filtering, performance implications, and return formats. No contradiction with 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?

The description is well-structured with clear sections (purpose, use cases, arguments, returns, examples). Each sentence adds value despite length. Information is front-loaded.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, no output schema), the description is remarkably complete: it explains all parameters, provides example calls, technical implementation, and return format. No gaps remain.

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

Parameters5/5

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

The input schema has 0% parameter descriptions, so the description fully compensates with extensive details for each parameter: examples, wildcard usage, CSV format, whitespace handling, how to pass in code, and common patterns. This is extremely helpful.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Find root objects (objects with no upstream dependencies) in specified containers.' It uses specific verbs and resources, lists multiple use cases, and distinguishes from sibling tools like graph_analyseDatabase and graph_traceLineage.

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

Usage Guidelines4/5

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

The description provides explicit 'Use this for:' scenarios, but does not directly state when NOT to use it or compare to alternatives. However, the context is clear enough for an agent to decide.

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

graph_traceLineageA
Read-onlyIdempotent

Analyse object dependencies in Teradata. Supports wildcards (%) and CSV patterns.

Hybrid implementation — no stored procedure required. Python constructs Teradata recursive CTEs that execute entirely server-side. Only the reachable subgraph crosses the network — not the full edge table.

Examples: 'DB.Table' (single), '%WBC%.%' (wildcard), 'DB.T1,DB.T2' (CSV)

Finds upstream dependencies (what the object depends on) and downstream dependents (what depends on the object). Returns nodes and edges representing the dependency subgraph.

When multiple patterns are provided via CSV, one upstream CTE and one downstream CTE is executed per pattern. Results are merged and deduplicated by Python before assembly.

Use this for:

  • Impact analysis: "What breaks if I change or drop this object?"

  • Lineage tracing: "Where does this data come from?"

  • Dependency discovery: "What does this object use?"

  • Pre-deployment validation: checking impacts before making changes

Arguments: object_name - str: Object name pattern(s). Supports wildcards (%) and CSV format. STRING type — not an array.

                   Single:   'DEV01_StGeo_STD_T.mortgage_account'
                   Wildcard: '%WBC%.%'
                   Multiple: '%WBC%.%,%StGeo%.%'

max_depth_up - int: Maximum levels to traverse upstream (0-10). 0 = no upstream analysis. Default: 3

max_depth_down - int: Maximum levels to traverse downstream (0-10). 0 = no downstream analysis. Default: 3

exclude_objects - str: CSV LIKE patterns to exclude. Matches against DB.Object format. Example: 'PRD_%,%.temp_%' Default: '' (no exclusions)

include_containers - str: CSV of container LIKE patterns to include (whitelist). Empty = all containers. Default: '' (all containers)

edge_repository - str: Edge repository view/table conforming to the Required parameter — no default.

return_format - str: 'detailed' (default), 'summary', or 'edges_only'

Returns: ResponseType: formatted response with dependency analysis results.

detailed response structure: { "nodes": [...], // Unique nodes (deduplicated) "upstream_edges": [...], // One row per upstream edge "downstream_edges":[...], // One row per downstream edge "summary": {...} // Aggregate statistics }

Edge row fields: DependentObjectDBName, DependentObjectName, FQDependentObjectName, ReferencedObjectDBName, ReferencedObjectName, FQReferencedObjectName, Src_Kind, Tgt_Kind, Depth, DependencyPath

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYes
max_depth_upNo
return_formatNodetailed
max_depth_downNo
edge_repositoryNo
exclude_objectsNo
include_containersNo

TDQS

A4.7/5.0
Behavior5/5

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

The description adds significant behavioral details beyond annotations: hybrid implementation, Python constructing recursive CTEs, only reachable subgraph crossing network, per-pattern CTE execution, and deduplication.

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

Conciseness4/5

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

The description is well-structured with sections and bullet points, but length could be slightly reduced without losing information.

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

Completeness5/5

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

Given the complexity (7 parameters, no output schema), the description is thorough, detailing response structure, edge row fields, and behavior for multiple patterns.

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

Parameters5/5

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

With 0% schema description coverage, the description compensates fully by explaining each parameter's format, constraints, defaults, and use examples, adding substantial meaning.

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

Purpose5/5

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

The description explicitly states the tool analyzes object dependencies in Teradata, supporting wildcards and CSV patterns. It clearly distinguishes from sibling graph tools by focusing on lineage tracing and impact analysis.

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

Usage Guidelines4/5

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

The description provides explicit use cases (impact analysis, lineage tracing, etc.) but does not specify when not to use the tool or mention alternative sibling tools.

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

plot_line_chartA
Read-onlyIdempotent

Generate a line chart that reads directly from a Teradata table — do NOT use base_readQuery to pre-fetch data first. Specify the table in table_name, the x-axis column in labels (typically a date or time field), and one or more y-axis numeric columns in columns. Use for time-series, trend lines, or sequential data. Do NOT use for proportional category breakdowns — use plot_pie_chart or plot_polar_chart. Do NOT use for multi-dimensional spider comparisons — use plot_radar_chart.

PARAMETERS: table_name: Required Argument. Specifies the name of the table to generate the line chart. Types: str

labels:
    Required Argument.
    Specifies the x-axis column (typically date or time).
    Types: str

columns:
    Required Argument.
    Specifies the y-axis numeric column(s) for the line chart.
    Types: List[str]

RETURNS: dict

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsYes Required Argument. Specifies the x-axis column (typically date or time). Types: str
columnsYes Required Argument. Specifies the y-axis numeric column(s) for the line chart. Types: List[str]
table_nameYes Required Argument. Specifies the name of the table to generate the line chart. Types: str

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. Description adds that it reads directly from a database table, which is consistent and provides context about data source. No contradictions. Score reflects additional context beyond 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?

Description is fairly concise with front-loaded key behavior. The included parameter section repeats schema information, which is slightly redundant but not excessive. Clear structure with usage instructions first.

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

Completeness4/5

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

Given no output schema, description adequately explains what the tool does, what it reads, and when to use it. Missing return format details, but for a charting tool, it's sufficient. Completeness for a simple tool with good annotations.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. Description adds context that labels is 'typically a date or time field' and columns are 'numeric', which adds meaning beyond the schema's generic descriptions. Also clarifies table_name as the table to generate chart from.

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

Purpose5/5

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

Description clearly states it generates a line chart from a Teradata table, with explicit verb 'generate' and resource 'line chart'. It distinguishes from siblings by specifying not to use for proportional breakdowns (use plot_pie_chart or plot_polar_chart) or spider comparisons (use plot_radar_chart).

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

Usage Guidelines5/5

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

Provides explicit when-to-use (time-series, trend lines, sequential data) and when-not-to-use (proportional categories, spider comparisons) with alternatives. Also instructs not to use base_readQuery to pre-fetch data, offering a clear directive.

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

plot_pie_chartA
Read-onlyIdempotent

Generate a pie chart that reads directly from a Teradata table — do NOT use base_readQuery to pre-fetch or aggregate data first. Specify the table in table_name, the category column in labels, and the numeric value column in column. Use when the user asks for proportions, shares, or how a total breaks down by category. For polar area charts, use plot_polar_chart. For time-series trends, use plot_line_chart.

PARAMETERS: table_name: Required Argument. Specifies the name of the table to generate the pie chart. Types: str

labels:
    Required Argument.
    Specifies the category column for labels.
    Types: str

column:
    Required Argument.
    Specifies the numeric value column for the pie chart.
    Types: str

RETURNS: dict

ParametersJSON Schema
NameRequiredDescriptionDefault
columnYes Required Argument. Specifies the numeric value column for the pie chart. Types: str
labelsYes Required Argument. Specifies the category column for labels. Types: str
table_nameYes Required Argument. Specifies the name of the table to generate the pie chart. Types: str

TDQS

A4.2/5.0
Behavior4/5

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

Given annotations already indicate readOnlyHint and idempotentHint, the description adds valuable context: it reads directly from the table without pre-fetching, and instructs not to use base_readQuery. This goes beyond mere restatement.

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 concise with 4 sentences, front-loading the purpose. It uses backticks for parameters and includes usage guidance. It is slightly longer than necessary but still efficient.

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

Completeness5/5

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

For a simple 3-parameter tool with rich annotations, the description fully covers purpose, usage, parameters, and alternatives. It leaves little ambiguity for the agent, making it highly complete.

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

Parameters3/5

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

Schema coverage is 100% and the schema descriptions already specify each parameter's role. The main description integrates these roles but adds no new semantic information beyond what the schema provides. Baseline score of 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?

The description clearly states 'Generate a pie chart that reads directly from a Teradata table' with specific verb and resource. It distinguishes from siblings by explicitly referencing plot_polar_chart and plot_line_chart for alternative purposes.

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

Usage Guidelines4/5

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

The description tells when to use: 'when the user asks for proportions, shares, or how a total breaks down by category'. It provides explicit alternatives for polar and line charts, and warns against using base_readQuery. However, it does not exhaustively cover all sibling tools.

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

plot_polar_chartA
Read-onlyIdempotent

Generate a polar area chart that reads directly from a Teradata table — do NOT use base_readQuery first. Specify the table in table_name, the category column in labels, and the numeric value column in column. Use when the user explicitly asks for a polar chart or polar area chart. For standard pie-style breakdowns, use plot_pie_chart instead.

PARAMETERS: table_name: Required Argument. Specifies the name of the table to generate the polar chart. Types: str

labels:
    Required Argument.
    Specifies the category column for labels.
    Types: str

column:
    Required Argument.
    Specifies the numeric value column for the polar chart.
    Types: str

RETURNS: dict

ParametersJSON Schema
NameRequiredDescriptionDefault
columnYes Required Argument. Specifies the numeric value column for the polar chart. Types: str
labelsYes Required Argument. Specifies the category column for labels. Types: str
table_nameYes Required Argument. Specifies the name of the table to generate the polar chart. Types: str

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds that it reads directly from a table and should not be preceded by base_readQuery, providing extra behavioral context beyond 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?

The description is a single focused paragraph with clear sections for parameters and returns. Every sentence serves a purpose, no fluff, and front-loaded with the primary action.

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

Completeness4/5

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

For a simple three-parameter tool with no output schema, the description covers what the tool does, its parameters, and when to use it. Missing details about the returned dict format, but overall sufficient for agent selection and invocation.

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

Parameters4/5

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

Schema coverage is 100% so baseline is 3. The description not only lists parameters but also explains their roles (table_name for table, labels for category, column for numeric value), adding meaning beyond the schema's attribute descriptions.

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

Purpose5/5

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

The description clearly states it 'Generate a polar area chart' from a Teradata table, specifying the resource and verb. It distinguishes from sibling plot_pie_chart, and explicitly names the three parameters.

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

Usage Guidelines5/5

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

Explicit usage instructions: 'Use when the user explicitly asks for a polar chart or polar area chart' and advises against using base_readQuery first. Directs standard pie breakdowns to plot_pie_chart.

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

plot_radar_chartA
Read-onlyIdempotent

Generate a radar chart (spider chart or web chart) that reads directly from a Teradata table — do NOT use base_readQuery to pre-fetch data first. Specify the table in table_name, the category column in labels, and one or more value columns in columns. Use when the user asks for a spider chart, radar chart, web chart, or multi-dimensional comparison across categories. For time-series or trend data, use plot_line_chart instead.

PARAMETERS: table_name: Required Argument. Specifies the name of the table to generate the radar chart. Types: str

labels:
    Required Argument.
    Specifies the category column for labels.
    Types: str

columns:
    Required Argument.
    Specifies the value column(s) for the radar chart.
    Types: str | List[str]

RETURNS: dict

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsYes Required Argument. Specifies the category column for labels. Types: str
columnsYes Required Argument. Specifies the value column(s) for the radar chart. Types: str | List[str]
table_nameYes Required Argument. Specifies the name of the table to generate the radar chart. Types: str

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already provide readOnlyHint and idempotentHint. The description adds that it reads directly from a Teradata table and warns against pre-fetching, which is valuable behavioral context beyond annotations. However, it does not describe what the returned chart looks like.

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

Conciseness5/5

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

The description is very concise: two sentences plus a brief parameter overview. It front-loads the purpose and then provides usage guidance without any redundant or unnecessary information. Every sentence adds value.

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

Completeness4/5

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

For a simple chart tool with 3 parameters and no output schema, the description covers purpose, usage, parameters, and an alternative. It lacks details about the return format (e.g., URL or image), but given the simplicity and annotations, it is reasonably complete.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning by explaining the role of each parameter (table_name as source, labels as category column, columns as values) and how they map to chart elements, exceeding 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?

The description clearly states it generates a radar chart from a Teradata table, distinguishes from siblings by noting to use plot_line_chart for time-series, and mentions alternative names like spider chart. The verb 'generate' and resources are explicit.

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

Usage Guidelines5/5

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

Explicitly tells when to use (user asks for spider/radar/web chart or multi-dimensional comparison) and when not to (time-series/trend data → plot_line_chart). Also includes a strong directive not to pre-fetch data using base_readQuery.

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

qlty_columnSummaryA
Read-onlyIdempotent

Get summary statistics for ALL columns in a table in a single call. Use when the user asks for an overview, profile, or summary of every field in a table. For detailed statistics on a SINGLE specific column (min, max, percentiles), use qlty_univariateStatistics instead.

Arguments: database_name - Name of the database (optional) table_name - Table name to analyze persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable name to analyze
database_nameNoName of the database (optional)

TDQS

A3.5/5.0
Behavior1/5

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

The description states that if persist=True, it 'materializes result as a volatile table and returns table name', implying a write side effect. However, annotations declare readOnlyHint=true and idempotentHint=true. The description contradicts these annotations by describing a potentially state-changing behavior. According to scoring rules, this contradiction results in a score of 1.

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 two paragraphs: first for purpose/usage, second for arguments. It is reasonably concise and front-loaded, though the argument list is redundant with the schema. No unnecessary sentences. Slightly verbose but acceptable.

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

Completeness2/5

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

The description omits what the summary statistics actually contain; it only says 'summary statistics for ALL columns' without specifying which statistics (mean, count, etc.). Since there is no output schema, the description should elaborate on the return format. Additionally, the contradiction with annotations creates confusion about the tool's side effects. For a tool with no output schema and a complex return, more detail is needed.

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% (all three parameters described in schema). The description lists the arguments but only restates information from the schema without adding new semantics. Baseline is 3, and the description does not exceed this.

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

Purpose5/5

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

The description clearly states 'Get summary statistics for ALL columns in a table in a single call' and distinguishes from the sibling tool qlty_univariateStatistics for single column stats. The verb 'Get' and resource 'summary statistics for all columns' are specific and unambiguous.

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

Usage Guidelines5/5

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

Explicitly provides when to use: 'when the user asks for an overview, profile, or summary of every field in a table.' Also provides when not to use and alternative: 'For detailed statistics on a SINGLE specific column... use qlty_univariateStatistics instead.' This is excellent guidance.

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

qlty_distinctCategoriesA
Read-onlyIdempotent

Get the unique (distinct) values present in a specific column of a table. Use when the user asks what unique values, categories, or entries exist in a named column. Requires both a table name and a column name — if no column name is specified, ask for clarification before calling.

Arguments: database_name - Name of the database (optional) table_name - Table name to analyze column_name - Column name to analyze persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable name to analyze
column_nameYesColumn name to analyze
database_nameNoName of the database (optional)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=true and idempotentHint=true. The description is consistent and adds context: explains that setting persist=True materializes a volatile table and returns the table name, which is significant behavioral information 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.

Conciseness5/5

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

The description is very concise: three sentences cover purpose, usage condition, and parameters. It is front-loaded with the main action, and each part serves a clear purpose. No unnecessary words.

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

Completeness4/5

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

Given the tool is straightforward (retrieving distinct values) and has no output schema, the description covers purpose, usage, parameters, and a special condition (missing column). It could mention limitations like performance on large columns, but overall it is complete for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds usage semantics beyond the schema by stating that column_name must be specified and if missing, ask for clarification. Also explains the effect of persist parameter, which adds value over the schema description.

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

Purpose5/5

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

The description clearly states the tool retrieves unique values from a column, with specific verb 'Get the unique (distinct) values'. It distinguishes from sibling tools like qlty_columnSummary by specifying the exact use case (unique values/categories) and providing usage guidance.

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

Usage Guidelines4/5

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

Explicitly states when to use: 'when the user asks what unique values, categories, or entries exist in a named column'. Provides action for missing column: 'ask for clarification before calling'. However, does not mention when not to use or alternatives, so not a perfect 5.

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

qlty_missingValuesA
Read-onlyIdempotent

List the column names that contain NULL or missing values in a table. Returns a column-level summary showing WHICH columns have missing data. Use when the user asks which columns have nulls, which fields have missing data, or how many nulls exist per column. Do NOT use to retrieve the actual data rows — use qlty_rowsWithMissingValues to get the specific records where a column is null.

Arguments: database_name - Name of the database (optional) table_name - Table name to analyze persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable name to analyze
database_nameNoName of the database (optional)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true; description aligns and adds context: returns a column-level summary, and persist parameter materializes a volatile table. Adds value beyond 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?

Description is concise and well-structured with a usage paragraph and argument list. Slight redundancy between first two sentences ('list column names' vs 'column-level summary'). Still efficient.

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?

No output schema; description says 'column-level summary' but doesn't specify if it includes counts or just names. However, it explicitly distinguishes from qlty_rowsWithMissingValues, and the persist parameter behavior is explained. Adequate for a simple analysis 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%, so baseline 3 is appropriate. Description repeats parameter info but adds minimal extra context (e.g., 'Name of the database (optional)'). No significant improvement over schema.

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

Purpose5/5

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

Description clearly states the tool lists column names with NULL/missing values, specifying verb (list) and resource (columns in a table). Explicitly distinguishes from sibling qlty_rowsWithMissingValues.

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

Usage Guidelines5/5

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

Provides explicit usage: 'Use when the user asks which columns have nulls...' and 'Do NOT use to retrieve actual data rows — use qlty_rowsWithMissingValues'. Clear when-to-use and when-not-to-use with alternative tool named.

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

qlty_negativeValuesA
Read-onlyIdempotent

Identify which numeric columns in a table contain negative values. Use when the user asks about negative numbers, values below zero, or columns with anomalous negative entries. Returns the list of affected column names.

Arguments: database_name - Name of the database (optional) table_name - Table name to analyze persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable name to analyze
database_nameNoName of the database (optional)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, which the description does not contradict. The description adds behavioral context such as returning a list of affected column names and the effect of the persist parameter (materializing as a volatile table).

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

Conciseness5/5

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

The description is concise with two paragraphs: the first states purpose and usage, the second lists parameters in a clear format. No unnecessary words, front-loaded with key 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?

The tool has 3 parameters, one required, and no output schema. The description explains the return value (list of affected column names), the persist behavior, and usage context. It is sufficiently complete for the tool's complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description restates the parameter docs from the schema without adding new semantics beyond what is already in the structured field.

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 starts with a specific verb+resource: 'Identify which numeric columns in a table contain negative values.' It also provides usage context, differentiating it from sibling tools like qlty_columnSummary or qlty_missingValues.

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

Usage Guidelines4/5

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

The description explicitly says 'Use when the user asks about negative numbers, values below zero, or columns with anomalous negative entries.' This provides clear when-to-use guidance, though it does not explicitly state when not to use or name alternatives.

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

qlty_rowsWithMissingValuesA
Read-onlyIdempotent

Retrieve the actual data rows where a specific column is NULL or missing. Returns the records themselves, not a column summary. Use when the user wants to SEE or FETCH the rows with missing values in a named column. Do NOT write a SQL query with base_readQuery for this — always use this tool when the request is about rows with null values. Do NOT use for a column-level summary of which columns have nulls — use qlty_missingValues for that.

Arguments: database_name - Name of the database (optional) table_name - Table name to analyze column_name - Column name to analyze for missing values persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable name to analyze
column_nameYesColumn name to analyze for missing values
database_nameNoName of the database (optional)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the tool is known safe. The description adds value by clarifying it returns actual rows (not summaries) and that the persist parameter materializes results as a volatile table, which is useful behavioral context.

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 front-loaded with the core purpose and usage guidelines. It is concise but includes a redundant argument list that echoes the schema; while not verbose, it could be slightly tighter.

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

Completeness4/5

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

Given no output schema and 4 parameters, the description covers the tool's return type (rows), persist behavior, and usage context. It does not explicitly detail the output format when persist is false, but the overall picture is complete for common use.

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%; all parameters are documented in the input schema. The description repeats this information in a bullet list without adding new semantics beyond the schema, meeting the baseline for high coverage.

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

Purpose5/5

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

The description clearly states it retrieves actual rows with missing values in a specified column. It explicitly contrasts with sibling tools base_readQuery and qlty_missingValues, making the tool's unique purpose unmistakable.

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

Usage Guidelines5/5

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

The description provides explicit when-to-use (user wants to see/fetch rows with null values) and when-not-to-use (do not write SQL, do not use for column summary). It names specific alternatives (base_readQuery, qlty_missingValues), leaving no ambiguity.

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

qlty_standardDeviationA
Read-onlyIdempotent

Calculate the mean (average) and standard deviation for a single numeric column. Use when the user asks specifically for standard deviation, the spread of values, or just mean and variability. For a fuller statistical profile including min, max, quartiles, and percentiles, use qlty_univariateStatistics instead.

Arguments: database_name - Name of the database (optional) table_name - Table name to analyze column_name - Column name to analyze persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable name to analyze
column_nameYesColumn name to analyze
database_nameNoName of the database (optional)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the tool is read-only and idempotent. Description adds that it calculates mean and stddev, and explains the persist argument (materializes result as volatile table). No contradictions.

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 clear sentences followed by a concise argument list. Front-loaded purpose, no wasted words. Every sentence 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 simple tool with annotations and no output schema, description covers behavior, usage, parameters, and alternatives. Complete and sufficient for agent to select and invoke 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% with parameter descriptions. Description repeats parameter info, adding no new semantic meaning beyond what schema provides. Baseline 3 is appropriate.

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

Purpose5/5

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

Description states it calculates mean and standard deviation for a single numeric column, with specific verb 'Calculate'. It distinguishes from sibling tool qlty_univariateStatistics, which provides a fuller profile.

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

Usage Guidelines5/5

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

Explicitly says when to use: 'when the user asks specifically for standard deviation, the spread of values, or just mean and variability.' Also provides alternative: 'For a fuller statistical profile... use qlty_univariateStatistics instead.'

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

qlty_univariateStatisticsA
Read-onlyIdempotent

Calculate full univariate statistics for a single numeric column including min, max, mean, standard deviation, quartiles, and percentiles. Use when the user asks for a complete or comprehensive statistical breakdown of one specific column. For just mean and standard deviation, use qlty_standardDeviation. For statistics across ALL columns in a table at once, use qlty_columnSummary.

Arguments: database_name - Name of the database (optional) table_name - Table name to analyze column_name - Column name to analyze persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
table_nameYesTable name to analyze
column_nameYesColumn name to analyze
database_nameNoName of the database (optional)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds value by explaining that setting 'persist' to True materializes a volatile table and returns the table name, which is a behavioral trait beyond what annotations provide.

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

Conciseness5/5

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

The description is concise and well-structured: a clear purpose sentence, followed by usage guidelines, then a bulleted list of arguments. Every sentence is informative and earns its place.

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?

No output schema, but the description lists the statistics computed (min, max, mean, sd, quartiles, percentiles), which covers expectations. It lacks details on return format but is sufficient given the tool's simplicity.

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 baseline is 3. The description lists arguments with descriptions that mostly mirror the schema but do not add significant new meaning beyond what is already in the input schema.

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

Purpose5/5

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

The description clearly states the verb (calculate) and resource (full univariate statistics for a single numeric column) and distinguishes from siblings by explicitly naming alternatives for different scenarios (e.g., qlty_standardDeviation for just mean/std, qlty_columnSummary for all columns).

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

Usage Guidelines5/5

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

Explicitly states when to use (user asks for complete/comprehensive breakdown of one column) and when not to, providing specific alternative tools (qlty_standardDeviation, qlty_columnSummary) for other cases.

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

rag_Execute_WorkflowA
Read-onlyIdempotent

Execute complete RAG workflow to answer user questions based on document context. This tool handles the entire RAG pipeline in a single step when a user query is tagged with /rag.

WORKFLOW STEPS (executed automatically):

  1. Configuration setup using configurable values from rag_config.yml

  2. Store user query with '/rag ' prefix stripping

  3. Generate query embeddings using either BYOM (ONNXEmbeddings) or IVSM functions based on config

  4. Perform semantic search against precomputed chunk embeddings

  5. Return context chunks for answer generation

CONFIGURATION VALUES (from rag_config.yml):

  • version: 'ivsm' or 'byom' to select embedding approach

  • All database names, table names, and model settings are configurable

  • Vector store metadata fields are dynamically detected

  • Embedding parameters are configurable

  • Default chunk retrieval count is configurable

  • Default values are provided as fallback

TECHNICAL DETAILS:

  • Strips the '/rag ' prefix if present from user questions

  • Creates query table if it does not exist (columns: id, txt, created_ts)

  • BYOM approach: Uses mldb.ONNXEmbeddings UDF for tokenization and embedding

  • IVSM approach: Uses ivsm.tokenizer_encode and ivsm.IVSM_score functions

  • Both approaches store embeddings in configured output table

  • Uses cosine similarity via TD_VECTORDISTANCE for semantic search

  • Returns the top-k matching chunks from the configured vector store

  • Each result includes chunk text, similarity score, and metadata fields

CRITICAL ANSWERING RULES:

  • Answer ONLY using retrieved chunks - no external knowledge, speculation, or inference

  • Quote source content directly without paraphrasing, summarizing, or rewriting

  • If no relevant context found: "Not enough information found in the provided context"

  • If partial context: "The available context does not fully answer the question"

  • Include document/page references when available (e.g., "On page 2 of 'demo_policy.pdf'...")

  • Execute entire workflow silently without showing function calls to user - only show final answer

LANGUAGE RESTRICTIONS:

  • Do not say "According to the context" or "The context says" - just quote directly

  • Do not say "It can be inferred that..." - no inference allowed

  • Use exact or near-verbatim quotes only

  • No paraphrasing, summarizing, or adding transitions between quotes

  • Copy content precisely - no expansion or interpretation

BEHAVIORAL REQUIREMENTS:

  • Execute all RAG workflow steps silently without showing tool calls to users

  • Only display final answers based strictly on retrieved context chunks

  • Do not use external knowledge or speculation - only quote retrieved content directly

  • RAG mode only triggers with explicit /rag prefix - do not enter RAG mode implicitly

  • Hide all tool execution steps from user

  • Provide clean, direct response with only the answer based on retrieved chunks

  • This is a complete end-to-end RAG workflow - no additional tools needed

EXECUTION: Run completely silently - user only sees their question and the final context-grounded answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNo
questionYes

TDQS

A4.6/5.0
Behavior5/5

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

Description provides extensive behavioral details beyond annotations, including workflow steps, configuration, technical implementation, answering rules, language restrictions, and silent execution. No contradiction with annotations regarding idempotent, but readOnlyHint is contradicted by table creation.

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

Conciseness3/5

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

Description is very verbose, containing multiple sections with redundant or overly detailed information (e.g., full list of configuration values). While well-structured, it could be more concise without losing essential guidance.

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

Completeness5/5

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

Given the tool's complexity, lack of output schema, and zero parameter coverage, the description is thoroughly complete, covering all necessary aspects for correct invocation.

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

Parameters5/5

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

With 0% schema coverage, description fully compensates by clarifying the 'question' parameter expects a user query with optional /rag prefix and 'k' controls the number of chunks retrieved, with configurable default.

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 distinctly specifies it executes a complete RAG workflow for answering questions from document context triggered by /rag prefix, clearly differentiating from siblings like sql_Execute_Full_Pipeline.

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

Usage Guidelines4/5

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

Explicitly states RAG mode only triggers with /rag prefix and that no additional tools are needed, but does not discuss alternative tools or when to avoid this tool.

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

sec_rolePermissionsA
Read-onlyIdempotent

List the database-level permissions granted to a named Teradata role. Use when the user asks what access rights a ROLE has, what a role is allowed to do, or what permissions have been granted to a role. Do NOT confuse with user-level queries — use sec_userDbPermissions for a user's direct permissions or sec_userRoles for a user's role membership. Requires a role name.

Arguments: role_name - Role name to analyze. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
role_nameYesRole name to analyze.

TDQS

A4.2/5.0
Behavior3/5

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

The description does not contradict annotations (readOnlyHint=true, idempotentHint=true) and adds some context (requires role name, persist parameter behavior). However, with annotations already covering safety, the description adds minimal extra behavioral detail beyond what annotations provide.

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

Conciseness5/5

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

The description is concise and well-structured: a short first paragraph defining purpose and usage, followed by a brief argument list. Every sentence serves a purpose without redundancy.

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?

The tool is simple and the description covers purpose, usage, and parameters. The lack of an output schema is mitigated by the clear purpose; the description could mention the return format briefly, but it is still largely complete given the annotations and schema.

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 both parameters. The description repeats the same descriptions without adding new meaning, so it meets the baseline for full coverage without enhancing understanding.

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

Purpose5/5

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

The description clearly states the tool lists database-level permissions for a Teradata role, using a specific verb and resource. It explicitly distinguishes from sibling tools sec_userDbPermissions and sec_userRoles, which handle user-level queries.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use the tool (e.g., when user asks about a role's access rights) and warns against confusion with user-level queries, naming the alternative tools. This is a clear usage directive.

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

sec_userDbPermissionsA
Read-onlyIdempotent

List the database-level access permissions (SELECT, INSERT, UPDATE, DELETE, etc.) granted directly to a specific Teradata user across all databases. Use when the user asks what a named user can DO in each database — their access rights, grants, or privileges on database objects. Do NOT use to see what roles a user has — use sec_userRoles for that. Requires a user name.

Arguments: user_name - User name to analyze. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
user_nameYesUser name to analyze.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds that it lists 'directly granted' permissions across all databases and explains the persist parameter's behavior, providing useful context beyond 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?

The description is concise and well-structured: a first paragraph for purpose and usage, and a second for arguments. Every sentence adds value, no redundancy.

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

Completeness4/5

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

Given the tool's complexity (listing permissions) and the absence of an output schema, the description could mention the output format or typical columns. It does not, but it covers purpose, usage, and parameters sufficiently.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for both parameters. The description replicates the schema's parameter descriptions without adding new semantic meaning. Therefore, it meets the baseline but does not exceed it.

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

Purpose5/5

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

The description clearly states it lists database-level permissions for a specific user across all databases, using specific verbs and resources. It distinguishes itself from the sibling tool sec_userRoles by explicitly contrasting their purposes.

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

Usage Guidelines5/5

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

It provides explicit usage context: 'Use when the user asks what a named user can DO in each database.' It also gives a clear 'Do NOT use' condition for roles and directs to sec_userRoles, effectively guiding the agent.

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

sec_userRolesA
Read-onlyIdempotent

List the roles currently assigned to a specific Teradata user account. Use when the user asks which roles a named user HAS, belongs to, or has been assigned. Do NOT use to see the permissions of those roles — use sec_rolePermissions for that. Do NOT use to see a user's direct database privileges — use sec_userDbPermissions for that. Requires a user name.

Arguments: user_name - User name to analyze. persist - If True, materializes result as a volatile table and returns table name

ParametersJSON Schema
NameRequiredDescriptionDefault
persistNoIf True, materializes result as a volatile table and returns table name
user_nameYesUser name to analyze.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so description doesn't need to repeat. It adds context about requiring a user name and mentions persist parameter behavior. No contradictions.

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?

Front-loaded with the main purpose, followed by clear usage guidelines and a brief arguments section. Every sentence adds value without fluff.

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

Completeness4/5

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

For a simple list tool with 2 params and no output schema, the description covers purpose, usage, and parameters. Could mention output format but not essential given simplicity. References sibling tools for completeness.

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 baseline is 3. The description mentions both parameters but doesn't add significant meaning beyond the schema. However, it indirectly provides context through the tool's purpose.

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

Purpose5/5

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

The description clearly states 'List the roles currently assigned to a specific Teradata user account' with a specific verb and resource. It distinguishes from sibling tools sec_rolePermissions and sec_userDbPermissions by explicitly stating what not to use them for.

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

Usage Guidelines5/5

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

Provides explicit when-to-use ('when the user asks which roles a named user HAS') and when-not-to-use ('Do NOT use to see the permissions of those roles – use sec_rolePermissions') with direct sibling references.

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

sql_Analyze_Cluster_StatsA
Read-onlyIdempotent

ANALYZE SQL QUERY CLUSTER PERFORMANCE STATISTICS

This tool analyzes pre-computed cluster statistics to identify optimization opportunities without re-running the clustering pipeline. Perfect for iterative analysis and decision-making on which query clusters to focus optimization efforts.

ANALYSIS CAPABILITIES:

  • Performance Ranking: Sort clusters by any performance metric to identify top resource consumers

  • Resource Impact Assessment: Compare clusters by CPU usage, I/O volume, and execution complexity

  • Skew Problem Detection: Identify clusters with CPU or I/O distribution issues

  • Workload Characterization: Understand query patterns by user, application, and workload type

  • Optimization Prioritization: Focus on clusters with highest impact potential

AVAILABLE SORTING METRICS:

  • avg_cpu: Average CPU seconds per cluster (primary optimization target)

  • avg_io: Average logical I/O operations (scan intensity indicator)

  • avg_cpuskw: Average CPU skew (distribution problem indicator)

  • avg_ioskw: Average I/O skew (hot spot indicator)

  • avg_pji: Average Physical-to-Logical I/O ratio (compute intensity)

  • avg_uii: Average Unit I/O Intensity (I/O efficiency)

  • avg_numsteps: Average query plan complexity

  • queries: Number of queries in cluster (frequency indicator)

  • cluster_silhouette_score: Clustering quality measure

PERFORMANCE CATEGORIZATION: Automatically categorizes clusters using configurable thresholds (from sql_opt_config.yml):

  • HIGH_CPU_USAGE: Average CPU > config.performance_thresholds.cpu.high

  • HIGH_IO_USAGE: Average I/O > config.performance_thresholds.io.high

  • HIGH_CPU_SKEW: CPU skew > config.performance_thresholds.skew.high

  • HIGH_IO_SKEW: I/O skew > config.performance_thresholds.skew.high

  • NORMAL: Clusters within configured normal performance ranges

TYPICAL ANALYSIS WORKFLOW:

  1. Sort by 'avg_cpu' or 'avg_io' to find highest resource consumers

  2. Sort by 'avg_cpuskw' or 'avg_ioskw' to find distribution problems

  3. Use limit_results to focus on top problematic clusters

OPTIMIZATION DECISION FRAMEWORK:

  • High CPU + High Query Count: Maximum impact optimization candidates

  • High Skew + Moderate CPU: Distribution/statistics problems

  • High I/O + Low PJI: Potential indexing opportunities

  • High NumSteps: Complex query rewriting candidates

OUTPUT FORMAT: Returns detailed cluster statistics with performance rankings, categories, and metadata for LLM analysis and optimization recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
limit_resultsNo
sort_by_metricNoavg_cpu

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark it as readOnly=true and idempotent=true. The description adds valuable context: it analyzes pre-computed stats without re-running the pipeline, lists analysis capabilities, and explains output format. No contradictions with 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?

Well-structured with headings, bullet points, and code blocks. Front-loaded with purpose, then detailed sections on capabilities, metrics, and usage. Every sentence adds value; no redundant or filler content. Appropriate length for the complexity.

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

Completeness5/5

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

Given no output schema, the description thoroughly covers inputs (sorting metrics, limit), behavior (analysis of pre-computed stats), and output format (detailed cluster statistics). It also provides categorization, workflow, and decision framework. Complete for an analysis tool.

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

Parameters5/5

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

Schema has 2 params with 0% description coverage. The description compensates fully by listing all available sorting metrics with explanations (e.g., 'avg_cpu: Average CPU seconds'), describing the default behavior, and explaining limit_results usage. Adds significant meaning beyond schema.

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

Purpose5/5

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

The description clearly states the tool analyzes pre-computed cluster statistics for optimization, with a specific verb ('analyzes') and resource ('cluster stats'). It distinguishes itself from sibling tools like sql_Execute_Full_Pipeline and sql_Retrieve_Cluster_Queries by focusing on analysis of existing data.

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

Usage Guidelines5/5

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

Provides explicit usage guidance including a typical workflow (sort by metrics, use limit_results), an optimization decision framework (e.g., High CPU + High Query Count = max impact candidates), and how to prioritize. Clearly differentiates from sibling tools by focusing on analysis rather than execution or query retrieval.

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

sql_Execute_Full_PipelineA
Read-onlyIdempotent

COMPLETE SQL QUERY CLUSTERING PIPELINE FOR HIGH-USAGE QUERY OPTIMIZATION

This tool executes the entire SQL query clustering workflow to identify and analyze high CPU usage queries for optimization opportunities. It's designed for database performance analysts and DBAs who need to systematically identify query optimization candidates.

FULL PIPELINE WORKFLOW:

  1. Query Log Extraction: Extracts SQL queries from DBC.DBQLSqlTbl with comprehensive performance metrics

  2. Performance Metrics Calculation: Computes CPU skew, I/O skew, PJI (Physical to Logical I/O ratio), UII (Unit I/O Intensity)

  3. Query Tokenization: Tokenizes SQL text using {sql_clustering_config.get('model', {}).get('model_id', 'bge-small-en-v1.5')} tokenizer via ivsm.tokenizer_encode

  4. Embedding Generation: Creates semantic embeddings using ivsm.IVSM_score with ONNX models

  5. Vector Store Creation: Converts embeddings to vector columns via ivsm.vector_to_columns

  6. K-Means Clustering: Groups similar queries using TD_KMeans with optimal K from configuration

  7. Silhouette Analysis: Calculates clustering quality scores using TD_Silhouette

  8. Statistics Generation: Creates comprehensive cluster statistics with performance aggregations

PERFORMANCE METRICS EXPLAINED:

  • AMPCPUTIME: Total CPU seconds across all AMPs (primary optimization target)

  • CPUSKW/IOSKW: CPU/I/O skew ratios (>2.0 indicates distribution problems)

  • PJI: Physical-to-Logical I/O ratio (higher = more CPU-intensive)

  • UII: Unit I/O Intensity (higher = more I/O-intensive relative to CPU)

  • LogicalIO: Total logical I/O operations (indicates scan intensity)

  • NumSteps: Query plan complexity (higher = more complex plans)

CONFIGURATION (from sql_opt_config.yml):

  • Uses top {default_max_queries} queries by CPU time (configurable)

  • Creates {default_optimal_k} clusters by default (configurable via optimal_k parameter)

  • Embedding model: {sql_clustering_config.get('model', {}).get('model_id', 'bge-small-en-v1.5')}

  • Vector dimensions: {sql_clustering_config.get('embedding', {}).get('vector_length', 384)}

  • All database and table names are configurable

OPTIMIZATION WORKFLOW: After running this tool, use:

  1. sql_Analyze_Cluster_Stats to identify problematic clusters

  2. sql_Retrieve_Cluster_Queries to get actual SQL from target clusters

  3. LLM analysis to identify patterns and propose specific optimizations

USE CASES:

  • Identify query families consuming the most system resources

  • Find queries with similar patterns but different performance

  • Discover optimization opportunities through clustering analysis

  • Prioritize DBA effort on highest-impact query improvements

  • Understand workload composition and resource distribution

PREREQUISITES:

  • DBC.DBQLSqlTbl and DBC.DBQLOgTbl must be accessible

  • Embedding models and tokenizers must be installed in feature_ext_db

  • Sufficient space in feature_ext_db for intermediate and final tables

ParametersJSON Schema
NameRequiredDescriptionDefault
optimal_kNo
max_queriesNo

TDQS

A4/5.0
Behavior1/5

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

The description implies write operations (e.g., 'Creates vector store', 'Creates cluster statistics'), but annotations set readOnlyHint: true and idempotentHint: true. This is a direct contradiction. The description does not disclose that the tool writes to the database, despite mentioning sufficient space in feature_ext_db.

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 long but well-structured with sections, bold headers, and bullet points. It front-loads the purpose and workflow. Some redundancy could be trimmed, but overall it's organized for readability.

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

Completeness5/5

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

Given the tool's complexity (multi-step pipeline), minimal input schema, and no output schema, the description provides extensive context: full workflow steps, performance metrics explanations, configuration details, prerequisites, and follow-up tools. It is highly complete.

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

Parameters4/5

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

The input schema has 0% description coverage, but the description explains that optimal_k controls the number of clusters and max_queries limits the top queries by CPU time. It provides meaning beyond the schema's raw parameter definitions.

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

Purpose5/5

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

The description clearly states that the tool 'executes the entire SQL query clustering workflow' to identify high CPU usage queries. It distinguishes itself from siblings by detailing the full pipeline and referencing subsequent tools like sql_Analyze_Cluster_Stats and sql_Retrieve_Cluster_Queries as follow-ups.

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

Usage Guidelines5/5

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

The description includes an 'OPTIMIZATION WORKFLOW' section that explicitly tells when to use this tool and what tools to use after (e.g., sql_Analyze_Cluster_Stats). It also lists use cases and prerequisites, providing clear guidance on appropriate usage.

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

sql_Retrieve_Cluster_QueriesA
Read-onlyIdempotent

RETRIEVE ACTUAL SQL QUERIES FROM SPECIFIC CLUSTERS FOR PATTERN ANALYSIS

This tool extracts the actual SQL query text and performance metrics from selected clusters, enabling detailed pattern analysis and specific optimization recommendations. Essential for moving from cluster-level analysis to actual query optimization.

DETAILED ANALYSIS CAPABILITIES:

  • SQL Pattern Recognition: Analyze actual query structures, joins, predicates, and functions

  • Performance Correlation: Connect query patterns to specific performance characteristics

  • Optimization Identification: Identify common anti-patterns, missing indexes, inefficient joins

  • Code Quality Assessment: Evaluate query construction, complexity, and best practices

  • Workload Understanding: See actual business logic and data access patterns

QUERY SELECTION STRATEGIES:

  • By CPU Impact: Sort by 'ampcputime' to focus on highest CPU consumers

  • By I/O Volume: Sort by 'logicalio' to find scan-intensive queries

  • By Skew Problems: Sort by 'cpuskw' or 'ioskw' for distribution issues

  • By Complexity: Sort by 'numsteps' for complex execution plans

  • By Response Time: Sort by 'response_secs' for user experience impact

AVAILABLE METRICS FOR SORTING:

  • ampcputime: Total CPU seconds (primary optimization target)

  • logicalio: Total logical I/O operations (scan indicator)

  • cpuskw: CPU skew ratio (distribution problems)

  • ioskw: I/O skew ratio (hot spot indicators)

  • pji: Physical-to-Logical I/O ratio (compute intensity)

  • uii: Unit I/O Intensity (I/O efficiency)

  • numsteps: Query execution plan steps (complexity)

  • response_secs: Wall-clock execution time (user impact)

  • delaytime: Time spent in queue (concurrency issues)

AUTOMATIC PERFORMANCE CATEGORIZATION: Each query is categorized using configurable thresholds (from sql_opt_config.yml):

  • CPU Categories: VERY_HIGH_CPU (>config.very_high), HIGH_CPU (>config.high), MEDIUM_CPU (>10s), LOW_CPU

  • CPU Skew: SEVERE_CPU_SKEW (>config.severe), HIGH_CPU_SKEW (>config.high), MODERATE_CPU_SKEW (>config.moderate), NORMAL

  • I/O Skew: SEVERE_IO_SKEW (>config.severe), HIGH_IO_SKEW (>config.high), MODERATE_IO_SKEW (>config.moderate), NORMAL

Use thresholds set in config file for, CPU - high, very_high, Skew moderate, high, severe

TYPICAL OPTIMIZATION WORKFLOW:

  1. Start with clusters identified from sql_Analyze_Cluster_Stats

  2. Retrieve top queries by impact metric (usually 'ampcputime')

  3. Analyze SQL patterns for common issues:

    • Missing WHERE clauses or inefficient predicates

    • Cartesian products or missing JOIN conditions

    • Inefficient GROUP BY or ORDER BY operations

    • Suboptimal table access patterns

    • Missing or outdated statistics

  4. Develop specific optimization recommendations

QUERY LIMIT STRATEGY:

  • Use the query limit set in config file for pattern recognition and analysis, unless user specifies a different limit

OUTPUT INCLUDES:

  • Complete SQL query text for each query

  • All performance metrics, user, application, and workload context, cluster membership and rankings

  • Performance categories for quick filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
metricNoampcputime
cluster_idsYes
limit_per_clusterNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=true, idempotentHint=true), the description details query extraction, performance metric association, automatic categorization by thresholds, and output contents. It fully informs the agent of the tool's behavior without contradiction.

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

Conciseness3/5

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

Well-structured with headings and lists, but somewhat verbose—e.g., the 'DETAILED ANALYSIS CAPABILITIES' section partially overlaps with the workflow. Could be trimmed without losing meaning.

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?

Covers all essential aspects: purpose, parameters, usage workflow, output contents, config thresholds, and categorization. Despite no output schema, the description provides a complete picture for an AI agent to correctly invoke and interpret results.

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?

Despite 0% schema description coverage, the description compensates by listing available metric options (ampcputime, logicalio, etc.) with explanations, clarifying the meaning of 'metric'. It also addresses 'limit_per_cluster' via the query limit strategy. 'cluster_ids' is inherently clear from the context.

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 strong verb-resource pairing: 'RETRIEVE ACTUAL SQL QUERIES FROM SPECIFIC CLUSTERS FOR PATTERN ANALYSIS', clearly distinguishing it from sibling tools like sql_Analyze_Cluster_Stats (cluster-level stats) by focusing on actual query text and metrics.

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

Usage Guidelines4/5

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

Provides an explicit workflow ('TYPICAL OPTIMIZATION WORKFLOW') stating to start with sql_Analyze_Cluster_Stats, and offers query selection strategies by metric. Lacks explicit when-not-to-use, but the workflow context gives clear 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. Dates show when Glama detected each change.

  1. 21 tool updatesv1.0.1
    • Changedbase_columnDescription2 fields changed
      • removedInput schema / properties / obj_name
        Removed value: -{
        -  "default": "%",
        -  "description": "Table or view name. Defaults to '%' (all tables).",
        -  "type": "string"
        -}
      • addedInput schema / properties / table_name
        Added value: +{
        +  "default": "%",
        +  "description": "Table or view name. Defaults to '%' (all tables).",
        +  "type": "string"
        +}
    • Changedbase_columnMetadata3 fields changed
      • addedInput schema / properties / database_name
        Added value: +{
        +  "type": "string"
        +}
      • removedInput schema / properties / db_name
        Removed value: -{
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "db_name"
        -]New value: +[
        +  "database_name"
        +]
    • Changedbase_saveDDL3 fields changed
      • removedInput schema / properties / object_name
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / table_name
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "object_name"
        -]New value: +[
        +  "database_name",
        +  "table_name"
        +]
    • Changedbase_tableDDL2 fields changed
      • removedInput schema / properties / database_name / default
        Removed value: -""
      • changedInput schema / required
        Previous value: -[
        -  "table_name"
        -]New value: +[
        +  "table_name",
        +  "database_name"
        +]
    • Changedbase_tableList1 field changed
      • changedInput schema / properties / database_name / description
        Previous value: -"Database name. Leave empty for all databases."New value: +"Database name. Leave empty to list tables from all databases."
    • Changeddba_databaseSpace3 fields changed
      • removedInput schema / properties / database_name / default
        Removed value: -""
      • changedInput schema / properties / database_name / description
        Previous value: -"Database name. Leave empty or omit for all databases."New value: +"Database name. Required — do not pass empty string."
      • addedInput schema / required
        Added value: +[
        +  "database_name"
        +]
    • Changeddba_sessionInfo1 field changed
      • changedInput schema / properties / user_name / description
        Previous value: -"User name to analyze. User '*' to get all users."New value: +"User name to analyze. Use '*' to get all users."
    • Changeddba_tableSpace3 fields changed
      • removedInput schema / properties / database_name / default
        Removed value: -""
      • changedInput schema / properties / database_name / description
        Previous value: -"Database name filter. Leave empty for all databases."New value: +"Database name. Required — do not pass empty string."
      • addedInput schema / required
        Added value: +[
        +  "database_name"
        +]
    • Changeddba_tableUsageImpact3 fields changed
      • removedInput schema / properties / database_name / default
        Removed value: -""
      • changedInput schema / properties / database_name / description
        Previous value: -"Database name to analyze. Leave empty for all databases."New value: +"Database name to analyze. Required — do not pass empty string."
      • addedInput schema / required
        Added value: +[
        +  "database_name"
        +]
    • Changeddba_userSqlList3 fields changed
      • removedInput schema / properties / user_name / default
        Removed value: -""
      • changedInput schema / properties / user_name / description
        Previous value: -"User name filter. Leave empty or omit for all users."New value: +"User name to filter by. Required — do not pass empty string."
      • addedInput schema / required
        Added value: +[
        +  "user_name"
        +]
    • Changedplot_line_chart3 fields changed
      • changedInput schema / properties / columns / description
        Previous value: -"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: List[str]"New value: +"\nRequired Argument.\nSpecifies the y-axis numeric column(s) for the line chart.\nTypes: List[str]"
      • changedInput schema / properties / labels / description
        Previous value: -"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the x-axis column (typically date or time).\nTypes: str"
      • changedInput schema / properties / table_name / description
        Previous value: -"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the name of the table to generate the line chart.\nTypes: str"
    • Changedplot_pie_chart3 fields changed
      • changedInput schema / properties / column / description
        Previous value: -"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the numeric value column for the pie chart.\nTypes: str"
      • changedInput schema / properties / labels / description
        Previous value: -"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the category column for labels.\nTypes: str"
      • changedInput schema / properties / table_name / description
        Previous value: -"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the name of the table to generate the pie chart.\nTypes: str"
    • Changedplot_polar_chart3 fields changed
      • changedInput schema / properties / column / description
        Previous value: -"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the numeric value column for the polar chart.\nTypes: str"
      • changedInput schema / properties / labels / description
        Previous value: -"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the category column for labels.\nTypes: str"
      • changedInput schema / properties / table_name / description
        Previous value: -"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the name of the table to generate the polar chart.\nTypes: str"
    • Changedplot_radar_chart3 fields changed
      • changedInput schema / properties / columns / description
        Previous value: -"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the value column(s) for the radar chart.\nTypes: str | List[str]"
      • changedInput schema / properties / labels / description
        Previous value: -"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the category column for labels.\nTypes: str"
      • changedInput schema / properties / table_name / description
        Previous value: -"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str"New value: +"\nRequired Argument.\nSpecifies the name of the table to generate the radar chart.\nTypes: str"
    • Changedqlty_columnSummary1 field changed
      • changedInput schema / properties / database_name / description
        Previous value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
    • Changedqlty_distinctCategories1 field changed
      • changedInput schema / properties / database_name / description
        Previous value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
    • Changedqlty_missingValues1 field changed
      • changedInput schema / properties / database_name / description
        Previous value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
    • Changedqlty_negativeValues1 field changed
      • changedInput schema / properties / database_name / description
        Previous value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
    • Changedqlty_rowsWithMissingValues1 field changed
      • changedInput schema / properties / database_name / description
        Previous value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
    • Changedqlty_standardDeviation1 field changed
      • changedInput schema / properties / database_name / description
        Previous value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
    • Changedqlty_univariateStatistics1 field changed
      • changedInput schema / properties / database_name / description
        Previous value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
  2. 1 tool updatev0.2.2
    • Changedbase_readQuery1 field changed
      • addedInput schema / properties / row_limit
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
  3. 47 tool updatesv0.2.1
    • Changedbase_columnDescription11 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +"%"
      • addedInput schema / properties / database_name / description
        Added value: +"Database name. Defaults to '%' (all databases)."
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / obj_name / default
        Added value: +"%"
      • addedInput schema / properties / obj_name / description
        Added value: +"Table or view name. Defaults to '%' (all tables)."
      • removedInput schema / properties / obj_name / title
        Removed value: -"Obj Name"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "database_name",
        -  "obj_name"
        -]
    • Addedbase_columnMetadata
    • Changedbase_databaseList3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / scope
        Added value: +{
        +  "default": "user",
        +  "description": "Filter scope: 'user' returns only user-created databases (excludes system databases), 'all' returns every database.",
        +  "type": "string"
        +}
    • Changedbase_readQuery3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "type": "boolean"
        +}
      • removedInput schema / properties / sql / title
        Removed value: -"Sql"
    • Addedbase_saveDDL
    • Changedbase_tableAffinity7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / database_name / description
        Added value: +"Database name"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • removedInput schema / properties / obj_name
        Removed value: -{
        -  "title": "Obj Name",
        -  "type": "string"
        -}
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name
        Added value: +{
        +  "description": "Table or view name",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "obj_name"
        -]New value: +[
        +  "database_name",
        +  "table_name"
        +]
    • Changedbase_tableDDL10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Database name"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table name"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name"
        -]New value: +[
        +  "table_name"
        +]
    • Changedbase_tableList7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / database_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Database name. Leave empty for all databases."
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
    • Changedbase_tablePreview9 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / database_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Database name"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table or view name"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
    • Changedbase_tableUsage7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / database_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Database name. Leave empty for all databases."
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
    • Changeddba_databaseSpace8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Database name. Leave empty or omit for all databases."
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "database_name"
        -]
    • Changeddba_databaseVersion2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
    • Changeddba_featureUsage4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / end_date / title
        Removed value: -"End Date"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / start_date / title
        Removed value: -"Start Date"
    • Changeddba_flowControl4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / end_date / title
        Removed value: -"End Date"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / start_date / title
        Removed value: -"Start Date"
    • Changeddba_resusageSummary33 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / AppID
        Added value: +{
        +  "default": "",
        +  "description": "Application ID to filter by. Leave empty for all applications.",
        +  "type": "string"
        +}
      • removedInput schema / properties / AppId
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Appid"
        -}
      • addedInput schema / properties / LogDate
        Added value: +{
        +  "default": "",
        +  "description": "Log date to filter by in YYYY-MM-DD format. Leave empty for all dates.",
        +  "type": "string"
        +}
      • removedInput schema / properties / date
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Date"
        -}
      • removedInput schema / properties / dayOfWeek / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / dayOfWeek / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / dayOfWeek / description
        Added value: +"Day of week to filter by (1=Sunday, 2=Monday, ..., 7=Saturday). Leave empty for all days."
      • removedInput schema / properties / dayOfWeek / title
        Removed value: -"Dayofweek"
      • addedInput schema / properties / dayOfWeek / type
        Added value: +"string"
      • removedInput schema / properties / dimensions
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Dimensions"
        -}
      • removedInput schema / properties / hourOfDay / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / hourOfDay / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / hourOfDay / description
        Added value: +"Hour of day to filter by (0-23). Leave empty for all hours."
      • removedInput schema / properties / hourOfDay / title
        Removed value: -"Hourofday"
      • addedInput schema / properties / hourOfDay / type
        Added value: +"string"
      • addedInput schema / properties / no_days
        Added value: +{
        +  "default": 7,
        +  "description": "Number of days to look back from today (e.g., 7, 30, 90).",
        +  "type": "integer"
        +}
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / user_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / user_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / user_name / description
        Added value: +"User name to filter by. Leave empty for all users."
      • removedInput schema / properties / user_name / title
        Removed value: -"User Name"
      • addedInput schema / properties / user_name / type
        Added value: +"string"
      • removedInput schema / properties / workloadComplexity / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / workloadComplexity / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / workloadComplexity / description
        Added value: +"Workload complexity to filter by (e.g., 'Simple', 'Medium', 'Complex'). Leave empty for all complexity levels."
      • removedInput schema / properties / workloadComplexity / title
        Removed value: -"Workloadcomplexity"
      • addedInput schema / properties / workloadComplexity / type
        Added value: +"string"
      • removedInput schema / properties / workloadType / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / workloadType / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / workloadType / description
        Added value: +"Workload type to filter by (e.g., 'Batch', 'Interactive'). Leave empty for all workload types."
      • removedInput schema / properties / workloadType / title
        Removed value: -"Workloadtype"
      • addedInput schema / properties / workloadType / type
        Added value: +"string"
    • Changeddba_sessionInfo3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / user_name / title
        Removed value: -"User Name"
    • Changeddba_systemSpace2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
    • Changeddba_tableSpace14 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / database_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Database name filter. Leave empty for all databases."
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / exclude_system
        Added value: +{
        +  "default": "N",
        +  "description": "Exclude system databases and tables. Set to 'Y' to exclude, 'N' to include all (default: 'N').",
        +  "type": "string"
        +}
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / table_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / table_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / table_name / description
        Added value: +"Table name filter. Leave empty for all tables."
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • addedInput schema / properties / table_name / type
        Added value: +"string"
      • addedInput schema / properties / top_n
        Added value: +{
        +  "default": 0,
        +  "description": "Limit results to top N largest tables by space. Set to 0 for no limit (default: 0).",
        +  "type": "integer"
        +}
    • Changeddba_tableSqlList8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / no_days / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / no_days / description
        Added value: +"Number of days to look back"
      • removedInput schema / properties / no_days / title
        Removed value: -"No Days"
      • addedInput schema / properties / no_days / type
        Added value: +"integer"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table name to search for"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
    • Changeddba_tableUsageImpact12 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / database_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Database name to analyze. Leave empty for all databases."
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / user_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • changedInput schema / properties / user_name / default
        Previous value: -nullNew value: +""
      • addedInput schema / properties / user_name / description
        Added value: +"User name to analyze. Leave empty for all users."
      • removedInput schema / properties / user_name / title
        Removed value: -"User Name"
      • addedInput schema / properties / user_name / type
        Added value: +"string"
    • Changeddba_userDelay4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / end_date / title
        Removed value: -"End Date"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / start_date / title
        Removed value: -"Start Date"
    • Changeddba_userSqlList10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / no_days / anyOf
        Removed value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / no_days / description
        Added value: +"Number of days to look back"
      • removedInput schema / properties / no_days / title
        Removed value: -"No Days"
      • addedInput schema / properties / no_days / type
        Added value: +"integer"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / user_name / default
        Added value: +""
      • addedInput schema / properties / user_name / description
        Added value: +"User name filter. Leave empty or omit for all users."
      • removedInput schema / properties / user_name / title
        Removed value: -"User Name"
      • removedInput schema / required
        Removed value: -[
        -  "user_name"
        -]
    • Addedgraph_analyseDatabase
    • Addedgraph_bfsLevels
    • Addedgraph_connectedComponents
    • Addedgraph_detectCycles
    • Addedgraph_edgeContractDDL
    • Addedgraph_findRootObjects
    • Addedgraph_traceLineage
    • Changedplot_line_chart7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / columns / description
        Added value: +"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: List[str]"
      • removedInput schema / properties / columns / title
        Removed value: -"Columns"
      • addedInput schema / properties / labels / description
        Added value: +"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str"
      • removedInput schema / properties / labels / title
        Removed value: -"Labels"
      • addedInput schema / properties / table_name / description
        Added value: +"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
    • Changedplot_pie_chart7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / column / description
        Added value: +"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: str"
      • removedInput schema / properties / column / title
        Removed value: -"Column"
      • addedInput schema / properties / labels / description
        Added value: +"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str"
      • removedInput schema / properties / labels / title
        Removed value: -"Labels"
      • addedInput schema / properties / table_name / description
        Added value: +"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
    • Changedplot_polar_chart7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / column / description
        Added value: +"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: str"
      • removedInput schema / properties / column / title
        Removed value: -"Column"
      • addedInput schema / properties / labels / description
        Added value: +"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str"
      • removedInput schema / properties / labels / title
        Removed value: -"Labels"
      • addedInput schema / properties / table_name / description
        Added value: +"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
    • Changedplot_radar_chart7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / columns / description
        Added value: +"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: str"
      • removedInput schema / properties / columns / title
        Removed value: -"Columns"
      • addedInput schema / properties / labels / description
        Added value: +"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str"
      • removedInput schema / properties / labels / title
        Removed value: -"Labels"
      • addedInput schema / properties / table_name / description
        Added value: +"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
    • Changedqlty_columnSummary10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Name of the database (optional, omit if table_name is fully qualified)"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table name to analyze"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name"
        -]New value: +[
        +  "table_name"
        +]
    • Changedqlty_distinctCategories12 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / column_name / description
        Added value: +"Column name to analyze"
      • removedInput schema / properties / column_name / title
        Removed value: -"Column Name"
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Name of the database (optional, omit if table_name is fully qualified)"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table name to analyze"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name",
        -  "column_name"
        -]New value: +[
        +  "table_name",
        +  "column_name"
        +]
    • Changedqlty_missingValues10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Name of the database (optional, omit if table_name is fully qualified)"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table name to analyze"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name"
        -]New value: +[
        +  "table_name"
        +]
    • Changedqlty_negativeValues10 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Name of the database (optional, omit if table_name is fully qualified)"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table name to analyze"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name"
        -]New value: +[
        +  "table_name"
        +]
    • Changedqlty_rowsWithMissingValues12 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / column_name / description
        Added value: +"Column name to analyze for missing values"
      • removedInput schema / properties / column_name / title
        Removed value: -"Column Name"
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Name of the database (optional, omit if table_name is fully qualified)"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table name to analyze"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name",
        -  "column_name"
        -]New value: +[
        +  "table_name",
        +  "column_name"
        +]
    • Changedqlty_standardDeviation12 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / column_name / description
        Added value: +"Column name to analyze"
      • removedInput schema / properties / column_name / title
        Removed value: -"Column Name"
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Name of the database (optional, omit if table_name is fully qualified)"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table name to analyze"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name",
        -  "column_name"
        -]New value: +[
        +  "table_name",
        +  "column_name"
        +]
    • Changedqlty_univariateStatistics12 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / column_name / description
        Added value: +"Column name to analyze"
      • removedInput schema / properties / column_name / title
        Removed value: -"Column Name"
      • removedInput schema / properties / database_name / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / database_name / default
        Added value: +""
      • addedInput schema / properties / database_name / description
        Added value: +"Name of the database (optional, omit if table_name is fully qualified)"
      • removedInput schema / properties / database_name / title
        Removed value: -"Database Name"
      • addedInput schema / properties / database_name / type
        Added value: +"string"
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / table_name / description
        Added value: +"Table name to analyze"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name",
        -  "column_name"
        -]New value: +[
        +  "table_name",
        +  "column_name"
        +]
    • Changedrag_Execute_Workflow3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / k / title
        Removed value: -"K"
      • removedInput schema / properties / question / title
        Removed value: -"Question"
    • Changedsec_rolePermissions4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / role_name / description
        Added value: +"Role name to analyze."
      • removedInput schema / properties / role_name / title
        Removed value: -"Role Name"
    • Changedsec_userDbPermissions4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / user_name / description
        Added value: +"User name to analyze."
      • removedInput schema / properties / user_name / title
        Removed value: -"User Name"
    • Changedsec_userRoles4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / persist
        Added value: +{
        +  "default": false,
        +  "description": "If True, materializes result as a volatile table and returns table name",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / user_name / description
        Added value: +"User name to analyze."
      • removedInput schema / properties / user_name / title
        Removed value: -"User Name"
    • Changedsql_Analyze_Cluster_Stats5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / limit_results / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / limit_results / title
        Removed value: -"Limit Results"
      • removedInput schema / properties / limit_results / type
        Removed value: -"integer"
      • removedInput schema / properties / sort_by_metric / title
        Removed value: -"Sort By Metric"
    • Changedsql_Execute_Full_Pipeline7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / max_queries / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / max_queries / title
        Removed value: -"Max Queries"
      • removedInput schema / properties / max_queries / type
        Removed value: -"integer"
      • addedInput schema / properties / optimal_k / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / optimal_k / title
        Removed value: -"Optimal K"
      • removedInput schema / properties / optimal_k / type
        Removed value: -"integer"
    • Changedsql_Retrieve_Cluster_Queries4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / cluster_ids / title
        Removed value: -"Cluster Ids"
      • removedInput schema / properties / limit_per_cluster / title
        Removed value: -"Limit Per Cluster"
      • removedInput schema / properties / metric / title
        Removed value: -"Metric"
  4. 48 tool updatesv1.0.0
    • Removedba_databaseVersion
    • Changedbase_columnDescription3 fields changed
      • addedInput schema / properties / database_name / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / database_name / type
        Removed value: -"string"
      • removedInput schema / title
        Removed value: -"handle_base_columnDescriptionArguments"
    • Changedbase_databaseList1 field changed
      • removedInput schema / title
        Removed value: -"_dynamic_toolArguments"
    • Changedbase_readQuery1 field changed
      • removedInput schema / title
        Removed value: -"handle_base_readQueryArguments"
    • Changedbase_tableAffinity1 field changed
      • removedInput schema / title
        Removed value: -"handle_base_tableAffinityArguments"
    • Changedbase_tableDDL3 fields changed
      • addedInput schema / properties / database_name / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / database_name / type
        Removed value: -"string"
      • removedInput schema / title
        Removed value: -"handle_base_tableDDLArguments"
    • Changedbase_tableList5 fields changed
      • addedInput schema / properties / database_name / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedInput schema / properties / database_name / default
        Added value: +null
      • removedInput schema / properties / database_name / type
        Removed value: -"string"
      • removedInput schema / required
        Removed value: -[
        -  "database_name"
        -]
      • removedInput schema / title
        Removed value: -"_dynamic_toolArguments"
    • Changedbase_tablePreview1 field changed
      • removedInput schema / title
        Removed value: -"handle_base_tablePreviewArguments"
    • Changedbase_tableUsage1 field changed
      • removedInput schema / title
        Removed value: -"handle_base_tableUsageArguments"
    • Removedcust_activeUsers
    • Removedcust_td_serverInfo
    • Changeddba_databaseSpace1 field changed
      • removedInput schema / title
        Removed value: -"handle_dba_databaseSpaceArguments"
    • Addeddba_databaseVersion
    • Changeddba_featureUsage3 fields changed
      • addedInput schema / properties / end_date / description
        Added value: +"The end date for the query range in YYYY-MM-DD format."
      • addedInput schema / properties / start_date / description
        Added value: +"The start date for the query range in YYYY-MM-DD format."
      • removedInput schema / title
        Removed value: -"_dynamic_toolArguments"
    • Changeddba_flowControl3 fields changed
      • addedInput schema / properties / end_date / description
        Added value: +"The end date for the query range in YYYY-MM-DD format."
      • addedInput schema / properties / start_date / description
        Added value: +"The start date for the query range in YYYY-MM-DD format."
      • removedInput schema / title
        Removed value: -"_dynamic_toolArguments"
    • Changeddba_resusageSummary4 fields changed
      • addedInput schema / properties / AppId
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Appid"
        +}
      • addedInput schema / properties / workloadComplexity
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Workloadcomplexity"
        +}
      • addedInput schema / properties / workloadType
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Workloadtype"
        +}
      • removedInput schema / title
        Removed value: -"handle_dba_resusageSummaryArguments"
    • Changeddba_sessionInfo4 fields changed
      • addedInput schema / properties / user_name / default
        Added value: +"*"
      • addedInput schema / properties / user_name / description
        Added value: +"User name to analyze. User '*' to get all users."
      • removedInput schema / required
        Removed value: -[
        -  "user_name"
        -]
      • removedInput schema / title
        Removed value: -"_dynamic_toolArguments"
    • Addeddba_systemSpace
    • Changeddba_tableSpace4 fields changed
      • addedInput schema / properties / database_name / default
        Added value: +null
      • addedInput schema / properties / table_name / default
        Added value: +null
      • removedInput schema / required
        Removed value: -[
        -  "database_name",
        -  "table_name"
        -]
      • removedInput schema / title
        Removed value: -"handle_dba_tableSpaceArguments"
    • Changeddba_tableSqlList1 field changed
      • removedInput schema / title
        Removed value: -"handle_dba_tableSqlListArguments"
    • Changeddba_tableUsageImpact1 field changed
      • removedInput schema / title
        Removed value: -"handle_dba_tableUsageImpactArguments"
    • Changeddba_userDelay3 fields changed
      • addedInput schema / properties / end_date / description
        Added value: +"The end date for the query range in YYYY-MM-DD format."
      • addedInput schema / properties / start_date / description
        Added value: +"The start date for the query range in YYYY-MM-DD format."
      • removedInput schema / title
        Removed value: -"_dynamic_toolArguments"
    • Changeddba_userSqlList1 field changed
      • removedInput schema / title
        Removed value: -"handle_dba_userSqlListArguments"
    • Removedget_cube_cust_cube_db_space_metrics
    • Removedget_cube_sales_cube
    • Addedplot_line_chart
    • Addedplot_pie_chart
    • Addedplot_polar_chart
    • Addedplot_radar_chart
    • Changedqlty_columnSummary1 field changed
      • removedInput schema / title
        Removed value: -"handle_qlty_columnSummaryArguments"
    • Changedqlty_distinctCategories4 fields changed
      • removedInput schema / properties / col_name
        Removed value: -{
        -  "title": "Col Name",
        -  "type": "string"
        -}
      • addedInput schema / properties / column_name
        Added value: +{
        +  "title": "Column Name",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name",
        -  "col_name"
        -]New value: +[
        +  "database_name",
        +  "table_name",
        +  "column_name"
        +]
      • removedInput schema / title
        Removed value: -"handle_qlty_distinctCategoriesArguments"
    • Changedqlty_missingValues1 field changed
      • removedInput schema / title
        Removed value: -"handle_qlty_missingValuesArguments"
    • Changedqlty_negativeValues1 field changed
      • removedInput schema / title
        Removed value: -"handle_qlty_negativeValuesArguments"
    • Changedqlty_rowsWithMissingValues4 fields changed
      • removedInput schema / properties / col_name
        Removed value: -{
        -  "title": "Col Name",
        -  "type": "string"
        -}
      • addedInput schema / properties / column_name
        Added value: +{
        +  "title": "Column Name",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name",
        -  "col_name"
        -]New value: +[
        +  "database_name",
        +  "table_name",
        +  "column_name"
        +]
      • removedInput schema / title
        Removed value: -"handle_qlty_rowsWithMissingValuesArguments"
    • Changedqlty_standardDeviation4 fields changed
      • removedInput schema / properties / col_name
        Removed value: -{
        -  "title": "Col Name",
        -  "type": "string"
        -}
      • addedInput schema / properties / column_name
        Added value: +{
        +  "title": "Column Name",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name",
        -  "col_name"
        -]New value: +[
        +  "database_name",
        +  "table_name",
        +  "column_name"
        +]
      • removedInput schema / title
        Removed value: -"handle_qlty_standardDeviationArguments"
    • Changedqlty_univariateStatistics4 fields changed
      • removedInput schema / properties / col_name
        Removed value: -{
        -  "title": "Col Name",
        -  "type": "string"
        -}
      • addedInput schema / properties / column_name
        Added value: +{
        +  "title": "Column Name",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "database_name",
        -  "table_name",
        -  "col_name"
        -]New value: +[
        +  "database_name",
        +  "table_name",
        +  "column_name"
        +]
      • removedInput schema / title
        Removed value: -"handle_qlty_univariateStatisticsArguments"
    • Addedrag_Execute_Workflow
    • Removedrag_executeWorkflow
    • Removedrag_executeWorkflow_ivsm
    • Removedsales_customer_profile
    • Removedsales_top_customers
    • Changedsec_rolePermissions1 field changed
      • removedInput schema / title
        Removed value: -"handle_sec_rolePermissionsArguments"
    • Changedsec_userDbPermissions1 field changed
      • removedInput schema / title
        Removed value: -"handle_sec_userDbPermissionsArguments"
    • Changedsec_userRoles1 field changed
      • removedInput schema / title
        Removed value: -"handle_sec_userRolesArguments"
    • Addedsql_Analyze_Cluster_Stats
    • Addedsql_Execute_Full_Pipeline
    • Addedsql_Retrieve_Cluster_Queries
    • Removedtmpl_nameOfTool
  5. 38 tool updates
    • First observedba_databaseVersion
    • First observedbase_columnDescription
    • First observedbase_databaseList
    • First observedbase_readQuery
    • First observedbase_tableAffinity
    • First observedbase_tableDDL
    • First observedbase_tableList
    • First observedbase_tablePreview
    • First observedbase_tableUsage
    • First observedcust_activeUsers
    • First observedcust_td_serverInfo
    • First observeddba_databaseSpace
    • First observeddba_featureUsage
    • First observeddba_flowControl
    • First observeddba_resusageSummary
    • First observeddba_sessionInfo
    • First observeddba_tableSpace
    • First observeddba_tableSqlList
    • First observeddba_tableUsageImpact
    • First observeddba_userDelay
    • First observeddba_userSqlList
    • First observedget_cube_cust_cube_db_space_metrics
    • First observedget_cube_sales_cube
    • First observedqlty_columnSummary
    • First observedqlty_distinctCategories
    • First observedqlty_missingValues
    • First observedqlty_negativeValues
    • First observedqlty_rowsWithMissingValues
    • First observedqlty_standardDeviation
    • First observedqlty_univariateStatistics
    • First observedrag_executeWorkflow
    • First observedrag_executeWorkflow_ivsm
    • First observedsales_customer_profile
    • First observedsales_top_customers
    • First observedsec_rolePermissions
    • First observedsec_userDbPermissions
    • First observedsec_userRoles
    • First observedtmpl_nameOfTool

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have clear, distinct purposes, with detailed descriptions that help differentiate them. However, there are some overlapping pairs (e.g., base_columnDescription vs base_columnMetadata, base_tableList vs base_tablePreview) that could cause confusion if not read carefully.

Naming Consistency4/5

Tools follow a mostly consistent prefix_snake_case pattern (base_, dba_, graph_, plot_, qlty_, rag_, sec_, sql_). Minor inconsistencies in capitalization (e.g., rag_Execute_Workflow, sql_Analyze_Cluster_Stats) break the pattern slightly.

Tool Count2/5

With 47 tools, the server covers many distinct domains, but the count is excessive for a single MCP server. It exceeds the 'too many' threshold (25+) and could be simplified or split into multiple servers for better coherence.

Completeness4/5

The tool set covers a wide range of Teradata management tasks, including metadata, DBA operations, data quality, graph analysis, visualization, RAG, security, and SQL optimization. There are no major gaps for the intended purpose.

Maintenance

ActivityActive
ResponsivenessWithin a week

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that turns Teradata Vantage into a full-stack analytics agent platform, providing AI agents with structured knowledge of Teradata's native functions for correct and optimal SQL analytics.
    11
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that provides comprehensive monitoring and management capabilities for Teradata Workload Management (WLM), enabling tasks like performance troubleshooting, emergency throttling, and scheduled maintenance through 41 tools and 39 resources.
    5
    Apache 2.0

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Teradata/teradata-mcp-server'

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