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.
Files changed (50) hide show
  1. tdsql_mcp-1.0.0/.env.example +58 -0
  2. tdsql_mcp-1.0.0/.gitignore +14 -0
  3. tdsql_mcp-1.0.0/CLAUDE.md +125 -0
  4. tdsql_mcp-1.0.0/PKG-INFO +525 -0
  5. tdsql_mcp-1.0.0/README.md +499 -0
  6. tdsql_mcp-1.0.0/pyproject.toml +43 -0
  7. tdsql_mcp-1.0.0/requirements.txt +33 -0
  8. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/SKILL.md +22 -0
  9. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/aggregate-functions.md +94 -0
  10. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/ai-text-analytics.md +630 -0
  11. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/association-analysis.md +108 -0
  12. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/authorization-objects.md +173 -0
  13. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/byom-model-loading.md +337 -0
  14. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/byom-scoring.md +581 -0
  15. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/catalog-views.md +125 -0
  16. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/conditional.md +85 -0
  17. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/data-cleaning.md +514 -0
  18. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/data-exploration.md +317 -0
  19. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/data-prep.md +928 -0
  20. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/data-types-casting.md +237 -0
  21. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/date-time.md +107 -0
  22. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/embeddings.md +279 -0
  23. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/fit-transform-pattern.md +94 -0
  24. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/geospatial.md +731 -0
  25. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/guidelines.md +290 -0
  26. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/hypothesis-testing.md +240 -0
  27. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/index.md +102 -0
  28. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/llm-providers.md +230 -0
  29. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/ml-functions.md +757 -0
  30. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/ml-patterns.md +296 -0
  31. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/model-evaluation.md +252 -0
  32. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/numeric-functions.md +94 -0
  33. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/path-analysis.md +358 -0
  34. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/query-tuning.md +104 -0
  35. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/sql-basics.md +85 -0
  36. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/string-functions.md +74 -0
  37. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/text-analytics.md +524 -0
  38. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-concepts.md +309 -0
  39. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-data-prep.md +291 -0
  40. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-diagnostics.md +654 -0
  41. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-dsp.md +676 -0
  42. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-estimation.md +1055 -0
  43. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-forecasting.md +384 -0
  44. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-formula-rules.md +123 -0
  45. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/uaf-utility.md +421 -0
  46. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/utility-functions.md +152 -0
  47. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/vector-search.md +396 -0
  48. tdsql_mcp-1.0.0/skills/teradata-sql-analytics/syntax/window-functions.md +97 -0
  49. tdsql_mcp-1.0.0/src/tdsql_mcp/__init__.py +0 -0
  50. 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,14 @@
1
+ # Environment / secrets — never commit
2
+ .env
3
+
4
+ # Claude Code local settings
5
+ .claude/
6
+
7
+ # Python
8
+ __pycache__/
9
+ *.py[cod]
10
+ *.egg-info/
11
+ dist/
12
+ build/
13
+ .venv/
14
+ venv/
@@ -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
+ ```