mcp-teradata
MCP Server for Teradata database
Documentation
Teradata MCP Server
A Model Context Protocol (MCP) server for Teradata database with OAuth 2.1 authentication, multiple authentication mechanisms (TD2, LDAP, Kerberos), and interactive data visualization.
Features
- Multiple Auth Mechanisms — TD2 (default), LDAP, Kerberos, JWT via Teradata `LOGMECH`
- OAuth 2.1 with Keycloak integration, JWT validation, scope-based authorization
- Protected Resource Metadata (RFC 9728 compliant)
- Interactive Visualization — ECharts-based MCP App with 19 chart types
- Connection Resilience — automatic retry with exponential backoff
- Non-blocking I/O — all DB operations run via `asyncio.to_thread()`
- Per-tool QueryBand — audit trail for Teradata workload management
Tools
Query Tools
- `query` — Execute SQL queries, return plain tabular results
- `visualize_query` — Execute SQL and render interactive ECharts charts via MCP App
Schema Tools
- `list_db` — List all databases
- `list_tables` — List tables/views in a database
- `show_tables_details` — Show column names and types for a table
Analysis Tools
- `list_missing_values` — Columns with NULL value counts
- `list_negative_values` — Columns with negative value counts
- `list_distinct_values` — Distinct category counts per column
- `standard_deviation` — Mean and standard deviation for a column
MCP App — Interactive Visualization
The `visualize_query` tool renders results as interactive charts in the MCP client.
| Category | Charts |
|---|---|
| Bar | Basic, Grouped, Stacked, Horizontal, Sorted, Waterfall, Rounded, Polar |
| Line | Basic, Smooth, Area, Stacked Area, Step |
| Pie | Pie, Doughnut, Rose / Nightingale |
| Scatter | Scatter, Bubble |
| Mixed | Bar + Line |
Quick Start
Installation
git clone https://github.com/arturborycki/mcp-teradata.git
cd mcp-teradata
uv syncRun with TD2 (Standard Authentication)
uv run teradata-mcp "teradatasql://user:password@host/database"Or via environment variable:
export DATABASE_URI="teradatasql://user:password@host/database"
uv run teradata-mcpConfiguration
Claude Desktop
Add to your `claude_desktop_config.json`:
TD2 (Username/Password)
{
"mcpServers": {
"teradata": {
"command": "uv",
"args": [
"--directory", "/path/to/mcp-teradata",
"run", "teradata-mcp"
],
"env": {
"DATABASE_URI": "teradatasql://user:password@host/database"
}
}
}
}LDAP Authentication
{
"mcpServers": {
"teradata": {
"command": "uv",
"args": [
"--directory", "/path/to/mcp-teradata",
"run", "teradata-mcp"
],
"env": {
"DATABASE_URI": "teradatasql://@host/database",
"DB_LOGMECH": "LDAP",
"DB_LOGDATA": "authcid=ldap_user password=ldap_password"
}
}
}
}The `authcid` format depends on the LDAP directory:
| Directory | Format |
|---|---|
| Active Directory (Simple Bind) | `authcid=user@domain.com` |
| Active Directory (DIGEST-MD5) | `authcid=DOMAIN\username` |
| OpenLDAP / Sun DS | `authcid=username` |
Kerberos Authentication
{
"mcpServers": {
"teradata": {
"command": "uv",
"args": [
"--directory", "/path/to/mcp-teradata",
"run", "teradata-mcp"
],
"env": {
"DATABASE_URI": "teradatasql://@host/database",
"DB_LOGMECH": "KRB5"
}
}
}
}OAuth-Enabled Configuration
{
"mcpServers": {
"teradata": {
"command": "uv",
"args": [
"--directory", "/path/to/mcp-teradata",
"run", "teradata-mcp"
],
"env": {
"DATABASE_URI": "teradatasql://user:password@host/database",
"OAUTH_ENABLED": "true",
"KEYCLOAK_URL": "https://your-keycloak.example.com",
"KEYCLOAK_REALM": "teradata-realm",
"KEYCLOAK_CLIENT_ID": "teradata-mcp",
"KEYCLOAK_CLIENT_SECRET": "your-secret",
"OAUTH_RESOURCE_SERVER_URL": "https://your-mcp-server.example.com"
}
}
}
}Environment Variables
Database Connection
| Variable | Description | Default |
|---|---|---|
| `DATABASE_URI` | Teradata connection URL (`teradatasql://user:pass@host/db`) | — |
| `DB_LOGMECH` | Authentication mechanism: `TD2`, `LDAP`, `KRB5`, `TDNEGO`, `JWT` | `TD2` |
| `DB_LOGDATA` | LDAP/JWT credentials (e.g., `authcid=user password=pass`) | — |
| `DB_SSL_MODE` | TLS mode: `ALLOW`, `PREFER`, `REQUIRE`, `VERIFY-CA`, `VERIFY-FULL` | — |
| `DB_ENCRYPT_DATA` | Enable transport encryption | `true` |
Connection Resilience
| Variable | Description | Default |
|---|---|---|
| `DB_MAX_RETRIES` | Max reconnection attempts | `3` |
| `DB_INITIAL_BACKOFF` | Initial backoff delay (seconds) | `1.0` |
| `DB_MAX_BACKOFF` | Max backoff delay (seconds) | `30.0` |
MCP Transport
| Variable | Description | Default |
|---|---|---|
| `MCP_TRANSPORT` | Transport: `stdio`, `sse`, `streamable-http` | `stdio` |
| `MCP_HOST` | Bind address for HTTP transports | `localhost` |
| `MCP_PORT` | Port for HTTP transports | `8000` |
| `MCP_PATH` | Path for streamable-http | `/mcp/` |
OAuth 2.1
| Variable | Description | Default |
|---|---|---|
| `OAUTH_ENABLED` | Enable OAuth authentication | `false` |
| `KEYCLOAK_URL` | Keycloak server URL | — |
| `KEYCLOAK_REALM` | Keycloak realm name | — |
| `KEYCLOAK_CLIENT_ID` | OAuth client ID | — |
| `KEYCLOAK_CLIENT_SECRET` | OAuth client secret | — |
| `OAUTH_RESOURCE_SERVER_URL` | Resource server URL | — |
| `OAUTH_REQUIRED_SCOPES` | Required scopes (comma-separated) | — |
| `OAUTH_VALIDATE_AUDIENCE` | Validate token audience | `true` |
| `OAUTH_VALIDATE_SCOPES` | Validate token scopes | `true` |
| `OAUTH_REQUIRE_HTTPS` | Require HTTPS for OAuth URLs | `true` |
| `CORS_ALLOWED_ORIGINS` | CORS allowed origins | `*` |
OAuth Scopes
| Scope | Description |
|---|---|
| `teradata:read` | Read access to database resources |
| `teradata:write` | Write access to database resources |
| `teradata:query` | Execute SQL queries |
| `teradata:admin` | Administrative access |
| `teradata:schema` | Schema management operations |
Transport Compatibility
| Transport | OAuth | Discovery Endpoints | Use Case |
|---|---|---|---|
| stdio | N/A | N/A | Claude Desktop, CLI clients |
| SSE | Full | Available | Web applications |
| Streamable HTTP | Full | Available | API integrations |
Discovery endpoints (when OAuth enabled):
- `/.well-known/oauth-protected-resource` — RFC 9728 metadata
- `/.well-known/mcp-server-info` — MCP capabilities
- `/health` — Health check
Docker Deployment
Development
docker compose up -dWith OAuth
docker compose -f docker-compose.oauth.yml up -dBuild
uv buildTroubleshooting
Database connection issues:
- Verify `DATABASE_URI` format: `teradatasql://user:pass@host/database`
- Check network connectivity to Teradata server
- For LDAP: ensure `DB_LOGMECH=LDAP` and `DB_LOGDATA` are set correctly
- Connection issues are automatically retried (configurable via `DB_MAX_RETRIES`)
LDAP authentication fails:
- Verify the Teradata server has LDAP configured in TDGSS
- Check `authcid` format matches your directory type
- Escape special characters in passwords (`@` → `\@`, spaces → use quotes)
Permission denied errors:
- Verify user has required OAuth scopes
- Check Keycloak role assignments
- `visualize_query` requires `teradata:query` scope (not just `teradata:read`)
Debug logging:
export LOG_LEVEL=DEBUG
uv run teradata-mcpLicense
MIT License. See LICENSE for details.
Acknowledgments
Frequently asked questions
What is mcp-teradata?
mcp-teradata is MCP Server for Teradata database
How do I install mcp-teradata?
Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.
Is mcp-teradata open source?
Yes — it is hosted on GitHub at https://github.com/arturborycki/mcp-teradata and has 6 stars.
Related MCP tools
Damn Vulnerable MCP Server Python-based implementation. Trusted by 1200+ developers. Trusted by 1200+ developers. Trusted by 1200+ developers.
A Model Context Protocol (MCP) server that enables secure interaction with MySQL databases Python-based implementation. Trusted by 900+ developers.
Query MCP enables end-to-end management of Supabase via chat interface: read & write query executions, management API support, automatic migration versioning...
Model Context Protocol with Neo4j Python-based implementation. Trusted by 700+ developers. Trusted by 700+ developers. Trusted by 700+ developers.
An MCP server that provides control over Android devices via adb Python-based implementation. Trusted by 500+ developers.
A Model Context Protocol (MCP) server for PostgreSQL databases with enhanced capabilities for AI agents. Python-based implementation.
Run your own MCP server? See who uses it and what to fix.
Measure it with TrackMCP