Teradata MCP Server
Allows running SQL queries, exploring metadata (tables, views), and previewing sample rows from a Teradata database via the MCP protocol.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Teradata MCP Servershow me the first 10 rows from the orders table"
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.
Teradata MCP Server
An MCP (Model Context Protocol) server for Teradata. Enables Claude (via Cowork or Claude Desktop) to run SQL queries, explore metadata, and interact directly with Teradata databases.
Features
Execute arbitrary SQL queries with configurable row limits
List tables and views within a database
Preview sample rows from any table
Test connectivity and retrieve the database version
Environment-based configuration via
.envSupports
stdiotransport (Claude Desktop / Cowork) andstreamable-http
Related MCP server: Informix MCP Server
Tools
Tool | Description |
| Tests the connection and returns the Teradata version |
| Executes a SQL statement and returns results as JSON |
| Lists tables and views in a given database |
| Returns a sample of the first rows from a table |
Details
ping()
Confirms the connection is active. Useful for validating configuration before running queries.
read_query(sql, row_limit?)
Executes any SQL statement. row_limit is optional — defaults to DEFAULT_ROW_LIMIT (1000). Never exceeds MAX_ROW_LIMIT (50000). Returns truncated: true when results were cut off.
list_tables(database)
Queries DBC.TablesV and returns the name, type (Table / View), and creation date of each object in the given database.
table_preview(database, table, row_limit?)
Executes SELECT TOP N * FROM database.table. Default row_limit is 10.
Installation
Prerequisites
Python 3.11+
uv (package manager)
Access to a Teradata server
Steps
# 1. Clone the repository
git clone <repository-url>
cd teradata-mcp-server
# 2. Install dependencies
uv sync
# 3. Set up environment variables
cp .env.example .env
# Edit .env with your Teradata credentials
# 4. Test the connection
uv run teradata-mcp-serverConfiguration
Environment variables (.env)
Variable | Required | Default | Description |
| ✅ | — | Connection URI: |
| — |
| Authentication mechanism ( |
| — |
| MCP transport ( |
| — |
| Host for HTTP transport |
| — |
| Port for HTTP transport |
| — |
| Connection pool size |
| — |
| Extra connections allowed above pool size |
| — |
| Timeout to acquire a connection (seconds) |
| — |
| Default row limit for |
| — |
| Hard ceiling — callers cannot exceed this |
| — |
| Log level ( |
Cowork Configuration
In Claude Cowork (or Claude Desktop), go to Settings → Claude Cowork → Edit Config and add the block below inside mcpServers:
{
"mcpServers": {
"teradata": {
"command": "uv",
"args": [
"--directory",
"/path/to/teradata-mcp-server",
"run",
"teradata-mcp-server"
],
"env": {
"DATABASE_URI": "teradata://user:password@host:1025/database"
}
}
}
}Replace
/path/to/teradata-mcp-serverwith the absolute path to the project on your machine and fill in your credentials inDATABASE_URI.
If you prefer to keep credentials in .env rather than exposing them in the config JSON, omit the "env" field — the server reads .env automatically on startup.
Project Structure
teradata-mcp-server/
├── .env.example # Environment variables template
├── pyproject.toml # Dependencies and entry point (uv/hatchling)
├── README.md
└── src/
├── core/
│ ├── __init__.py
│ ├── config.py # Settings (pydantic-settings, reads .env)
│ └── connection.py # SQLAlchemy singleton engine (get_engine)
├── tools/
│ ├── __init__.py
│ └── base.py # Tools: ping, read_query, list_tables, table_preview
└── server/
├── __init__.py
└── teradata_mcp_server.py # Entry point: FastMCP instance + mcp.run()Available Tools
4 toolslist_tablesA
Lista as tabelas e views de um banco de dados Teradata.
| Name | Required | Description | Default |
|---|---|---|---|
| database | Yes | Nome do database (schema) a consultar. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states the action (list) but does not disclose if it is read-only, performance implications, or permission requirements. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary information. It is appropriately 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 tool's simplicity, the presence of an output schema, and high schema coverage, the description provides sufficient context for an agent to use 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 coverage is 100%, with the single parameter 'database' already described clearly. The description does not add further 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 lists tables and views of a Teradata database, using a specific verb and resource. It differentiates from sibling tools like ping, read_query, and table_preview.
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?
No explicit guidance on when to use this tool versus alternatives. The context of sibling tools provides implicit differentiation, but the description lacks explicit usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingA
Testa a conexão com o servidor Teradata.
Executa um SELECT simples e retorna a versão do banco, confirmando que a conexão está ativa e configurada corretamente.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the tool runs a simple SELECT and returns the version, which accurately reflects its behavior. It does not mention potential side effects (likely none) or rate limits, but for a ping tool, 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?
The description is two sentences, directly stating the purpose and behavior without extraneous information. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and the presence of an output schema (which covers return details), the description adequately covers the connection test purpose. It is complete for its role.
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 tool has no parameters, so no additional documentation is needed. The baseline score of 4 applies because there are no parameters to describe.
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 tests the Teradata server connection by executing a simple SELECT and returning the database version. This distinguishes it from siblings like read_query or list_tables, which focus on data access or schema listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage to confirm connection is active and correctly configured, which is appropriate. It does not explicitly state when not to use it, but the simple nature and sibling context make clear that for data operations, other tools are better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_queryB
Executa uma consulta SQL no Teradata e retorna os resultados.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | Instrução SQL a executar (SELECT recomendado). | |
| row_limit | No | Número máximo de linhas. 0 usa o padrão configurado (DEFAULT_ROW_LIMIT). Não pode exceder MAX_ROW_LIMIT. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as side effects, authentication needs, or whether only SELECT queries are safe. The phrase 'consulta SQL' and schema hint 'SELECT recomendado' imply read-only usage, but this is not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the verb 'Executa' and directly conveys the tool's action and result. Every word is necessary.
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 an output schema present, the description does not need to explain return values. However, it lacks any caveats about query safety, row limits, or best practices, which would improve completeness for a moderately complex 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 the schema already documents both parameters (sql and row_limit) adequately. The description adds no additional meaning beyond what the schema provides, meeting the baseline score.
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 SQL queries in Teradata and returns results. The name 'read_query' aligns with this purpose, and the sibling tools (list_tables, ping, table_preview) are distinct, so the tool's function is 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?
The description offers no guidance on when to use this tool versus alternatives, nor does it specify any prerequisites or exclusions. It merely describes the action without contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
table_previewB
Retorna uma amostra das primeiras linhas de uma tabela.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Nome da tabela. | |
| database | Yes | Nome do database onde a tabela está. | |
| row_limit | No | Número de linhas a retornar (padrão 10, máximo MAX_ROW_LIMIT). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It indicates a read operation ('retorna') but lacks details on permissions, error handling, or return format beyond 'first rows'. Minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with verb, no unnecessary words. Every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 params, no nested objects, has output schema), the description is adequate but could benefit from mentioning output shape or row order. It does not explain the 'sample' aspect (e.g., random vs first).
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 adds no additional meaning beyond the schema's parameter descriptions. 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 it returns a sample of first rows of a table, using a specific verb ('retorna') and resource. It distinguishes from sibling tools like list_tables and read_query, though not explicitly.
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?
No guidance on when to use this tool vs alternatives like read_query for full data retrieval. No mention of when-not-to-use or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose: listing tables, testing connectivity, executing arbitrary queries, and previewing table data. No overlap or ambiguity.
All names use snake_case, but patterns vary: 'ping' is a bare verb, while others combine verb_noun (list_tables, read_query) or noun_verb (table_preview). Minor inconsistency, but still clear.
Only 4 tools for a database server is too few. Essential operations like write, DDL, and transaction control are missing, making the set feel incomplete for the domain.
Covers read-only operations (list, query, preview, test), but lacks write operations, schema manipulation, and more advanced query support. Notable gaps for a full database server.
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
List datasets, schemas, run APL queries, and use prompts for exploration, anomalies, and monitoring.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Query, join, profile, clean and convert CSV/JSON/Parquet with server-side DuckDB over MCP.
The BigQuery remote MCP server is a fully managed service that uses the Model Context Protocol to connect AI applications and LLMs to BigQuery data sources. It provides secure, standardized tools for AI agents to list datasets and tables, retrieve schemas, generate and execute SQL queries through natural language, and analyze data—enabling direct access to enterprise analytics data without requiring manual SQL coding.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables execution of SQL queries and management of Microsoft SQL Server database connections through the Model Context Protocol.333,33815MIT
- FlicenseBqualityDmaintenanceEnables interaction with Informix databases through a Model Context Protocol server, supporting database exploration, table inspection, and custom SQL query execution.11
- AlicenseBqualityDmaintenanceEnables AI applications to securely connect to and interact with Tibero databases, supporting SQL queries, schema inspection, and data retrieval through the Model Context Protocol.24MIT
- 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
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/fcdmoraes/teradata-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server