tdsql-mcp 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tdsql_mcp-1.0.0/.env.example +58 -0
- tdsql_mcp-1.0.0/.gitignore +14 -0
- tdsql_mcp-1.0.0/CLAUDE.md +125 -0
- tdsql_mcp-1.0.0/PKG-INFO +525 -0
- tdsql_mcp-1.0.0/README.md +499 -0
- tdsql_mcp-1.0.0/pyproject.toml +43 -0
- tdsql_mcp-1.0.0/requirements.txt +33 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/SKILL.md +22 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/aggregate-functions.md +94 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/ai-text-analytics.md +630 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/association-analysis.md +108 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/authorization-objects.md +173 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/byom-model-loading.md +337 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/byom-scoring.md +581 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/catalog-views.md +125 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/conditional.md +85 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/data-cleaning.md +514 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/data-exploration.md +317 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/data-prep.md +928 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/data-types-casting.md +237 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/date-time.md +107 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/embeddings.md +279 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/fit-transform-pattern.md +94 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/geospatial.md +731 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/guidelines.md +290 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/hypothesis-testing.md +240 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/index.md +102 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/llm-providers.md +230 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/ml-functions.md +757 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/ml-patterns.md +296 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/model-evaluation.md +252 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/numeric-functions.md +94 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/path-analysis.md +358 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/query-tuning.md +104 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/sql-basics.md +85 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/string-functions.md +74 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/text-analytics.md +524 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-concepts.md +309 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-data-prep.md +291 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-diagnostics.md +654 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-dsp.md +676 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-estimation.md +1055 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-forecasting.md +384 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-formula-rules.md +123 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-utility.md +421 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/utility-functions.md +152 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/vector-search.md +396 -0
- tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/window-functions.md +97 -0
- tdsql_mcp-1.0.0/src/tdsql_mcp/__init__.py +0 -0
- tdsql_mcp-1.0.0/src/tdsql_mcp/server.py +450 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# tdsql-mcp connection configuration
|
|
2
|
+
# Copy this file to .env and fill in your values.
|
|
3
|
+
# .env is loaded automatically on startup — do NOT commit it to source control.
|
|
4
|
+
|
|
5
|
+
# ---------------------------------------------------------------------------
|
|
6
|
+
# Required: Teradata connection URI
|
|
7
|
+
#
|
|
8
|
+
# Format: teradata://user:password@host[:port][/database][?param=value&...]
|
|
9
|
+
#
|
|
10
|
+
# If your password contains special characters, URL-encode them:
|
|
11
|
+
# @ -> %40
|
|
12
|
+
# # -> %23
|
|
13
|
+
# ? -> %3F
|
|
14
|
+
# & -> %26
|
|
15
|
+
# ---------------------------------------------------------------------------
|
|
16
|
+
DATABASE_URI=teradata://myuser:mypassword@myhost/mydefaultdb
|
|
17
|
+
|
|
18
|
+
# ---------------------------------------------------------------------------
|
|
19
|
+
# Optional: set to true to disable all write operations (execute_statement)
|
|
20
|
+
# ---------------------------------------------------------------------------
|
|
21
|
+
# TD_READ_ONLY=true
|
|
22
|
+
|
|
23
|
+
# ---------------------------------------------------------------------------
|
|
24
|
+
# Example URIs with common extra parameters
|
|
25
|
+
# ---------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
# LDAP authentication
|
|
28
|
+
# DATABASE_URI=teradata://myuser:mypassword@myhost/mydb?logmech=LDAP
|
|
29
|
+
|
|
30
|
+
# LDAP + encrypted data in transit
|
|
31
|
+
# DATABASE_URI=teradata://myuser:mypassword@myhost/mydb?logmech=LDAP&encryptdata=true
|
|
32
|
+
|
|
33
|
+
# Full TLS verification
|
|
34
|
+
# DATABASE_URI=teradata://myuser:mypassword@myhost/mydb?sslmode=VERIFY-FULL
|
|
35
|
+
|
|
36
|
+
# Custom port + logon timeout
|
|
37
|
+
# DATABASE_URI=teradata://myuser:mypassword@myhost:1025/mydb?logon_timeout=30
|
|
38
|
+
|
|
39
|
+
# Kerberos SSO (no password needed in URI)
|
|
40
|
+
# DATABASE_URI=teradata://myuser@myhost/mydb?logmech=KRB5
|
|
41
|
+
|
|
42
|
+
# ---------------------------------------------------------------------------
|
|
43
|
+
# Multiple parameters — chain with & (just like a URL query string)
|
|
44
|
+
#
|
|
45
|
+
# Parameters can be combined freely. Order does not matter.
|
|
46
|
+
# ---------------------------------------------------------------------------
|
|
47
|
+
|
|
48
|
+
# LDAP + encryption + full TLS + logon timeout + connect timeout
|
|
49
|
+
# DATABASE_URI=teradata://myuser:mypassword@myhost/mydb?logmech=LDAP&encryptdata=true&sslmode=VERIFY-FULL&logon_timeout=30&connect_timeout=5000
|
|
50
|
+
|
|
51
|
+
# TD2 (default auth) + encryption + custom port + session reconnect
|
|
52
|
+
# DATABASE_URI=teradata://myuser:mypassword@myhost:1025/mydb?encryptdata=true&reconnect_count=5&reconnect_interval=10
|
|
53
|
+
|
|
54
|
+
# JWT authentication + TLS + OAuth for Open Table Format access
|
|
55
|
+
# DATABASE_URI=teradata://myuser@myhost/mydb?logmech=JWT&sslmode=VERIFY-FULL&oauth_level=1
|
|
56
|
+
|
|
57
|
+
# LDAP + ANSI transaction mode + no COP discovery (single-node dev system)
|
|
58
|
+
# DATABASE_URI=teradata://myuser:mypassword@myhost/mydb?logmech=LDAP&tmode=ANSI&cop=false
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# tdsql-mcp
|
|
2
|
+
|
|
3
|
+
MCP server providing SQL tools for Teradata (Vantage) databases. Designed for use with Claude Desktop, agent frameworks, and any MCP-compatible client.
|
|
4
|
+
|
|
5
|
+
## Project Status
|
|
6
|
+
|
|
7
|
+
**Phase:** Initial build complete, not yet tested against a live database.
|
|
8
|
+
|
|
9
|
+
## Package
|
|
10
|
+
|
|
11
|
+
- **Package name:** `tdsql-mcp`
|
|
12
|
+
- **Entry point:** `tdsql-mcp` CLI command → `tdsql_mcp.server:main`
|
|
13
|
+
- **Python:** 3.10+
|
|
14
|
+
- **Key dependencies:** `mcp`, `teradatasql`
|
|
15
|
+
|
|
16
|
+
## Structure
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
sql_mcp/
|
|
20
|
+
├── CLAUDE.md
|
|
21
|
+
├── README.md
|
|
22
|
+
├── pyproject.toml
|
|
23
|
+
└── src/tdsql_mcp/
|
|
24
|
+
├── __init__.py
|
|
25
|
+
├── server.py # All MCP tools, resources, connection logic
|
|
26
|
+
└── syntax/ # Teradata SQL reference files (auto-discovered)
|
|
27
|
+
├── index.md # Topic directory — LLM entry point
|
|
28
|
+
├── sql-basics.md
|
|
29
|
+
├── string-functions.md
|
|
30
|
+
├── numeric-functions.md
|
|
31
|
+
├── date-time.md
|
|
32
|
+
├── aggregate-functions.md
|
|
33
|
+
├── window-functions.md
|
|
34
|
+
├── conditional.md
|
|
35
|
+
├── data-types-casting.md
|
|
36
|
+
├── ml-functions.md
|
|
37
|
+
├── data-exploration.md
|
|
38
|
+
├── data-prep.md
|
|
39
|
+
├── catalog-views.md
|
|
40
|
+
└── query-tuning.md
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## MCP Tools
|
|
44
|
+
|
|
45
|
+
| Tool | Description |
|
|
46
|
+
|------|-------------|
|
|
47
|
+
| `execute_query` | Run SELECT queries; returns JSON with rows, row_count, truncated flag |
|
|
48
|
+
| `execute_statement` | Run DDL/DML; disabled in read-only mode |
|
|
49
|
+
| `list_databases` | List accessible databases via DBC.DatabasesV |
|
|
50
|
+
| `list_tables` | List tables/views in a database via DBC.TablesV |
|
|
51
|
+
| `describe_table` | Column definitions via DBC.ColumnsV |
|
|
52
|
+
| `explain_query` | Run Teradata EXPLAIN — validates syntax and shows execution plan |
|
|
53
|
+
| `get_syntax_help` | Return syntax reference for a topic; use topic="index" to list all |
|
|
54
|
+
|
|
55
|
+
## MCP Resources
|
|
56
|
+
|
|
57
|
+
- `teradata://syntax/{topic}` — file-backed, same content as `get_syntax_help`
|
|
58
|
+
|
|
59
|
+
## Configuration
|
|
60
|
+
|
|
61
|
+
| Env var | CLI flag | Description |
|
|
62
|
+
|---------|----------|-------------|
|
|
63
|
+
| `DATABASE_URI` | `--uri` | Teradata connection URI (required) |
|
|
64
|
+
| `TD_READ_ONLY` | `--read-only` | Disable write operations |
|
|
65
|
+
|
|
66
|
+
### URI format
|
|
67
|
+
```
|
|
68
|
+
teradata://user:password@host[:port][/database][?param=value&...]
|
|
69
|
+
```
|
|
70
|
+
Any `teradatasql` connection parameter (logmech, encryptdata, sslmode, logon_timeout, etc.)
|
|
71
|
+
can be appended as a query-string argument and is passed through to `teradatasql.connect()` as-is.
|
|
72
|
+
|
|
73
|
+
## Key Design Decisions
|
|
74
|
+
|
|
75
|
+
- **Single file** (`server.py`) for all server logic — easy to read and distribute.
|
|
76
|
+
- **Persistent connection** with automatic reconnect on failure (`threading.RLock` serializes all DB access).
|
|
77
|
+
- **Eager connection** on startup — misconfigured credentials fail immediately with a clear error.
|
|
78
|
+
- **`execute_query` result limiting** — defaults to 100 rows, max 10,000. Uses `fetchmany` + peek to detect truncation without pulling all rows into memory.
|
|
79
|
+
- **`get_syntax_help` auto-discovery** — scans `syntax/*.md` at call time via `importlib.resources`; drop a new file in and it's immediately available, no code changes needed.
|
|
80
|
+
- **Read-only mode** — set via env var or CLI flag; `execute_statement` returns a `PermissionError` if called.
|
|
81
|
+
|
|
82
|
+
## Syntax Reference Library
|
|
83
|
+
|
|
84
|
+
Files live in `src/tdsql_mcp/syntax/`. To add or update a topic:
|
|
85
|
+
1. Create or edit a `.md` file in that directory.
|
|
86
|
+
2. Add an entry to `index.md` so the LLM can discover it.
|
|
87
|
+
3. No code changes needed — the tool picks it up automatically.
|
|
88
|
+
|
|
89
|
+
Topics planned but not yet written (add as needed):
|
|
90
|
+
- `json-functions.md` — Teradata JSON_* functions
|
|
91
|
+
- `geospatial.md` — ST_* geospatial functions
|
|
92
|
+
- `temporal-tables.md` — Teradata temporal/bitemporal table syntax
|
|
93
|
+
- `user-defined-functions.md` — UDF and UDT usage patterns
|
|
94
|
+
|
|
95
|
+
## Local Development
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Install in editable mode (syntax file edits reflect immediately)
|
|
99
|
+
pip install -e .
|
|
100
|
+
|
|
101
|
+
# Run
|
|
102
|
+
DATABASE_URI="teradata://me:secret@myhost/mydb" tdsql-mcp
|
|
103
|
+
|
|
104
|
+
# With extra connection params
|
|
105
|
+
DATABASE_URI="teradata://me:secret@myhost/mydb?logmech=LDAP&encryptdata=true" tdsql-mcp
|
|
106
|
+
|
|
107
|
+
# Read-only
|
|
108
|
+
tdsql-mcp --uri "teradata://me:secret@myhost/mydb" --read-only
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Claude Desktop Config
|
|
112
|
+
|
|
113
|
+
```json
|
|
114
|
+
{
|
|
115
|
+
"mcpServers": {
|
|
116
|
+
"teradata": {
|
|
117
|
+
"command": "uvx",
|
|
118
|
+
"args": ["tdsql-mcp"],
|
|
119
|
+
"env": {
|
|
120
|
+
"DATABASE_URI": "teradata://your-user:your-password@your-host/your-default-db"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|