Teradata MCP Server
Provides tools for querying and analyzing data, managing AI and RAG pipelines, administering databases, and defining custom logic in Teradata.
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 Serverlist all tables in the database"
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 MCP Server
What You Can Do
Use Case | Capabilities | Tools |
Query & Analyze | Explore tables, profile data, explain results, visualize patterns—no SQL needed | |
AI & RAG Pipelines | Semantic search, retrieval-augmented generation, vector storage | |
Database Admin | Manage security, monitor capacity, automate backups | |
Custom Logic | Define domain tools, metrics, and semantic layers in YAML |
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?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is known. The description adds no additional behavioral context (e.g., performance, limits, side effects of the persist parameter). It does not contradict annotations, but adds minimal extra value 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: one sentence for purpose, one for usage guidance, and a bulleted list for arguments. Every sentence earns its place with no redundancy or 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 listing tool with no output schema, the description covers purpose, usage, parameters, and sibling differentiation. It is complete given the tool's complexity and the richness of 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?
Input schema coverage is 100% with each parameter already described. The description repeats parameter info in an 'Arguments' list but adds no new meaning. Per rubric, baseline is 3 when schema coverage is high; description does not compensate further.
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 uses a specific verb-resource combination: 'List the column names, data types, and basic attributes for a single Teradata table or view.' It clearly distinguishes its purpose from the sibling tool base_columnMetadata by specifying what the other tool covers (precise Teradata-specific type codes, character sets, 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 this tool ('use for straightforward questions like...') and when not to ('For precise Teradata-specific type codes... use base_columnMetadata instead'). This provides clear guidance on alternatives.
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 already declare readOnlyHint and idempotentHint as true. The description adds substantial behavioral context: resolution paths for tables vs views, native cursor pattern, technical capabilities, and detailed large-scale usage guidance including self-interruption on payload/time budgets and automatic continuation. 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 headings and bullet points, making it easy to scan. However, it is quite lengthy and includes some repetition (e.g., resolution paths mentioned twice). For a complex tool, the length is somewhat justified, but trimming redundant details could improve conciseness.
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 (8 parameters, no output schema), the description covers all necessary aspects: purpose, usage guidance, parameter details, large-scale handling, continuation pattern, and return values. There are no obvious gaps, and the explanation of payload/time budgets and continuation is thorough.
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 must compensate. It provides a full 'Arguments' section explaining each parameter's purpose, default values, and usage examples. For instance, it explains the continuation pattern for object_name, the meaning of table_kind codes (T, O, V, Q), and the effects of max_payload_kb and max_execution_seconds. This adds significant meaning beyond the 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 retrieves detailed technical column metadata for Teradata tables and views, listing specific attributes like type codes, character sets, precision, scale, nullability, and index classification. It explicitly differentiates from the sibling base_columnDescription by noting that tool is for simple column lists, while this one provides precise Teradata-specific information.
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 ('when the user needs precise Teradata-specific column information') and when not to ('For a simple list of columns and types for a single object, use base_columnDescription instead'). It also provides detailed guidance for large-scale usage, including strategies for payload/time budgets, continuation patterns, and parameter adjustments.
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, so no contradiction. The description adds no extra behavioral traits beyond those annotations, such as side effects or authorization requirements. Meets minimum but doesn't add value.
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 two clear paragraphs: purpose/usage, then parameters. It is concise but could combine the parameter details into fewer 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?
Missing output schema, and the description only mentions return value when persist=True. For a list tool, the default output format (e.g., list of names) is not described, leaving some 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 100%, and the tool description repeats the exact same parameter descriptions. It does not add new meaning beyond what the input schema provides, so baseline score 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 'List all databases or schemas available in the Teradata system' with a specific verb and resource. It distinguishes from sibling tools like base_tableList by focusing on databases/schemas, not tables.
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 call (only when user asks about databases/schemas) and when not to (not as preliminary step for table listing), with alternative guidance to ask user for the database name. This is exemplary usage direction.
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 and idempotentHint. The description adds value by explaining behavior on truncation (truncated flag, how to get more rows), the effect of persist (volatile table), and row limit details. It does not contradict 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 and front-loaded purpose. While it is relatively long, every sentence adds value. Minor redundancy (e.g., repeating truncation handling) could be trimmed, but overall it is efficient and organized.
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 (SQL execution) and that the schema has no descriptions and no output schema, the description covers all critical aspects: parameter semantics, return metadata (truncated, row_limit, volatile_table), and guidance for large result sets. It is complete for an AI agent to 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?
Despite the schema having 0% description coverage, the description fully explains all three parameters: sql (required, full SQL text), persist (boolean, recommended for large results), and row_limit (default 1000, ceiling 50000). It adds essential 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 executes a user-provided SQL query against Teradata and returns results. It explicitly distinguishes from base_tablePreview by saying not to use for browsing/sampling rows, making the purpose unambiguous and well-differentiated.
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 (when user supplies explicit SQL statement or filter conditions) and when not to (use base_tablePreview for browsing/sampling). It also provides guidance on persist and row_limit parameters, giving clear context for tool selection.
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 the tool saves a file on disk, which is a write operation, but annotations declare readOnlyHint=true and idempotentHint=true. This is a direct contradiction, severely misleading the agent about the tool's side effects.
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: it starts with purpose, then provides explicit usage guidelines, then lists arguments with descriptions, and ends with a mention of the return type. Every sentence adds value 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 description covers purpose, usage, and parameters adequately given the lack of output schema. However, the contradiction with annotations undermines completeness, as the agent cannot trust the behavioral description. Additionally, the return format is vaguely 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 0%, but the description provides clear explanations for all four parameters, including examples, defaults, and acceptable values for object_type. It adds significant meaning beyond the schema, though lacks details like format constraints.
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 for Teradata objects and saves it as a .sql file. It distinguishes from sibling base_tableDDL which displays DDL without saving. The verb 'save' and resource 'DDL' are specific.
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 tells the agent when to use this tool: only when the user wants to export, write, download, or persist DDL. It also specifies when NOT to use it and directs to base_tableDDL for display purposes. 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.
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?
Annotations declare readOnlyHint and idempotentHint, which the description does not contradict. The description adds context about the persist parameter materializing a volatile table, which clarifies a behavioral nuance 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 extremely concise: two sentences for purpose and usage, then a bulleted parameter list. Every sentence is informative with no redundancy. Front-loaded with main 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?
While annotations and schema cover safety and parameters, the description lacks detail on the output format (e.g., list of table pairs, scores). For a tool with no output schema, more return value description 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% with descriptions for each parameter. The description's 'Arguments' section essentially repeats the schema descriptions without adding new meaning, so 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?
Description clearly states the tool identifies tables that co-occur in SQL queries, revealing JOIN relationships and affinity patterns. It differentiates from sibling base_tableUsage by specifying this tool is for co-occurrence, not access frequency.
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 guidance: use when user asks about tables queried together, related tables, or common workflow tables. Provides clear alternative: use base_tableUsage for access frequency or query counts.
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 behavior of the persist parameter (materializes as volatile table, returns table name), which is beyond what annotations capture. 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?
Well-structured with purpose first, then usage guidelines, then argument list. Every sentence adds necessary information. Not verbose.
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, description explains what DDL is returned and the effect of persist. For a retrieval tool, this is sufficient. Guidance on parameter requirements completes the context.
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. Description adds value by explaining persist more clearly and including usage guidance for table_name and database_name (don't guess).
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, including column types, constraints, primary indexes, and keys. It distinguishes from sibling tools like base_columnDescription (column names/types) and base_saveDDL (saving to file).
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 wants CREATE statement/table definition) and when not to (saving DDL, column names). Includes critical instruction to ask for clarification if both table and database names are not provided.
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. The description adds that omitting database_name lists all databases, and the persist parameter materializes the result as a volatile table, returning the table name. This goes 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 front-loaded with the primary purpose and includes a usage note. However, it repeats the parameter descriptions from the schema, which reduces conciseness slightly.
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 the main scenarios (with and without database_name) and explains the persist behavior. Lacks explicit mention of output format (e.g., list of table names with schema), but given no output schema, this is 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?
Input schema provides 100% coverage: both parameters have descriptions. The tool's description repeats these descriptions verbatim, adding no new semantic information beyond what is already 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 lists tables and views within a Teradata database. It distinguishes the tool from siblings like base_databaseList (which lists databases) and base_tablePreview (which previews a specific table), though it does not explicitly name these alternatives.
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 guidance: when the user wants a single database, the agent should ask for the database name instead of returning all tables. This prevents accidental broad results. It does not mention when to use alternative tools, but the context is clear.
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?
Description discloses read-only sampling behavior and persist option for materialization, adding context beyond annotations (readOnlyHint, idempotentHint). Does not contradict 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 front-loaded with purpose, then usage, then parameters. Well-organized but slightly verbose; could be more concise while retaining key info.
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 description covers use cases, arguments, and behavioral aspects. Lacks details on return format (e.g., JSON structure), but adequate for a 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% and description repeats but clarifies parameters (e.g., table_name, database_name, persist). Adds value by explaining purpose beyond schema 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 the tool returns a quick sample of first few rows from a table/view without SQL. It distinguishes from sibling base_readQuery by specifying when not to use (WHERE clause, filter, SQL).
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 (user provides WHERE clause, filter, or SQL), and suggests alternative base_readQuery.
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 show readOnlyHint=true and idempotentHint=true. The description adds behavioral context beyond annotations, specifying that the tool reports access frequency and per-user patterns, and that setting persist=True materializes a volatile table and returns its 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 relatively concise: two sentences for the main purpose and usage, followed by parameter lines. It is front-loaded with the key idea. Slight room for improvement in structuring the parameter details more cleanly, but overall 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 tool with 2 parameters and no output schema, the description covers the purpose, usage context, parameter behavior, and output (access frequency patterns, optionally a table name). It is complete for an agent to understand 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 description coverage is 100%, so the baseline is 3. The description repeats the schema's parameter explanations (database_name, persist) without adding new semantic meaning. It does not improve over the schema's own 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 the tool reports 'access frequency and per-user query patterns for tables and views', which is a specific verb+resource. It distinguishes from sibling tool base_tableAffinity by explicitly stating the alternative use case.
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 guidance: 'Use when the user asks how often tables are accessed, which tables are most popular, or which users are running queries against a database.' It also includes an explicit alternative (base_tableAffinity) when not to use this tool.
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 already declare readOnlyHint and idempotentHint, confirming safe read behavior. The description adds context about the persist parameter (materializing as a volatile table) and clarifies the requirement to not pass an empty database name, which is useful 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 concise and well-structured: a primary purpose sentence, usage context, alternative tool references, and clear parameter documentation. No extraneous 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?
For a simple read-only tool with two parameters and no output schema, the description covers purpose, usage guidelines, parameter requirements, and sibling differentiation comprehensively. No gaps are evident.
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 both parameters. The description repeats the schema's parameter descriptions without adding new meaning or constraints beyond what is already 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 explicitly states 'Show disk space allocation for a specific named Teradata database', providing a specific verb and resource. It clearly distinguishes from sibling tools like dba_tableSpace and dba_systemSpace by mentioning when to use each 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?
The description provides explicit guidance: use when the user asks about space usage for a particular database, and for alternatives like table-level breakdowns (dba_tableSpace) or system-wide totals (dba_systemSpace). It also instructs to ask for clarification if no database name is provided, preventing misuse.
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. The description adds the behavioral detail about the persist parameter materializing results as a volatile table, which is useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a bullet for the argument, front-loading the purpose and clearly explaining the parameter. Every sentence is concise and purposeful.
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 simplicity of the tool (one boolean parameter, no output schema), the description fully covers what the tool does and the optional persist behavior. 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% and the schema description for persist is nearly identical to the description's explanation. The description adds no significant new meaning, so 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?
The description clearly states the tool returns 'Teradata database software version and release information', using a specific verb and resource. This distinguishes it from sibling tools that handle other database metadata.
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 'Use when the user asks what version of Teradata is running on the system', providing clear context. It does not list exclusions or alternatives, but given no sibling for version queries, this is sufficient.
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 safe read-only behavior. The description adds that the 'persist' parameter materializes the result as a volatile table and returns the table name, which is non-obvious. 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 succinct: one sentence for purpose/usage, one sentence listing arguments with formats. No unnecessary words, and structure is 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?
While the tool has no output schema, the description only mentions return format for the persist case. It does not explain what is returned by default (e.g., a list of features), which is a gap. Additionally, there is no mention of pagination or result 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% and each parameter has a description matching the text. The description repeats the schema information without adding new meaning, so it meets the baseline for high coverage 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 explicitly states 'Report which Teradata product features were used during a specified date range,' which is a specific verb+resource combination. Among siblings, other dba tools have distinct purposes (e.g., dba_databaseSpace, dba_sessionInfo), so this tool is clearly differentiated.
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 clear contexts: 'when the user asks about feature adoption, which Teradata capabilities are being used, or how feature utilization has changed.' It does not explicitly mention when not to use it or name alternatives, but the guidance is sufficient for typical use cases.
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 mark the tool as read-only and idempotent. The description adds that it shows throttling events with timestamps and magnitude, but does not disclose full output format. 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 front-loaded purpose, usage guidelines, alternative tool mention, and argument list. Every sentence is meaningful, 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?
For a tool with no output schema, the description explains the output as events with timing and magnitude, which is adequate but lacks specifics on returned fields. Overall, it is mostly complete for its low 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?
Input schema covers all 3 parameters with 100% description coverage. The description restates the same information, adding no new meaning beyond the schema. Baseline score 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 the tool reports Teradata workload management flow control events, specifying the verb 'Report' and resource. It also distinguishes itself from the sibling tool dba_userDelay by stating when to use each.
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 the tool (system throttling, flow control delays) and when not to (individual user waits, recommending dba_userDelay). This is direct and clear.
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 mark readOnlyHint and idempotentHint true, and the description adds behavioral detail about the persist parameter materializing a 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?
Purpose and usage guideline are front-loaded. The parameter list is verbose but necessary given 9 parameters. Could be slightly more concise.
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 system-level scope, filtering options, and persist behavior. No output schema, so a brief mention of return structure would be helpful but not essential.
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 description's parameter listing adds little new meaning beyond readability. 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?
The description states a specific verb 'Report' and resource 'system-wide resource consumption (CPU, IO, memory)' and clearly distinguishes from sibling dba_tableUsageImpact by noting it is 'not tied to a specific database'.
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 'Use when the user asks for system-level resource breakdowns... not tied to a specific database. For per-database or per-user impact within a named database, use dba_tableUsageImpact instead.' This provides clear context and an alternative.
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?
The description discloses that persist=True materializes the result as a volatile table and returns the table name, adding behavioral context beyond the readOnlyHint and idempotentHint annotations. 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 two concise paragraphs: first explaining purpose and usage context, then listing parameters. 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 two parameters, no output schema, and annotations, the description fully covers the tool's behavior: when to use, parameter semantics, and side effects of persist. An agent can invoke it 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 descriptions for both parameters. The description adds operational context, e.g., explaining the effect of persist=True and the use of '*' for all users, going 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 reports 'currently active session information' for a specific user or all users, which is a specific verb+resource combination. It distinguishes from sibling tools like dba_databaseSpace or dba_featureUsage 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?
Explicitly says 'Use when the user asks about open connections, active sessions, or currently logged-in users.' Also provides guidance on default behavior with '*' and that no clarification is needed, making it easy for the agent to decide when to invoke.
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 and idempotentHint, so the description does not repeat that. It adds useful context: aggregation over all databases and the behavior of the 'persist' parameter (materializes as volatile table). The description is transparent without contradicting 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 (two paragraphs) and front-loaded with the core purpose. The usage guidelines and argument are clearly separated. Minor repetition of 'across the entire Teradata system' and 'over all databases' but overall 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 tool with one optional parameter and no output schema, the description provides sufficient context: what it shows, when to use it, and the effect of the parameter. It does not describe the return format, but the verb 'Show' implies a display or result, which is 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?
There is only one parameter ('persist') and its description in the schema matches exactly the description in the text. Since schema_description_coverage is 100%, the description adds no new meaning beyond the schema, earning a baseline score of 3.
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 'Show' and identifies the resource ('total disk space usage across the entire Teradata system, aggregated over all databases'). It also distinguishes from siblings by naming alternative tools for database-level or table-level queries, making the purpose 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 specifies when to use this tool ('warehouse-wide storage, total system capacity, or overall disk consumption across all databases') and provides clear alternatives ('dba_databaseSpace' for single database, 'dba_tableSpace' for table-level details), offering excellent guidance.
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 already declare readOnlyHint and idempotentHint. Description adds behavioral details: results are sorted by size and the persist parameter materializes result as a volatile table, returning 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?
Description is well-structured with a clear purpose sentence, usage guidelines, and bulleted arguments. However, the argument list duplicates schema descriptions, making it slightly redundant. Still efficient for 5 parameters.
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 explains the tool's behavior (ranked space usage) and the persist parameter's effect. It lacks explicit detail on output fields, but the usage scenario is well-covered. Adequate for a query 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 is 3. The description repeats the same parameter descriptions as the schema, adding no new meaning beyond what is already in the schema's property 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?
Clearly states the tool shows table-level disk space usage within a specific Teradata database, ranked by size. It specifies verb, resource, and context, and distinguishes from sibling tools like 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?
Explicitly states when to use (user asks for largest tables in a named database) and when not to (empty database_name), provides instruction to ask for database, and names alternatives (dba_databaseSpace for whole database, dba_systemSpace for system-wide).
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 declare readOnlyHint=true and idempotentHint=true, but the description mentions that when persist=True, it 'materializes result as a volatile table and returns table name', which is a write operation. This contradicts the readOnlyHint, misleading the agent. The description itself is transparent, but the contradiction between description and annotations warrants a score of 1 per the scoring rule.
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 purpose and usage, followed by parameter definitions. However, the parameter section is redundant given the schema's full coverage. Every sentence is useful except the parameter list, which could be omitted. Still, it's not excessively long.
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, usage, and the persist behavior. However, it does not describe the return format for the normal case (e.g., a list of SQL statements), which would be helpful. The default value for no_days (7) is only in the schema, not mentioned. Overall adequate but slightly incomplete.
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%, and the description's parameter section essentially repeats the schema's descriptions verbatim (e.g., 'Number of days to look back'). It adds no new meaning beyond what the schema already provides, so baseline score 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 'Retrieve SQL statements that have been executed against a specific named table', with a specific verb, resource, and scope. It also differentiates from sibling dba_userSqlList by specifying when to use each.
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 guidance: only call when user explicitly names a table, otherwise ask for clarification. Also states not to use for user-specific history but to use dba_userSqlList instead.
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, so the description correctly inherits those traits. Beyond annotations, the description adds behavioral detail for the 'persist' parameter: 'materializes result as a volatile table and returns table name.' This is a valuable side-effect disclosure. However, it does not mention error handling (e.g., if database not found), which would strengthen transparency.
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 (6 informative sentences) and front-loaded: first sentence states purpose, then usage guidelines, condition, alternative, then parameter details. Every sentence adds value with 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 no output schema, the description should explain the return format (e.g., what columns, how results are presented). It only says 'identify... which users and tables' without specifying structure. Parameter descriptions and usage guidelines are thorough, but the missing output description is a notable gap for a data-retrieval 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 is 3. The description adds marginal value by emphasizing 'Required — do not pass empty string' for database_name and restating defaults. This extra clarification justifies a 4, but it largely mirrors 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's function: 'Identify which users and tables are driving the most query and resource activity within a specific Teradata database.' It uses a specific verb ('identify'), resource ('users and tables'), and context (specific database). It also distinguishes from sibling tool dba_resusageSummary by directing system-wide queries elsewhere.
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 who is hitting a named database hardest...' and when not to: 'ONLY call when the user has specified a database name — if no database name appears in the message, ask for clarification.' Also provides a clear alternative: 'For system-wide CPU, IO, and memory metrics... use dba_resusageSummary instead.'
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 true. Description adds no extra behavioral context beyond the basic purpose, such as permissions, rate limits, or side effects. No contradiction, but no added value.
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 with three clear parts: purpose, usage guidance, and argument list. No unnecessary words; front-loaded with the main 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?
Provides essential usage context and alternative tool. However, does not describe the default output format (e.g., table, text) beyond mentioning persist materializes a volatile table. Given no output schema, a bit more detail would improve 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 parameters are already well-documented. Description does not add new semantics beyond restating 'start_date' and 'end_date' context in the overall purpose. Baseline score 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 clearly states the tool reports how long Teradata users waited in the query queue. It uses specific verb 'Report' and resource 'user wait times', and distinguishes from sibling tool dba_flowControl by contrasting use cases.
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 advises when to use this tool (user asks about wait times, queue delays) and when to instead use dba_flowControl (system-level throttling). Provides clear alternative.
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=true and idempotentHint=true, setting a baseline. The description adds value by explaining the persist parameter materializes a volatile table and returns its name, which is a key behavioral detail 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 well-structured with a clear purpose, usage guidelines, and argument list. The argument list is somewhat redundant with the schema, but it is helpful to have in-line. Minor room for improvement by relying more on schema.
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 retrieval tool with good annotations, the description covers purpose, when to use, conditions, and parameters. It does not describe the output format (e.g., fields returned), but this is a minor gap given the tool name and context.
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 100% schema description coverage, the baseline is 3. The description's argument list mostly repeats schema details, but it adds context by grouping parameters and emphasizing the required nature of user_name.
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 'Retrieve SQL statements executed by a specific named user', using a specific verb and resource. It explicitly distinguishes from the sibling tool dba_tableSqlList by specifying when to use each.
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 asks about a particular user's queries), when not to use (no user name mentioned), and an alternative (dba_tableSqlList for table-specific history). It also warns against empty user_name.
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 declare readOnlyHint=true and idempotentHint=true. The description adds context about performance (1 SQL round-trip instead of 4, in-memory edge sharing) and algorithmic complexity, which is beyond what annotations provide. 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 well-structured with clear sections (purpose, performance, use cases, parameters, return format, examples). It is slightly lengthy but every part adds value. Front-loaded with the main composite 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?
Given the complexity (6 parameters, no output schema, composite of 4 analyses), the description is comprehensive. It explains the return structure with JSON example, details parameters, and provides multiple example calls. No 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 0%, so the description carries full burden. It provides detailed explanations for all 6 parameters, including critical notes (e.g., container_pattern must be string not array), default values, and references to other tools (graph_edgeContractDDL). Examples further clarify usage.
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 it is a composite graph analysis combining findRootObjects, connectedComponents, detectCycles, and bfsLevels in a single call. It distinguishes itself from sibling tools like graph_findRootObjects by explaining the efficiency gain of eliminating serial round-trips.
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 a dedicated 'Use this for' section listing specific scenarios (full migration readiness, pre-migration analysis, dashboard population, workflows requiring 3+ individual tools). This clearly guides when to use the composite tool versus the individual sibling tools.
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?
The annotations already declare readOnlyHint and idempotentHint. The description adds substantial behavioral context: pure-Python implementation, one SQL round-trip, BFS algorithm details, direction conventions, filter application order, and response structure. 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 long but well-structured with sections, bullet points, and examples. It is front-loaded with purpose and usage guidance. While slightly verbose, every sentence adds value, so conciseness is good.
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 full response structure with example fields and explanations. It covers technical implementation, filter order, and behavior for all parameters. For a complex tool with 6 parameters, this is exceptionally 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 description coverage is 0%, but the description compensates thoroughly. Each parameter is explained with examples, defaults, and detailed semantics (e.g., root_node_list exact FQ names only, direction meanings for max_depth_up/down). This provides full parameter 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's purpose: 'Compute BFS shortest-path hop distances from one or more root nodes.' It uses a specific verb and resource, and explicitly distinguishes from the sibling tool graph_traceLineage with a comparative section.
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 a dedicated 'WHEN TO USE THIS TOOL vs graph_traceLineage' section, listing specific use cases and explicitly stating when not to use it. It also advises using graph_findRootObjects first, offering clear guidance on prerequisites.
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 readOnlyHint and idempotentHint. The description adds significant behavioral context: 'Pure-Python implementation — no stored procedure required', 'Issues a single SQL SELECT... then performs Union-Find WCC partitioning entirely in the MCP server process.' It also explains what a connected component is, which exceeds annotation information.
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 sections, but it is slightly verbose for the amount of information. Every sentence adds value, though some duplication could be trimmed.
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 (3 parameters, no output schema), the description provides a full return structure with fields for node_details, component_summaries, and summary_stats. It covers all necessary information for an agent to 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?
Schema description coverage is 0%, so the description fully compensates by providing detailed semantics for each parameter: container_pattern format and examples, exclude_objects default and matching logic, edge_repository requirement and pattern. It also includes critical warnings about types (string vs array).
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 'Identify all Weakly Connected Components (WCC) in the dependency graph.' It uses a specific verb ('identify') and specific resource ('dependency graph'), and distinguishes itself from sibling graph tools like graph_bfsLevels and graph_detectCycles by focusing on WCC partitioning.
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 lists when to use this tool (e.g., 'Understanding graph structure and partitioning', 'Pre-filtering before cycle detection'). It provides clear context and alternatives by implying that other graph tools handle different aspects.
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?
Annotations indicate readOnlyHint=true and idempotentHint=true. The description adds significant context: 'Pure-Python implementation — no stored procedure required. Issues a single SQL SELECT... WCC partitioning followed by iterative DFS cycle detection entirely in the MCP server process.' This details internal behavior 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 well-structured with bullet points for use cases and arguments, and a clear output section. It is reasonably concise given the detail needed, though minor redundancy exists (e.g., repeating 'edge_repository' explanation).
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 has three parameters and no output schema, the description provides complete coverage: purpose, implementation details, parameter semantics, and a full output schema description with fields and structure. It leaves no major gaps for an agent to misinterpret.
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%, requiring the description to fully explain parameters. It does so thoroughly: container_pattern with examples ('DFJ%', '%WBC%,%StGeo%'), exclude_objects with default, and edge_repository with an example and reference to graph_edgeContractDDL. Each parameter's purpose and format are clearly stated.
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 'Detect circular dependencies (cycles) in the dependency graph,' specifying the verb 'detect' and the resource 'dependency graph.' It distinguishes from sibling tools like graph_connectedComponents and graph_bfsLevels, which serve different graph analysis 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 lists multiple use cases (validating graph integrity, finding circular references, identifying stub-then-replace patterns, debugging topological sort hangs, pre-deployment checks) and explains arguments with examples. It lacks explicit exclusion criteria or alternative tool references, but the provided context is clear.
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 reinforces by stating 'no database connection required', 'no SQL is executed', and that the conn parameter is accepted but not used. No contradictions, and adds detail about output types and returned fields.
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 and bullet points, but somewhat verbose with detailed column lists and full example comments. Every sentence adds value, but could be more concise 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?
The description fully covers the tool's behavior, parameter details, return structure (with output schema listed), and edge cases like the AI-Native shortcut. It is complete enough for an agent to invoke 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 coverage is 100%, and the description adds substantial meaning: it explains the purpose of each parameter with examples (e.g., target_database is typically {ProductName}_Semantic), default values, and how output_type affects DDL generation. This goes far beyond the schema's property 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?
Clearly states the tool 'generates DDL for a Graph Edge Contract-conforming table or view', which is a specific verb-resource combination. It distinguishes from siblings by emphasizing no database connection needed and provides a shortcut for AI-Native Data Products, differentiating from other graph analysis tools.
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 ('generate DDL') and when not ('if working within an AI-Native Data Product, pass that view's name directly'). Also clarifies that the conn parameter is unused for compatibility, and provides a concrete example of alternative usage.
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?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds algorithmic detail (identifies objects that appear as sources but never as targets) and explains the query process. It does not mention auth or rate limits, but for a read-only analysis tool, the provided context is sufficient.
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 long and includes some redundancy (e.g., multiple repetitions of the string type requirement). While it is well-structured with sections, it could be more concise 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?
With 5 complex parameters and no output schema, the description covers usage extensively with examples, but lacks detailed specification of the return format beyond 'formatted response with root objects + metadata'. Still, it provides enough context for an 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?
Since schema description coverage is 0%, the description carries full burden. It provides exhaustive documentation for all 5 parameters, including wildcard/CSV formatting, whitespace handling, code examples, and critical type warnings. This greatly surpasses minimal compensation.
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 finds root objects (no upstream dependencies) in specified containers, and explicitly situates it as a starting point for downstream impact analysis. It distinguishes from sibling tools like graph_traceLineage and graph_detectCycles by focusing on foundational data sources.
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 (finding starting points for impact analysis, identifying base tables, etc.) and example queries. However, it does not explicitly state when NOT to use this tool or contrast it with alternatives like graph_traceLineage for downstream tracking.
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?
Annotations indicate idempotent and read-only, and the description adds valuable behavioral details: hybrid implementation, no stored procedure, only reachable subgraph crosses network, Python deduplication. 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 well-structured with sections (description, examples, use cases, arguments, returns). It is somewhat lengthy but front-loaded with critical information. Minor redundancy could be trimmed.
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 (7 parameters, no output schema, 0% schema coverage), the description is remarkably complete. It even provides the return structure and edge row fields, leaving 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?
Despite 0% schema description coverage, the tool description provides thorough explanations for all 7 parameters, including types, defaults, examples, and formats. 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 clearly states the tool analyzes object dependencies in Teradata, supporting wildcards and CSV patterns. It distinguishes from sibling tools by focusing on lineage/impact analysis, with specific use cases listed.
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 lists use cases (impact analysis, lineage tracing, etc.) and provides examples. While it doesn't explicitly say when not to use, the context is clear and helpful.
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=true and idempotentHint=true, so the description's statement of reading directly from a table aligns and adds no contradiction. It adds a behavioral constraint (do not use base_readQuery) which provides additional guidance 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 clear purpose, usage notes, and parameter descriptions. Each sentence adds value. Slightly verbose with repeated parameter descriptions across description and schema, but overall 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?
Covers purpose, usage guidelines, parameter semantics, and returns. Since there is no output schema, the return type (dict) is mentioned. Could be more specific about return format, but sufficient for an agent to 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%, so baseline is 3. The description adds context by specifying that labels is typically date/time and columns are numeric, but much of the parameter info is repeated from 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 generates a line chart from a Teradata table, specifies the source type (table), and explicitly distinguishes from siblings (plot_pie_chart, plot_polar_chart, plot_radar_chart) and from base_readQuery.
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 context: time-series, trend lines, sequential data. Includes clear 'do not use' conditions: proportional breakdowns (use pie/polar) and multi-dimensional spider comparisons (use radar). Also instructs not to pre-fetch with base_readQuery.
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?
Annotations indicate readOnlyHint and idempotentHint are true. The description adds important context that the tool reads directly from Teradata without pre-fetching, reinforcing safety. However, it could briefly mention that no data modification occurs.
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 reasonably concise but repeats parameter details that are also in the schema. It could be slightly tighter, but the structure is effective with purpose, usage, and parameter explanation in one paragraph.
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 essential aspects for a simple 3-parameter tool: purpose, usage, and return type. It lacks details about the returned dict structure, but given no output schema and low complexity, this is 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%, but the description adds meaning beyond the schema by explaining the role of each parameter (e.g., 'category column for labels', 'numeric value column'). This helps the agent understand how to map user requests to parameters.
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 generates a pie chart from a Teradata table, specifying the table name, labels column, and value column. It distinguishes itself from sibling tools like plot_polar_chart and plot_line_chart by explicitly naming them as alternatives for polar area charts and time-series trends.
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 (for proportions, shares, breakdowns) and what not to do (do not pre-fetch data with base_readQuery). It also provides clear alternatives for related chart types, aiding correct tool selection.
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 declare readOnlyHint=true and idempotentHint=true. Description adds value by specifying that the tool reads directly from a Teradata table and instructs not to use base_readQuery first, implying the tool handles the query internally. 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 concise and well-structured: two sentences for the main purpose and usage, followed by a clear list of three parameters with their types and roles. No extraneous 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 lacks an output schema, and the description only states the return type as 'dict' without explaining what the dictionary contains (e.g., chart data, configuration, or a generated chart object). For a visualization tool, this is a significant gap, though the input side is well-covered.
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 parameter descriptions in the tool description are identical to those in the input schema. The description does not add new meaning beyond the schema; however, the main description provides context for each parameter's role in generating a polar chart, making it baseline adequate.
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 the tool generates a polar area chart from a Teradata table, specifying the required parameters (table_name, labels, column). Distinguishes from sibling tool plot_pie_chart, fulfilling the specific verb+resource criterion.
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 (when user asks for polar chart or polar area chart) and when not to (do not use base_readQuery first). Provides clear alternative (use plot_pie_chart for standard pie-style breakdowns).
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?
Adds important behavioral detail beyond readOnly and idempotent annotations: it reads directly from a table and advises not to pre-fetch with base_readQuery. 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?
Concise and well-structured. One short paragraph with key purpose, usage guidance, and parameter mapping. 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?
Lacks details on return value format (only says 'dict' in a comment). With no output schema, description could specify what the dict contains (e.g., chart object). Otherwise sufficient given annotations and sibling context.
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 description repeats parameter info almost verbatim. Adds minor context in the main paragraph (e.g., 'one or more value columns'), but no additional semantics or 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 it generates a radar chart from a Teradata table, specifies the verb 'generate' and resource, and differentiates from sibling tools like plot_line_chart by stating when to use alternatively.
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 (spider chart, radar chart, multi-dimensional comparison) and when-not-to-use (time-series/trend data, directing to plot_line_chart). Also warns against using base_readQuery first.
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?
Annotations already declare readOnlyHint and idempotentHint. The description adds behavioral context about the persist parameter (materializes as volatile table and returns table name if True). No contradictions. Could clarify default return format (data vs table name).
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?
Three sentences for purpose and usage, plus a bullet list for parameters. No unnecessary words. Front-loaded with core action. Highly 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, but description indicates return of 'summary statistics' and optionally a table name. This is sufficient for an overview tool. Could detail what statistics are included, but not essential given sibling differentiation.
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 description's role is limited. The description restates parameter purposes in a bullet list, adding the persist behavior context but not much beyond the schema. 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?
The description clearly states it returns summary statistics for ALL columns in a table, distinguishing it from the sibling tool qlty_univariateStatistics for single columns. The verb 'get' and resource 'summary statistics for all columns' are specific.
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 advises when to use ('when user asks for overview, profile, or summary of every field') and when not to use ('for detailed statistics on a SINGLE specific column, use qlty_univariateStatistics instead'). This provides clear context for selection.
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 already set readOnlyHint=true and idempotentHint=true, ensuring the agent knows it's safe and repeatable. The description adds behavioral details: the optional 'persist' parameter materializes a volatile table and returns its name. This goes beyond the annotations, but doesn't cover potential performance notes or the exact format of non-persisted results.
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 divided into a usage paragraph and an argument list. It's front-loaded with the core action. Each sentence provides necessary information without redundancy. Could be slightly tighter, but overall 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 should clarify the return format. It states 'Get unique values' and for persist 'returns table name', but doesn't specify the structure when persist is false (e.g., an array). This is a minor gap. Otherwise, for a 4-param tool with full schema coverage, it covers the essentials.
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 4 parameters. The description echoes and expands slightly, e.g., stating the requirement for column_name and the ask-for-clarification rule. This adds value beyond the schema, such as the persist behavior, but the schema already defines each parameter's role well.
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 purpose as 'Get the unique (distinct) values present in a specific column of a table.' It uses a specific verb ('Get') and resource ('unique values'), and the name 'distinctCategories' aligns. Among siblings like qlty_columnSummary (summarizes statistics), this tool's purpose is distinct and clear.
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 when to use: 'Use when the user asks what unique values, categories, or entries exist.' It also provides a prerequisite instruction: 'if no column name is specified, ask for clarification.' This gives clear context, though it does not explicitly exclude other cases or mention alternatives.
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 indicate read-only and idempotent behavior. Description adds that it returns a column-level summary and explains the persist parameter's effect, adding 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, front-loaded with purpose, and well-structured with usage guidelines and parameter list. No unnecessary 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 3 parameters, no output schema, and rich annotations, the description provides complete guidance including usage context, parameter explanations, and return value nature. Adequate for an AI agent.
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 each parameter. The description repeats parameter info but does not add meaning beyond the schema, so baseline score 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 the tool lists column names with NULL/missing values and returns a column-level summary. It distinguishes from the sibling tool 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?
Explicitly tells when to use (user asks for columns with nulls) and when not to (actual data rows), providing a direct alternative (qlty_rowsWithMissingValues).
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 already declare readOnlyHint=true and idempotentHint=true. Description adds return info (list of column names) but no further behavioral traits. Adequate given annotation coverage.
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 short paragraphs: first defines tool and usage, second lists arguments. Front-loaded, no redundant 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?
Tool is simple (returns list of column names). Description covers purpose, usage, and parameters completely. No output schema 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%, description repeats parameter details without adding new meaning beyond schema. Baseline 3 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?
States specific verb 'identify' and resource 'numeric columns in a table' with distinct focus on negative values. Differentiates from sibling tools like 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?
Explicitly tells when to use: 'user asks about negative numbers, values below zero, or columns with anomalous negative entries.' Does not mention alternatives, 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.
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?
Adds context beyond readOnlyHint and idempotentHint annotations by describing return behavior (records themselves or table name with persist). 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?
Well-structured with bullet points for arguments, front-loaded main purpose. Slightly repetitive in 'Do NOT' statements but overall clear 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?
Covers main aspects: returns rows or table name, not a column summary. Lacks explicit output format detail (e.g., which columns returned), but adequate given 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 has 100% coverage with descriptions; description reiterates and adds clarity (e.g., optional database_name, persist effect), providing added 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?
Description clearly states it retrieves actual data rows where a specific column is NULL or missing, distinguishing it from qlty_missingValues which provides a column-level summary.
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 user wants to SEE or FETCH rows with missing values), when not to use (avoid base_readQuery), and distinguishes from sibling qlty_missingValues.
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, and description adds the persist behavior and return of table name, fully disclosing side effects.
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 for purpose and usage, then argument list; no extra words, front-loaded with key 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?
Given the simple tool with 4 params and no output schema, the description covers functionality, usage context, and parameters completely.
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 description lists parameters but only repeats schema descriptions; no additional semantic value 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 calculates mean and standard deviation for a single numeric column, and distinguishes it from sibling qlty_univariateStatistics by specifying the full statistical profile 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 (when user asks for standard deviation, spread, or mean+variability) and when not to (for fuller stats, use qlty_univariateStatistics).
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 true. The description adds transparency by explaining the persist 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?
Very concise: two sentences for purpose and usage, then bullet-list arguments. Front-loaded with key action and distinctions.
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?
Fully covers purpose, usage, parameters, and output implications. No output schema but description sufficiently implies return values.
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 3. The description clarifies the purpose and output, which indirectly helps parameter understanding, but restates schema for arguments.
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 calculates full univariate statistics for a single numeric column, listing specific statistics (min, max, mean, etc.). It distinguishes itself from siblings by specifying use cases.
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 vs alternatives: use for comprehensive stats of one column; for just mean and std use qlty_standardDeviation; for all columns use qlty_columnSummary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rag_Execute_WorkflowCRead-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?
The description describes creating a query table and storing data (writes), but annotations set readOnlyHint=true and idempotentHint=true. This contradiction requires a score of 1 per rules.
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 extremely verbose (over 500 words) with repetitive information (e.g., purpose stated multiple times). While it uses headings for structure, it lacks conciseness and could be significantly shortened.
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 workflow steps, configuration, technical details, and return format (chunks with text, score, metadata). However, it omits explanation of the 'k' parameter and conflicts with annotations, creating gaps in usability.
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% and the description does not explicitly describe the parameters 'question' and 'k'. It implies 'question' is the user query but adds no detail beyond the name; 'k' is not mentioned at all. The description fails to add 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 executes a complete RAG workflow to answer user questions based on document context, with specific verb and resource. It distinguishes itself from all sibling tools, which are unrelated to RAG.
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 this tool should be used when user query is tagged with /rag, and that it is a complete end-to-end workflow needing no additional tools. However, it does not provide explicit when-not-to-use or alternatives, though siblings are different.
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?
Annotations (readOnlyHint, idempotentHint) already indicate safe read behavior. The description adds that it lists permissions and requires a role name, but doesn't detail edge cases like non-existent roles or output format. Given annotation coverage, this is sufficient.
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: a clear opening sentence, usage guidance, and a bulleted parameter list. No unnecessary words, front-loaded 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?
For a simple read-only tool with full annotation coverage and no output schema, the description adequately covers purpose, usage, and parameters. Could briefly mention output format (e.g., list of permission strings), but not essential.
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 repeats the schema's parameter descriptions verbatim without adding extra context or examples. No additional 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?
The description clearly states the tool lists database-level permissions for a Teradata role, using a specific verb and resource, and distinguishes it from sibling tools like sec_userDbPermissions and sec_userRoles.
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 this tool (for role permissions), warns against confusion with user-level queries, and names alternative tools (sec_userDbPermissions, sec_userRoles). Also states the prerequisite of a role name.
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 indicate readOnlyHint and idempotentHint. The description adds context that it lists 'directly' granted permissions, distinguishing from inherited roles. It does not contradict annotations and provides additional behavioral insight, though could mention performance or required auth.
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 succinct and well-structured: a clear first sentence, followed by usage guidelines, then a bulleted parameter list. Every sentence adds value without redundancy, earning the highest score.
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 two parameters, no output schema, and annotations indicating idempotent/read-only, the description covers purpose, usage, and parameters adequately. However, it lacks details on the return format for the default non-persist case, leaving 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 description coverage is 100%, so baseline is 3. The description adds extra meaning: for user_name it notes 'Requires a user name' and for persist it explains 'materializes result as a volatile table and returns table name,' which goes beyond the schema 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 the tool lists database-level access permissions for a specific Teradata user, using a specific verb and resource. It explicitly distinguishes from the sibling tool sec_userRoles, meeting the high bar for purpose clarity.
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: 'Use when the user asks what a named user can DO in each database' and 'Do NOT use to see what roles a user has — use sec_userRoles for that.' This clearly defines when to use and when not, with a named alternative.
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 indicate read-only and idempotent behavior. Description adds context about the persist parameter creating a volatile table and returning its name, which is a behavioral side effect.
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 and well-structured: purpose first, then usage guidelines, then parameter list. No filler, 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 read tool with 2 params and no output schema, the description is complete: purpose, when to use, parameter details, and a note on persist behavior. No 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 covers both parameters with descriptions, and the description adds a user-friendly explanation, especially for persist. High schema coverage sets baseline at 3, but additional clarity warrants 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 it lists roles for a specific Teradata user account, distinguishing from sibling tools for role permissions and user DB permissions.
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 (user asks about roles) and when not to use, with direct references to alternative tools (sec_rolePermissions, sec_userDbPermissions). Also states required input (user name).
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 indicate read-only and idempotent behavior. The description reinforces this by stating it analyzes pre-computed statistics and describes the output format. It adds context about performance categorization and thresholds, which goes 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 well-structured with sections and bullet points, but it is lengthy. While detailed, some parts like the optimization decision framework could be condensed. It is adequate but not maximally concise.
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 (2 parameters, no output schema, annotations present), the description explains the tool's purpose, available metrics, usage workflow, and output format. It compensates for missing schema descriptions and provides sufficient context for an AI agent.
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 schema has 2 parameters with 0% description coverage. The description lists available sorting metrics for sort_by_metric and mentions using limit_results to focus on top clusters, providing necessary meaning for both parameters.
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 to identify optimization opportunities without re-running the pipeline. It lists specific analysis capabilities and differentiates itself from sibling tools like sql_Execute_Full_Pipeline by emphasizing iterative 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 a typical analysis workflow and optimization decision framework, guiding when to use the tool (e.g., for iterative analysis) and what steps to take. It implicitly contrasts with other tools but lacks explicit exclusion criteria for when not to use it.
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 describes creating tables and storing vector data (side effects), but annotations declare readOnlyHint: true, creating a contradiction. The description does not resolve this inconsistency, so it fails to provide transparent behavioral information.
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 and front-loaded content. However, it is quite lengthy; some redundancy in metrics explanation could be trimmed without losing 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?
Given the tool's complexity (multiple pipeline steps, many metrics), the description covers workflow, configuration, prerequisites, and use cases. However, it lacks an explicit description of the return value or output format, which 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?
The description explains the two parameters (optimal_k and max_queries) with context about defaults and configurability. This adds significant meaning beyond the schema, which has 0% description 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 executes a full SQL query clustering pipeline for optimization. It uses specific verbs and resources, and distinguishes from sibling tools like sql_Analyze_Cluster_Stats by being the complete 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?
The description provides explicit guidance: it includes an optimization workflow section listing subsequent tools to use, outlines use cases, and mentions prerequisites. This helps the agent decide when to invoke this tool versus alternatives.
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?
Annotations declare readOnlyHint and idempotentHint as true, indicating safe read-only behavior. The description enhances transparency by detailing the performance categorization logic (CPU, skew categories) and the metrics available for sorting. It also describes the output composition (SQL text, metrics, categories). 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 long but well-structured with bold headers and bullet points. Each section serves a purpose: purpose, capabilities, strategies, metrics, categories, workflow, limits, output. A bit verbose but efficiently organized. Could be more concise in some sections, but nothing is wasted.
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 (3 parameters, no output schema, rich behavioral context), the description is thorough. It covers input parameter usage, output composition (SQL text, metrics, categories), and behavior (sorting, categorization). It also places the tool in a workflow with siblings. Without output schema, the description fully details return values.
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% (description does not document parameters in structured format), but the description extensively compensates. It explains the 'metric' parameter with available values and default, implies 'cluster_ids' by context, and covers 'limit_per_cluster' in the query limit strategy. The default values and sorting options are clearly documented, adding significant 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 retrieves actual SQL queries and performance metrics from specific clusters for pattern analysis. The bolded title and first paragraph establish the specific verb-resource pair (retrieve queries from clusters) and distinguish it from sibling tools like sql_Analyze_Cluster_Stats, which likely focuses on cluster-level statistics rather than individual query details.
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 this tool: after cluster identification from sql_Analyze_Cluster_Stats, as part of a typical optimization workflow. It also details query selection strategies by various metrics and a query limit strategy. It does not explicitly mention when not to use or name alternatives beyond the workflow context, but the context is clear enough.
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.
47 tool updates
v0.2.4- First observed
base_columnDescription - First observed
base_columnMetadata - First observed
base_databaseList - First observed
base_readQuery - First observed
base_saveDDL - First observed
base_tableAffinity - First observed
base_tableDDL - First observed
base_tableList - First observed
base_tablePreview - First observed
base_tableUsage - First observed
dba_databaseSpace - First observed
dba_databaseVersion - First observed
dba_featureUsage - First observed
dba_flowControl - First observed
dba_resusageSummary - First observed
dba_sessionInfo - First observed
dba_systemSpace - First observed
dba_tableSpace - First observed
dba_tableSqlList - First observed
dba_tableUsageImpact - First observed
dba_userDelay - First observed
dba_userSqlList - First observed
graph_analyseDatabase - First observed
graph_bfsLevels - First observed
graph_connectedComponents - First observed
graph_detectCycles - First observed
graph_edgeContractDDL - First observed
graph_findRootObjects - First observed
graph_traceLineage - First observed
plot_line_chart - First observed
plot_pie_chart - First observed
plot_polar_chart - First observed
plot_radar_chart - 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_Execute_Workflow - First observed
sec_rolePermissions - First observed
sec_userDbPermissions - First observed
sec_userRoles - First observed
sql_Analyze_Cluster_Stats - First observed
sql_Execute_Full_Pipeline - First observed
sql_Retrieve_Cluster_Queries
TDQS
Each tool has a clearly distinct purpose, and descriptions explicitly cross-reference related tools to guide selection. Overlaps like base_columnDescription vs base_columnMetadata are resolved by stating when to use each. No ambiguity remains for an agent.
The prefix system (base_, dba_, graph_, etc.) is consistent, but naming after the prefix mixes verb_noun, noun_verb, and camelCase patterns (e.g., base_readQuery vs base_tableList, base_columnMetadata). Some names omit underscores between words, reducing predictability.
47 tools is high for a single server, covering diverse domains (DBA, graph, quality, RAG, security, SQL optimization). While each domain is internally coherent, the breadth suggests the server could be split into smaller, more focused servers. The count exceeds the recommended 3-15 range for a well-scoped server.
The tool surface is comprehensive for a read-heavy database server: it covers metadata inspection, DBA analytics, dependency graph analysis, data quality profiling, security visibility, and SQL optimization. Minor gaps exist (no user/role creation, no write operations), but they align with the server's apparent 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
Let AI agents query data and act across all your business apps via MCP.
Connect AI agents to financial institution origination, analytics, and compliance workflows.
- myriadeOAuthai.myriade
Explore and query your data warehouse through Myriade's AI data analyst agent.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI agents and users to query, analyze, and manage Teradata databases through modular tools for search, data quality, administration, and data science operations. Provides comprehensive database interaction capabilities including RAG applications, feature store management, and vector operations.39MIT
- FlicenseBqualityFmaintenanceEnables secure interaction with Teradata databases through SQL queries, schema exploration, and business intelligence analysis with enterprise-grade OAuth 2.1 authentication and workload management capabilities.89-
- AlicenseCqualityDmaintenanceMCP server for Teradata databases, providing tools and prompts for querying, analyzing, and managing data through AI agents.38MIT
- FlicenseNot gradedqualityDmaintenanceEnables machine learning data preprocessing pipeline creation and model training, deployment, and prediction for Teradata databases.1-
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/manzoor-source/teradata-mcp-server-stc'
If you have feedback or need assistance with the MCP directory API, please join our Discord server