Teradata MCP Server
OfficialThe Teradata MCP Server is a comprehensive tool for managing, querying, and analyzing Teradata databases. Key capabilities include:
Query Execution: Run both
Enables configuration management through environment variables stored in .env files, supporting database connection parameters, LLM credentials, and server settings.
Supports integration with OpenAI models through API key configuration, enabling LLM capabilities within the server environment.
Provides database interaction capabilities with Teradata systems, offering tools for querying, data quality assessment, and database administration tasks such as executing queries, retrieving table structures, analyzing space usage, and performing data quality checks.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Teradata MCP Servershow me the top 10 customers by total sales this month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.

Quick Start (Choose Your Path)
Client | Best For | Setup Time |
Exploratory analysis, platform admin | 5 min | |
Data engineering, agent development | 5 min | |
Testing new LLMs locally | 5 min | |
Build your own client | varies | |
Visual agent builder | 10 min |
Pre-requisites: Teradata database (or free sandbox) + uv
Claude Desktop Setup (No Installation)
Add this to claude_desktop_config.json (Settings > Developer > Edit Config):
{
"mcpServers": {
"teradata": {
"command": "uvx",
"args": ["teradata-mcp-server"],
"env": {
"DATABASE_URI": "teradata://<USERNAME>:<PASSWORD>@<HOST_URL>:1025/<USERNAME>"
}
}
}
}Related MCP server: Teradata Workload Management (WLM) MCP Server
What You Can Do
Use Case | Capabilities | Tools |
Query & Analyze | Explore tables, profile data, explain results, visualize patterns—no SQL needed | |
Semantic Layer | Generate custom semantic layers and tools from YAML or with our Agent Skill | |
AI & RAG Pipelines | Semantic search, retrieval-augmented generation, vector storage | |
Database Admin | Manage security, monitor capacity, automate backups |
What's New (Latest Release)
FastMCP v3 — Guaranteed resource cleanup with improved lifespan management
Hooks Capability — Intercept tool calls for custom monitoring, audit, or rate-limiting
Row Limit Protection — Configurable caps (
DEFAULT_ROW_LIMIT,MAX_ROW_LIMIT) prevent LLM token overflowEnhanced Security — VX views for fine-grained row-level access control
Extend & Deploy
Add Custom Logic
Use hooks to intercept tool calls for monitoring, audit trails, or validation → Hooks Guide
Define Semantic Layers
Create domain-specific tools, prompts, and cubes in YAML → Customization Guide
Deploy Everywhere
Run as CLI (uv), HTTP server, Docker container, or cloud service → Installation Guide
See It In Action
Voice Agent — Real-time bidirectional audio with Amazon Nova Sonic
Web Agent — Interactive chat UI with Google ADK framework
Flowise Builder — Visual drag-and-drop workflows
Custom Middleware — Performance monitoring patterns
Learn More
Full Documentation — Installation, configuration, architecture, security
Video Tutorials — Step-by-step walkthroughs
Developer Guide — Extend and contribute
Architecture — How components work together
Contributing
We welcome contributions! See our Contributing Guide and Developer Guide to get started.
Available Tools
47 toolsbase_columnDescriptionARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | No | Table or view name. Defaults to '%' (all tables). | % |
| database_name | No | Database name. Defaults to '%' (all databases). | % |
TDQS
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.
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.
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.
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.
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.
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_columnMetadataARead-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:
FILTER FIELDS: Pass only the columns you need via the
fieldsparameter. 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?'EXCLUDE OBJECTS: Use
exclude_objectsto 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'INCREASE PARALLELISM: Set
max_workersto 12-16 for large databases. Each worker gets its own Teradata session via conn.cursor(). Default is 8.FILTER BY KIND: Use
table_kindto limit to just the object types you need (e.g. 'V' for views only, 'T' for tables only).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 aremaining_objectsCSV in metadata listing the unprocessed objects. Pass that CSV straight intoobject_nameon the next call for automatic continuation. This self-adapts to object sizes: small-column views fit more per call, large-column views page earlier.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 plusremaining_objectsfor 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)
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| table_kind | No | ||
| max_workers | No | ||
| object_name | No | ||
| database_name | Yes | ||
| max_payload_kb | No | ||
| exclude_objects | No | ||
| max_execution_seconds | No |
TDQS
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.
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.
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.
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.
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.
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_databaseListARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Filter scope: 'user' returns only user-created databases (excludes system databases), 'all' returns every database. | user |
| persist | No | If True, materializes result as a volatile table and returns table name |
TDQS
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.
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.
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.
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.
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.
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_readQueryARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| sql | No | ||
| persist | No | ||
| row_limit | No |
TDQS
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.
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.
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.
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.
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.
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_saveDDLARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | ./ddls_extracted | |
| table_name | Yes | ||
| object_type | No | PROCEDURE | |
| database_name | Yes |
TDQS
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.
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.
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.
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.
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.
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_tableAffinityARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table or view name | |
| database_name | Yes | Database name |
TDQS
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.
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.
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.
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.
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.
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_tableDDLARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table name | |
| database_name | Yes | Database name |
TDQS
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.
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.
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.
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.
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.
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_tableListARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| database_name | No | Database name. Leave empty to list tables from all databases. |
TDQS
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.
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.
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.
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.
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.
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_tablePreviewARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table or view name | |
| database_name | No | Database name |
TDQS
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.
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.
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.
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.
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.
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_tableUsageARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| database_name | No | Database name. Leave empty for all databases. |
TDQS
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.
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.
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.
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.
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.
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_databaseSpaceARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| database_name | Yes | Database name. Required — do not pass empty string. |
TDQS
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.
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.
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.
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.
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.
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_databaseVersionARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name |
TDQS
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.
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.
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.
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.
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.
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_featureUsageARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| end_date | Yes | The end date for the query range in YYYY-MM-DD format. | |
| start_date | Yes | The start date for the query range in YYYY-MM-DD format. |
TDQS
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.
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.
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.
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.
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.
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_flowControlARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| end_date | Yes | The end date for the query range in YYYY-MM-DD format. | |
| start_date | Yes | The start date for the query range in YYYY-MM-DD format. |
TDQS
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.
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.
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.
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.
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.
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_resusageSummaryARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| AppID | No | Application ID to filter by. Leave empty for all applications. | |
| LogDate | No | Log date to filter by in YYYY-MM-DD format. Leave empty for all dates. | |
| no_days | No | Number of days to look back from today (e.g., 7, 30, 90). | |
| persist | No | If True, materializes result as a volatile table and returns table name | |
| dayOfWeek | No | Day of week to filter by (1=Sunday, 2=Monday, ..., 7=Saturday). Leave empty for all days. | |
| hourOfDay | No | Hour of day to filter by (0-23). Leave empty for all hours. | |
| user_name | No | User name to filter by. Leave empty for all users. | |
| workloadType | No | Workload type to filter by (e.g., 'Batch', 'Interactive'). Leave empty for all workload types. | |
| workloadComplexity | No | Workload complexity to filter by (e.g., 'Simple', 'Medium', 'Complex'). Leave empty for all complexity levels. |
TDQS
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.
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.
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.
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.
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.
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_sessionInfoARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| user_name | No | User name to analyze. Use '*' to get all users. | * |
TDQS
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.
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.
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.
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.
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.
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_systemSpaceARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name |
TDQS
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.
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.
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.
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.
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.
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_tableSpaceARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Limit results to top N largest tables by space. Set to 0 for no limit (default: 0). | |
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | No | Table name filter. Leave empty for all tables. | |
| database_name | Yes | Database name. Required — do not pass empty string. | |
| exclude_system | No | Exclude system databases and tables. Set to 'Y' to exclude, 'N' to include all (default: 'N'). | N |
TDQS
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.
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.
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.
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.
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.
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_tableSqlListARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| no_days | No | Number of days to look back | |
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table name to search for |
TDQS
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.
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.
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.
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.
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.
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_tableUsageImpactARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| user_name | No | User name to analyze. Leave empty for all users. | |
| database_name | Yes | Database name to analyze. Required — do not pass empty string. |
TDQS
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.
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.
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.
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.
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.
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_userDelayARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| end_date | Yes | The end date for the query range in YYYY-MM-DD format. | |
| start_date | Yes | The start date for the query range in YYYY-MM-DD format. |
TDQS
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.
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.
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.
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.
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.
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_userSqlListARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| no_days | No | Number of days to look back | |
| persist | No | If True, materializes result as a volatile table and returns table name | |
| user_name | Yes | User name to filter by. Required — do not pass empty string. |
TDQS
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.
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.
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.
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.
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.
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_analyseDatabaseARead-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" )
| Name | Required | Description | Default |
|---|---|---|---|
| top_n_roots | No | ||
| max_depth_up | No | ||
| max_depth_down | No | ||
| edge_repository | No | ||
| exclude_objects | No | ||
| container_pattern | Yes |
TDQS
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.
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.
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.
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.
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.
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_bfsLevelsARead-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:
SQL WHERE clause: fetch only edges matching include_containers (both Src and Tgt containers must match at least one pattern)
Python post-filter: exclude edges where either endpoint matches an exclude_objects pattern (applied before building adjacency)
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.
| Name | Required | Description | Default |
|---|---|---|---|
| max_depth_up | No | ||
| max_depth_down | No | ||
| root_node_list | Yes | ||
| edge_repository | No | ||
| exclude_objects | No | ||
| include_containers | No |
TDQS
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.
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.
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.
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.
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.
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_connectedComponentsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| edge_repository | No | ||
| exclude_objects | No | ||
| container_pattern | Yes |
TDQS
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.
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.
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.
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.
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.
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_detectCyclesARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| edge_repository | No | ||
| exclude_objects | No | ||
| container_pattern | Yes |
TDQS
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.
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.
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.
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.
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.
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_edgeContractDDLARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | No | Name for the edge table/view. Default: 'EdgeRepository' | EdgeRepository |
| output_type | No | '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_database | Yes | Database in which to create the edge repository. For AI-Native Data Products this is typically {ProductName}_Semantic. Example: 'StGeoMortgage_Semantic' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_findRootObjectsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| object_types | No | ||
| return_format | No | detailed | |
| edge_repository | No | ||
| exclude_objects | No | ||
| container_pattern | Yes |
TDQS
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.
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.
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.
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.
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.
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_traceLineageARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| object_name | Yes | ||
| max_depth_up | No | ||
| return_format | No | detailed | |
| max_depth_down | No | ||
| edge_repository | No | ||
| exclude_objects | No | ||
| include_containers | No |
TDQS
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.
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.
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.
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.
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.
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_chartARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| labels | Yes | Required Argument. Specifies the x-axis column (typically date or time). Types: str | |
| columns | Yes | Required Argument. Specifies the y-axis numeric column(s) for the line chart. Types: List[str] | |
| table_name | Yes | Required Argument. Specifies the name of the table to generate the line chart. Types: str |
TDQS
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.
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.
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.
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.
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.
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_chartARead-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: strRETURNS: dict
| Name | Required | Description | Default |
|---|---|---|---|
| column | Yes | Required Argument. Specifies the numeric value column for the pie chart. Types: str | |
| labels | Yes | Required Argument. Specifies the category column for labels. Types: str | |
| table_name | Yes | Required Argument. Specifies the name of the table to generate the pie chart. Types: str |
TDQS
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.
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.
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.
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.
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.
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_chartARead-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: strRETURNS: dict
| Name | Required | Description | Default |
|---|---|---|---|
| column | Yes | Required Argument. Specifies the numeric value column for the polar chart. Types: str | |
| labels | Yes | Required Argument. Specifies the category column for labels. Types: str | |
| table_name | Yes | Required Argument. Specifies the name of the table to generate the polar chart. Types: str |
TDQS
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.
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.
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.
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.
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.
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_chartARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| labels | Yes | Required Argument. Specifies the category column for labels. Types: str | |
| columns | Yes | Required Argument. Specifies the value column(s) for the radar chart. Types: str | List[str] | |
| table_name | Yes | Required Argument. Specifies the name of the table to generate the radar chart. Types: str |
TDQS
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.
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.
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.
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.
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.
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_columnSummaryARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table name to analyze | |
| database_name | No | Name of the database (optional) |
TDQS
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.
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.
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.
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.
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.
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_distinctCategoriesARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table name to analyze | |
| column_name | Yes | Column name to analyze | |
| database_name | No | Name of the database (optional) |
TDQS
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.
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.
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.
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.
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.
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_missingValuesARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table name to analyze | |
| database_name | No | Name of the database (optional) |
TDQS
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.
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.
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.
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.
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.
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_negativeValuesARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table name to analyze | |
| database_name | No | Name of the database (optional) |
TDQS
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.
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.
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.
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.
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.
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_rowsWithMissingValuesARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table name to analyze | |
| column_name | Yes | Column name to analyze for missing values | |
| database_name | No | Name of the database (optional) |
TDQS
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.
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.
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.
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.
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.
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_standardDeviationARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table name to analyze | |
| column_name | Yes | Column name to analyze | |
| database_name | No | Name of the database (optional) |
TDQS
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.
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.
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.
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.
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.
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_univariateStatisticsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| table_name | Yes | Table name to analyze | |
| column_name | Yes | Column name to analyze | |
| database_name | No | Name of the database (optional) |
TDQS
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.
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.
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.
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.
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.
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_WorkflowARead-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):
Configuration setup using configurable values from rag_config.yml
Store user query with '/rag ' prefix stripping
Generate query embeddings using either BYOM (ONNXEmbeddings) or IVSM functions based on config
Perform semantic search against precomputed chunk embeddings
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.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| question | Yes |
TDQS
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.
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.
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.
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.
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.
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_rolePermissionsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| role_name | Yes | Role name to analyze. |
TDQS
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.
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.
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.
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.
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.
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_userDbPermissionsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| user_name | Yes | User name to analyze. |
TDQS
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.
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.
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.
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.
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.
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_userRolesARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| persist | No | If True, materializes result as a volatile table and returns table name | |
| user_name | Yes | User name to analyze. |
TDQS
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.
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.
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.
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.
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.
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_StatsARead-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:
Sort by 'avg_cpu' or 'avg_io' to find highest resource consumers
Sort by 'avg_cpuskw' or 'avg_ioskw' to find distribution problems
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit_results | No | ||
| sort_by_metric | No | avg_cpu |
TDQS
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.
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.
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.
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.
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.
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_PipelineARead-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:
Query Log Extraction: Extracts SQL queries from DBC.DBQLSqlTbl with comprehensive performance metrics
Performance Metrics Calculation: Computes CPU skew, I/O skew, PJI (Physical to Logical I/O ratio), UII (Unit I/O Intensity)
Query Tokenization: Tokenizes SQL text using {sql_clustering_config.get('model', {}).get('model_id', 'bge-small-en-v1.5')} tokenizer via ivsm.tokenizer_encode
Embedding Generation: Creates semantic embeddings using ivsm.IVSM_score with ONNX models
Vector Store Creation: Converts embeddings to vector columns via ivsm.vector_to_columns
K-Means Clustering: Groups similar queries using TD_KMeans with optimal K from configuration
Silhouette Analysis: Calculates clustering quality scores using TD_Silhouette
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:
sql_Analyze_Cluster_Stats to identify problematic clusters
sql_Retrieve_Cluster_Queries to get actual SQL from target clusters
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
| Name | Required | Description | Default |
|---|---|---|---|
| optimal_k | No | ||
| max_queries | No |
TDQS
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.
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.
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.
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.
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.
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_QueriesARead-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:
Start with clusters identified from sql_Analyze_Cluster_Stats
Retrieve top queries by impact metric (usually 'ampcputime')
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
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
| Name | Required | Description | Default |
|---|---|---|---|
| metric | No | ampcputime | |
| cluster_ids | Yes | ||
| limit_per_cluster | No |
TDQS
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.
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.
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.
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.
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.
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.
21 tool updates
v1.0.1- Changed
base_columnDescription2 fields changed- removed
Input schema / properties / obj_nameRemoved value: -{ - "default": "%", - "description": "Table or view name. Defaults to '%' (all tables).", - "type": "string" -} - added
Input schema / properties / table_nameAdded value: +{ + "default": "%", + "description": "Table or view name. Defaults to '%' (all tables).", + "type": "string" +}
- Changed
base_columnMetadata3 fields changed- added
Input schema / properties / database_nameAdded value: +{ + "type": "string" +} - removed
Input schema / properties / db_nameRemoved value: -{ - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "db_name" -]New value: +[ + "database_name" +]
- Changed
base_saveDDL3 fields changed- removed
Input schema / properties / object_nameRemoved value: -{ - "type": "string" -} - added
Input schema / properties / table_nameAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "database_name", - "object_name" -]New value: +[ + "database_name", + "table_name" +]
- Changed
base_tableDDL2 fields changed- removed
Input schema / properties / database_name / defaultRemoved value: -"" - changed
Input schema / requiredPrevious value: -[ - "table_name" -]New value: +[ + "table_name", + "database_name" +]
- Changed
base_tableList1 field changed- changed
Input schema / properties / database_name / descriptionPrevious value: -"Database name. Leave empty for all databases."New value: +"Database name. Leave empty to list tables from all databases."
- Changed
dba_databaseSpace3 fields changed- removed
Input schema / properties / database_name / defaultRemoved value: -"" - changed
Input schema / properties / database_name / descriptionPrevious value: -"Database name. Leave empty or omit for all databases."New value: +"Database name. Required — do not pass empty string." - added
Input schema / requiredAdded value: +[ + "database_name" +]
- Changed
dba_sessionInfo1 field changed- changed
Input schema / properties / user_name / descriptionPrevious value: -"User name to analyze. User '*' to get all users."New value: +"User name to analyze. Use '*' to get all users."
- Changed
dba_tableSpace3 fields changed- removed
Input schema / properties / database_name / defaultRemoved value: -"" - changed
Input schema / properties / database_name / descriptionPrevious value: -"Database name filter. Leave empty for all databases."New value: +"Database name. Required — do not pass empty string." - added
Input schema / requiredAdded value: +[ + "database_name" +]
- Changed
dba_tableUsageImpact3 fields changed- removed
Input schema / properties / database_name / defaultRemoved value: -"" - changed
Input schema / properties / database_name / descriptionPrevious value: -"Database name to analyze. Leave empty for all databases."New value: +"Database name to analyze. Required — do not pass empty string." - added
Input schema / requiredAdded value: +[ + "database_name" +]
- Changed
dba_userSqlList3 fields changed- removed
Input schema / properties / user_name / defaultRemoved value: -"" - changed
Input schema / properties / user_name / descriptionPrevious value: -"User name filter. Leave empty or omit for all users."New value: +"User name to filter by. Required — do not pass empty string." - added
Input schema / requiredAdded value: +[ + "user_name" +]
- Changed
plot_line_chart3 fields changed- changed
Input schema / properties / columns / descriptionPrevious 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]" - changed
Input schema / properties / labels / descriptionPrevious 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" - changed
Input schema / properties / table_name / descriptionPrevious 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"
- Changed
plot_pie_chart3 fields changed- changed
Input schema / properties / column / descriptionPrevious 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" - changed
Input schema / properties / labels / descriptionPrevious 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" - changed
Input schema / properties / table_name / descriptionPrevious 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"
- Changed
plot_polar_chart3 fields changed- changed
Input schema / properties / column / descriptionPrevious 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" - changed
Input schema / properties / labels / descriptionPrevious 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" - changed
Input schema / properties / table_name / descriptionPrevious 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"
- Changed
plot_radar_chart3 fields changed- changed
Input schema / properties / columns / descriptionPrevious 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]" - changed
Input schema / properties / labels / descriptionPrevious 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" - changed
Input schema / properties / table_name / descriptionPrevious 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"
- Changed
qlty_columnSummary1 field changed- changed
Input schema / properties / database_name / descriptionPrevious value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
- Changed
qlty_distinctCategories1 field changed- changed
Input schema / properties / database_name / descriptionPrevious value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
- Changed
qlty_missingValues1 field changed- changed
Input schema / properties / database_name / descriptionPrevious value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
- Changed
qlty_negativeValues1 field changed- changed
Input schema / properties / database_name / descriptionPrevious value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
- Changed
qlty_rowsWithMissingValues1 field changed- changed
Input schema / properties / database_name / descriptionPrevious value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
- Changed
qlty_standardDeviation1 field changed- changed
Input schema / properties / database_name / descriptionPrevious value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
- Changed
qlty_univariateStatistics1 field changed- changed
Input schema / properties / database_name / descriptionPrevious value: -"Name of the database (optional, omit if table_name is fully qualified)"New value: +"Name of the database (optional)"
1 tool update
v0.2.2- Changed
base_readQuery1 field changed- added
Input schema / properties / row_limitAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +}
47 tool updates
v0.2.1- Changed
base_columnDescription11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"%" - added
Input schema / properties / database_name / descriptionAdded value: +"Database name. Defaults to '%' (all databases)." - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / obj_name / defaultAdded value: +"%" - added
Input schema / properties / obj_name / descriptionAdded value: +"Table or view name. Defaults to '%' (all tables)." - removed
Input schema / properties / obj_name / titleRemoved value: -"Obj Name" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - removed
Input schema / requiredRemoved value: -[ - "database_name", - "obj_name" -]
- Added
base_columnMetadata - Changed
base_databaseList3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / scopeAdded value: +{ + "default": "user", + "description": "Filter scope: 'user' returns only user-created databases (excludes system databases), 'all' returns every database.", + "type": "string" +}
- Changed
base_readQuery3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / persistAdded value: +{ + "default": false, + "type": "boolean" +} - removed
Input schema / properties / sql / titleRemoved value: -"Sql"
- Added
base_saveDDL - Changed
base_tableAffinity7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / database_name / descriptionAdded value: +"Database name" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - removed
Input schema / properties / obj_nameRemoved value: -{ - "title": "Obj Name", - "type": "string" -} - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_nameAdded value: +{ + "description": "Table or view name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "database_name", - "obj_name" -]New value: +[ + "database_name", + "table_name" +]
- Changed
base_tableDDL10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Database name" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table name" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name" - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name" -]New value: +[ + "table_name" +]
- Changed
base_tableList7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / database_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Database name. Leave empty for all databases." - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +}
- Changed
base_tablePreview9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / database_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Database name" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table or view name" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name"
- Changed
base_tableUsage7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / database_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Database name. Leave empty for all databases." - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +}
- Changed
dba_databaseSpace8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Database name. Leave empty or omit for all databases." - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - removed
Input schema / requiredRemoved value: -[ - "database_name" -]
- Changed
dba_databaseVersion2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +}
- Changed
dba_featureUsage4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / end_date / titleRemoved value: -"End Date" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - removed
Input schema / properties / start_date / titleRemoved value: -"Start Date"
- Changed
dba_flowControl4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / end_date / titleRemoved value: -"End Date" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - removed
Input schema / properties / start_date / titleRemoved value: -"Start Date"
- Changed
dba_resusageSummary33 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / AppIDAdded value: +{ + "default": "", + "description": "Application ID to filter by. Leave empty for all applications.", + "type": "string" +} - removed
Input schema / properties / AppIdRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Appid" -} - added
Input schema / properties / LogDateAdded value: +{ + "default": "", + "description": "Log date to filter by in YYYY-MM-DD format. Leave empty for all dates.", + "type": "string" +} - removed
Input schema / properties / dateRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Date" -} - removed
Input schema / properties / dayOfWeek / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / dayOfWeek / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / dayOfWeek / descriptionAdded value: +"Day of week to filter by (1=Sunday, 2=Monday, ..., 7=Saturday). Leave empty for all days." - removed
Input schema / properties / dayOfWeek / titleRemoved value: -"Dayofweek" - added
Input schema / properties / dayOfWeek / typeAdded value: +"string" - removed
Input schema / properties / dimensionsRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Dimensions" -} - removed
Input schema / properties / hourOfDay / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / hourOfDay / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / hourOfDay / descriptionAdded value: +"Hour of day to filter by (0-23). Leave empty for all hours." - removed
Input schema / properties / hourOfDay / titleRemoved value: -"Hourofday" - added
Input schema / properties / hourOfDay / typeAdded value: +"string" - added
Input schema / properties / no_daysAdded value: +{ + "default": 7, + "description": "Number of days to look back from today (e.g., 7, 30, 90).", + "type": "integer" +} - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - removed
Input schema / properties / user_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / user_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / user_name / descriptionAdded value: +"User name to filter by. Leave empty for all users." - removed
Input schema / properties / user_name / titleRemoved value: -"User Name" - added
Input schema / properties / user_name / typeAdded value: +"string" - removed
Input schema / properties / workloadComplexity / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / workloadComplexity / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / workloadComplexity / descriptionAdded value: +"Workload complexity to filter by (e.g., 'Simple', 'Medium', 'Complex'). Leave empty for all complexity levels." - removed
Input schema / properties / workloadComplexity / titleRemoved value: -"Workloadcomplexity" - added
Input schema / properties / workloadComplexity / typeAdded value: +"string" - removed
Input schema / properties / workloadType / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / workloadType / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / workloadType / descriptionAdded value: +"Workload type to filter by (e.g., 'Batch', 'Interactive'). Leave empty for all workload types." - removed
Input schema / properties / workloadType / titleRemoved value: -"Workloadtype" - added
Input schema / properties / workloadType / typeAdded value: +"string"
- Changed
dba_sessionInfo3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - removed
Input schema / properties / user_name / titleRemoved value: -"User Name"
- Changed
dba_systemSpace2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +}
- Changed
dba_tableSpace14 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / database_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Database name filter. Leave empty for all databases." - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / exclude_systemAdded value: +{ + "default": "N", + "description": "Exclude system databases and tables. Set to 'Y' to exclude, 'N' to include all (default: 'N').", + "type": "string" +} - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - removed
Input schema / properties / table_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / table_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / table_name / descriptionAdded value: +"Table name filter. Leave empty for all tables." - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name" - added
Input schema / properties / table_name / typeAdded value: +"string" - added
Input schema / properties / top_nAdded value: +{ + "default": 0, + "description": "Limit results to top N largest tables by space. Set to 0 for no limit (default: 0).", + "type": "integer" +}
- Changed
dba_tableSqlList8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / no_days / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / no_days / descriptionAdded value: +"Number of days to look back" - removed
Input schema / properties / no_days / titleRemoved value: -"No Days" - added
Input schema / properties / no_days / typeAdded value: +"integer" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table name to search for" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name"
- Changed
dba_tableUsageImpact12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / database_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Database name to analyze. Leave empty for all databases." - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - removed
Input schema / properties / user_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - changed
Input schema / properties / user_name / defaultPrevious value: -nullNew value: +"" - added
Input schema / properties / user_name / descriptionAdded value: +"User name to analyze. Leave empty for all users." - removed
Input schema / properties / user_name / titleRemoved value: -"User Name" - added
Input schema / properties / user_name / typeAdded value: +"string"
- Changed
dba_userDelay4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / end_date / titleRemoved value: -"End Date" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - removed
Input schema / properties / start_date / titleRemoved value: -"Start Date"
- Changed
dba_userSqlList10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / no_days / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / no_days / descriptionAdded value: +"Number of days to look back" - removed
Input schema / properties / no_days / titleRemoved value: -"No Days" - added
Input schema / properties / no_days / typeAdded value: +"integer" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / user_name / defaultAdded value: +"" - added
Input schema / properties / user_name / descriptionAdded value: +"User name filter. Leave empty or omit for all users." - removed
Input schema / properties / user_name / titleRemoved value: -"User Name" - removed
Input schema / requiredRemoved value: -[ - "user_name" -]
- Added
graph_analyseDatabase - Added
graph_bfsLevels - Added
graph_connectedComponents - Added
graph_detectCycles - Added
graph_edgeContractDDL - Added
graph_findRootObjects - Added
graph_traceLineage - Changed
plot_line_chart7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / columns / descriptionAdded value: +"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: List[str]" - removed
Input schema / properties / columns / titleRemoved value: -"Columns" - added
Input schema / properties / labels / descriptionAdded value: +"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str" - removed
Input schema / properties / labels / titleRemoved value: -"Labels" - added
Input schema / properties / table_name / descriptionAdded value: +"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name"
- Changed
plot_pie_chart7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / column / descriptionAdded value: +"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: str" - removed
Input schema / properties / column / titleRemoved value: -"Column" - added
Input schema / properties / labels / descriptionAdded value: +"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str" - removed
Input schema / properties / labels / titleRemoved value: -"Labels" - added
Input schema / properties / table_name / descriptionAdded value: +"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name"
- Changed
plot_polar_chart7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / column / descriptionAdded value: +"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: str" - removed
Input schema / properties / column / titleRemoved value: -"Column" - added
Input schema / properties / labels / descriptionAdded value: +"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str" - removed
Input schema / properties / labels / titleRemoved value: -"Labels" - added
Input schema / properties / table_name / descriptionAdded value: +"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name"
- Changed
plot_radar_chart7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / columns / descriptionAdded value: +"\nRequired Argument.\nSpecifies the column to be used for generating the line plot.\nTypes: str" - removed
Input schema / properties / columns / titleRemoved value: -"Columns" - added
Input schema / properties / labels / descriptionAdded value: +"\nRequired Argument.\nSpecifies the labels to be used for the line plot.\nTypes: str" - removed
Input schema / properties / labels / titleRemoved value: -"Labels" - added
Input schema / properties / table_name / descriptionAdded value: +"\nRequired Argument.\nSpecifies the name of the table to generate the donut plot.\nTypes: str" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name"
- Changed
qlty_columnSummary10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Name of the database (optional, omit if table_name is fully qualified)" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table name to analyze" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name" - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name" -]New value: +[ + "table_name" +]
- Changed
qlty_distinctCategories12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / column_name / descriptionAdded value: +"Column name to analyze" - removed
Input schema / properties / column_name / titleRemoved value: -"Column Name" - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Name of the database (optional, omit if table_name is fully qualified)" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table name to analyze" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name" - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name", - "column_name" -]New value: +[ + "table_name", + "column_name" +]
- Changed
qlty_missingValues10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Name of the database (optional, omit if table_name is fully qualified)" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table name to analyze" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name" - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name" -]New value: +[ + "table_name" +]
- Changed
qlty_negativeValues10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Name of the database (optional, omit if table_name is fully qualified)" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table name to analyze" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name" - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name" -]New value: +[ + "table_name" +]
- Changed
qlty_rowsWithMissingValues12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / column_name / descriptionAdded value: +"Column name to analyze for missing values" - removed
Input schema / properties / column_name / titleRemoved value: -"Column Name" - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Name of the database (optional, omit if table_name is fully qualified)" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table name to analyze" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name" - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name", - "column_name" -]New value: +[ + "table_name", + "column_name" +]
- Changed
qlty_standardDeviation12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / column_name / descriptionAdded value: +"Column name to analyze" - removed
Input schema / properties / column_name / titleRemoved value: -"Column Name" - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Name of the database (optional, omit if table_name is fully qualified)" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table name to analyze" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name" - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name", - "column_name" -]New value: +[ + "table_name", + "column_name" +]
- Changed
qlty_univariateStatistics12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / column_name / descriptionAdded value: +"Column name to analyze" - removed
Input schema / properties / column_name / titleRemoved value: -"Column Name" - removed
Input schema / properties / database_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / database_name / defaultAdded value: +"" - added
Input schema / properties / database_name / descriptionAdded value: +"Name of the database (optional, omit if table_name is fully qualified)" - removed
Input schema / properties / database_name / titleRemoved value: -"Database Name" - added
Input schema / properties / database_name / typeAdded value: +"string" - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / table_name / descriptionAdded value: +"Table name to analyze" - removed
Input schema / properties / table_name / titleRemoved value: -"Table Name" - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name", - "column_name" -]New value: +[ + "table_name", + "column_name" +]
- Changed
rag_Execute_Workflow3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / k / titleRemoved value: -"K" - removed
Input schema / properties / question / titleRemoved value: -"Question"
- Changed
sec_rolePermissions4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / role_name / descriptionAdded value: +"Role name to analyze." - removed
Input schema / properties / role_name / titleRemoved value: -"Role Name"
- Changed
sec_userDbPermissions4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / user_name / descriptionAdded value: +"User name to analyze." - removed
Input schema / properties / user_name / titleRemoved value: -"User Name"
- Changed
sec_userRoles4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / persistAdded value: +{ + "default": false, + "description": "If True, materializes result as a volatile table and returns table name", + "type": "boolean" +} - added
Input schema / properties / user_name / descriptionAdded value: +"User name to analyze." - removed
Input schema / properties / user_name / titleRemoved value: -"User Name"
- Changed
sql_Analyze_Cluster_Stats5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / limit_results / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Input schema / properties / limit_results / titleRemoved value: -"Limit Results" - removed
Input schema / properties / limit_results / typeRemoved value: -"integer" - removed
Input schema / properties / sort_by_metric / titleRemoved value: -"Sort By Metric"
- Changed
sql_Execute_Full_Pipeline7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / max_queries / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Input schema / properties / max_queries / titleRemoved value: -"Max Queries" - removed
Input schema / properties / max_queries / typeRemoved value: -"integer" - added
Input schema / properties / optimal_k / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Input schema / properties / optimal_k / titleRemoved value: -"Optimal K" - removed
Input schema / properties / optimal_k / typeRemoved value: -"integer"
- Changed
sql_Retrieve_Cluster_Queries4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / cluster_ids / titleRemoved value: -"Cluster Ids" - removed
Input schema / properties / limit_per_cluster / titleRemoved value: -"Limit Per Cluster" - removed
Input schema / properties / metric / titleRemoved value: -"Metric"
48 tool updates
v1.0.0- Removed
ba_databaseVersion - Changed
base_columnDescription3 fields changed- added
Input schema / properties / database_name / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / database_name / typeRemoved value: -"string" - removed
Input schema / titleRemoved value: -"handle_base_columnDescriptionArguments"
- Changed
base_databaseList1 field changed- removed
Input schema / titleRemoved value: -"_dynamic_toolArguments"
- Changed
base_readQuery1 field changed- removed
Input schema / titleRemoved value: -"handle_base_readQueryArguments"
- Changed
base_tableAffinity1 field changed- removed
Input schema / titleRemoved value: -"handle_base_tableAffinityArguments"
- Changed
base_tableDDL3 fields changed- added
Input schema / properties / database_name / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / database_name / typeRemoved value: -"string" - removed
Input schema / titleRemoved value: -"handle_base_tableDDLArguments"
- Changed
base_tableList5 fields changed- added
Input schema / properties / database_name / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / database_name / defaultAdded value: +null - removed
Input schema / properties / database_name / typeRemoved value: -"string" - removed
Input schema / requiredRemoved value: -[ - "database_name" -] - removed
Input schema / titleRemoved value: -"_dynamic_toolArguments"
- Changed
base_tablePreview1 field changed- removed
Input schema / titleRemoved value: -"handle_base_tablePreviewArguments"
- Changed
base_tableUsage1 field changed- removed
Input schema / titleRemoved value: -"handle_base_tableUsageArguments"
- Removed
cust_activeUsers - Removed
cust_td_serverInfo - Changed
dba_databaseSpace1 field changed- removed
Input schema / titleRemoved value: -"handle_dba_databaseSpaceArguments"
- Added
dba_databaseVersion - Changed
dba_featureUsage3 fields changed- added
Input schema / properties / end_date / descriptionAdded value: +"The end date for the query range in YYYY-MM-DD format." - added
Input schema / properties / start_date / descriptionAdded value: +"The start date for the query range in YYYY-MM-DD format." - removed
Input schema / titleRemoved value: -"_dynamic_toolArguments"
- Changed
dba_flowControl3 fields changed- added
Input schema / properties / end_date / descriptionAdded value: +"The end date for the query range in YYYY-MM-DD format." - added
Input schema / properties / start_date / descriptionAdded value: +"The start date for the query range in YYYY-MM-DD format." - removed
Input schema / titleRemoved value: -"_dynamic_toolArguments"
- Changed
dba_resusageSummary4 fields changed- added
Input schema / properties / AppIdAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Appid" +} - added
Input schema / properties / workloadComplexityAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Workloadcomplexity" +} - added
Input schema / properties / workloadTypeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Workloadtype" +} - removed
Input schema / titleRemoved value: -"handle_dba_resusageSummaryArguments"
- Changed
dba_sessionInfo4 fields changed- added
Input schema / properties / user_name / defaultAdded value: +"*" - added
Input schema / properties / user_name / descriptionAdded value: +"User name to analyze. User '*' to get all users." - removed
Input schema / requiredRemoved value: -[ - "user_name" -] - removed
Input schema / titleRemoved value: -"_dynamic_toolArguments"
- Added
dba_systemSpace - Changed
dba_tableSpace4 fields changed- added
Input schema / properties / database_name / defaultAdded value: +null - added
Input schema / properties / table_name / defaultAdded value: +null - removed
Input schema / requiredRemoved value: -[ - "database_name", - "table_name" -] - removed
Input schema / titleRemoved value: -"handle_dba_tableSpaceArguments"
- Changed
dba_tableSqlList1 field changed- removed
Input schema / titleRemoved value: -"handle_dba_tableSqlListArguments"
- Changed
dba_tableUsageImpact1 field changed- removed
Input schema / titleRemoved value: -"handle_dba_tableUsageImpactArguments"
- Changed
dba_userDelay3 fields changed- added
Input schema / properties / end_date / descriptionAdded value: +"The end date for the query range in YYYY-MM-DD format." - added
Input schema / properties / start_date / descriptionAdded value: +"The start date for the query range in YYYY-MM-DD format." - removed
Input schema / titleRemoved value: -"_dynamic_toolArguments"
- Changed
dba_userSqlList1 field changed- removed
Input schema / titleRemoved value: -"handle_dba_userSqlListArguments"
- Removed
get_cube_cust_cube_db_space_metrics - Removed
get_cube_sales_cube - Added
plot_line_chart - Added
plot_pie_chart - Added
plot_polar_chart - Added
plot_radar_chart - Changed
qlty_columnSummary1 field changed- removed
Input schema / titleRemoved value: -"handle_qlty_columnSummaryArguments"
- Changed
qlty_distinctCategories4 fields changed- removed
Input schema / properties / col_nameRemoved value: -{ - "title": "Col Name", - "type": "string" -} - added
Input schema / properties / column_nameAdded value: +{ + "title": "Column Name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name", - "col_name" -]New value: +[ + "database_name", + "table_name", + "column_name" +] - removed
Input schema / titleRemoved value: -"handle_qlty_distinctCategoriesArguments"
- Changed
qlty_missingValues1 field changed- removed
Input schema / titleRemoved value: -"handle_qlty_missingValuesArguments"
- Changed
qlty_negativeValues1 field changed- removed
Input schema / titleRemoved value: -"handle_qlty_negativeValuesArguments"
- Changed
qlty_rowsWithMissingValues4 fields changed- removed
Input schema / properties / col_nameRemoved value: -{ - "title": "Col Name", - "type": "string" -} - added
Input schema / properties / column_nameAdded value: +{ + "title": "Column Name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name", - "col_name" -]New value: +[ + "database_name", + "table_name", + "column_name" +] - removed
Input schema / titleRemoved value: -"handle_qlty_rowsWithMissingValuesArguments"
- Changed
qlty_standardDeviation4 fields changed- removed
Input schema / properties / col_nameRemoved value: -{ - "title": "Col Name", - "type": "string" -} - added
Input schema / properties / column_nameAdded value: +{ + "title": "Column Name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name", - "col_name" -]New value: +[ + "database_name", + "table_name", + "column_name" +] - removed
Input schema / titleRemoved value: -"handle_qlty_standardDeviationArguments"
- Changed
qlty_univariateStatistics4 fields changed- removed
Input schema / properties / col_nameRemoved value: -{ - "title": "Col Name", - "type": "string" -} - added
Input schema / properties / column_nameAdded value: +{ + "title": "Column Name", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "database_name", - "table_name", - "col_name" -]New value: +[ + "database_name", + "table_name", + "column_name" +] - removed
Input schema / titleRemoved value: -"handle_qlty_univariateStatisticsArguments"
- Added
rag_Execute_Workflow - Removed
rag_executeWorkflow - Removed
rag_executeWorkflow_ivsm - Removed
sales_customer_profile - Removed
sales_top_customers - Changed
sec_rolePermissions1 field changed- removed
Input schema / titleRemoved value: -"handle_sec_rolePermissionsArguments"
- Changed
sec_userDbPermissions1 field changed- removed
Input schema / titleRemoved value: -"handle_sec_userDbPermissionsArguments"
- Changed
sec_userRoles1 field changed- removed
Input schema / titleRemoved value: -"handle_sec_userRolesArguments"
- Added
sql_Analyze_Cluster_Stats - Added
sql_Execute_Full_Pipeline - Added
sql_Retrieve_Cluster_Queries - Removed
tmpl_nameOfTool
38 tool updates
- First observed
ba_databaseVersion - First observed
base_columnDescription - First observed
base_databaseList - First observed
base_readQuery - First observed
base_tableAffinity - First observed
base_tableDDL - First observed
base_tableList - First observed
base_tablePreview - First observed
base_tableUsage - First observed
cust_activeUsers - First observed
cust_td_serverInfo - First observed
dba_databaseSpace - First observed
dba_featureUsage - First observed
dba_flowControl - First observed
dba_resusageSummary - First observed
dba_sessionInfo - First observed
dba_tableSpace - First observed
dba_tableSqlList - First observed
dba_tableUsageImpact - First observed
dba_userDelay - First observed
dba_userSqlList - First observed
get_cube_cust_cube_db_space_metrics - First observed
get_cube_sales_cube - First observed
qlty_columnSummary - First observed
qlty_distinctCategories - First observed
qlty_missingValues - First observed
qlty_negativeValues - First observed
qlty_rowsWithMissingValues - First observed
qlty_standardDeviation - First observed
qlty_univariateStatistics - First observed
rag_executeWorkflow - First observed
rag_executeWorkflow_ivsm - First observed
sales_customer_profile - First observed
sales_top_customers - First observed
sec_rolePermissions - First observed
sec_userDbPermissions - First observed
sec_userRoles - First observed
tmpl_nameOfTool
TDQS
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.
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.
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.
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
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
MCP server for querying and analyzing data from ad platforms, analytics tools, and spreadsheets
The BigQuery remote MCP server is a fully managed service that uses the Model Context Protocol to connect AI applications and LLMs to BigQuery data sources. It provides secure, standardized tools for AI agents to list datasets and tables, retrieve schemas, generate and execute SQL queries through natural language, and analyze data—enabling direct access to enterprise analytics data without requiring manual SQL coding.
- dataOAuthco.thinair
Read-only PostgreSQL, MySQL, SQL Server access via MCP — 24 dialect-aware hosted tools.
Marketing intelligence MCP server providing campaign performance data and analytics tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn 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.11MIT
- AlicenseNot gradedqualityDmaintenanceAn 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.5Apache 2.0
- AlicenseCqualityDmaintenanceMCP server for Teradata databases, providing tools and prompts for querying, analyzing, and managing data through AI agents.38MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables querying SQL Server databases via tools for table search, SELECT execution, and table info retrieval.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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