tdsql-mcp 1.3.0__tar.gz → 1.3.2__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.3.0 → tdsql_mcp-1.3.2}/PKG-INFO +1 -1
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/pyproject.toml +1 -1
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/catalog-views.md +20 -4
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/guidelines.md +1 -1
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/src/tdsql_mcp/server.py +16 -1
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/.env.example +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/.gitignore +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/8888 +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/CLAUDE.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/README.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/docs/architecture.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/requirements.txt +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/README.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/SKILL.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/aggregate-functions.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/ai-text-analytics.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/association-analysis.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/authorization-objects.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/bit-byte-functions.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/byom-model-loading.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/byom-scoring.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/conditional.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/data-cleaning.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/data-exploration.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/data-prep.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/data-types-casting.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/date-time.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/embeddings.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/fit-transform-pattern.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/geospatial.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/hypothesis-testing.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/index.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/json-functions.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/llm-providers.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/ml-functions.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/ml-patterns.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/model-evaluation.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/numeric-functions.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/path-analysis.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/query-tuning.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/sql-basics.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/string-functions.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/text-analytics.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/uaf-concepts.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/uaf-data-prep.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/uaf-diagnostics.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/uaf-dsp.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/uaf-estimation.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/uaf-forecasting.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/uaf-formula-rules.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/uaf-utility.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/utility-functions.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/vector-search.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/window-functions.md +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/src/tdsql_mcp/__init__.py +0 -0
- {tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tdsql-mcp
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.2
|
|
4
4
|
Summary: MCP server for Teradata Vantage — SQL execution and native analytics function reference for AI agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/ksturgeon-td/tdsql-mcp
|
|
6
6
|
Project-URL: Repository, https://github.com/ksturgeon-td/tdsql-mcp
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tdsql-mcp"
|
|
7
|
-
version = "1.3.
|
|
7
|
+
version = "1.3.2"
|
|
8
8
|
description = "MCP server for Teradata Vantage — SQL execution and native analytics function reference for AI agents"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -98,15 +98,31 @@ WHERE DatabaseName = 'mydb' AND TableName = 'mytable'
|
|
|
98
98
|
ORDER BY ColumnName;
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
##
|
|
101
|
+
## Listing Accessible Databases
|
|
102
|
+
|
|
103
|
+
Prefer the `list_databases` MCP tool — it calls `DBC.DatabasesV` which already filters to databases visible to the current session.
|
|
104
|
+
|
|
105
|
+
`DBC.DatabasesV` answers "what databases exist and are visible to me?"
|
|
106
|
+
`DBC.AllRightsV` answers "what databases do I have explicit rights on?" (includes role-inherited grants)
|
|
107
|
+
|
|
108
|
+
Use `DBC.AllRightsV` when you need to know what rights a specific user holds:
|
|
109
|
+
|
|
102
110
|
```sql
|
|
103
|
-
--
|
|
111
|
+
-- Databases a user has rights on (includes role-inherited grants)
|
|
112
|
+
SELECT DISTINCT DatabaseName
|
|
113
|
+
FROM DBC.AllRightsV
|
|
114
|
+
WHERE UserName = 'some_user'
|
|
115
|
+
ORDER BY DatabaseName;
|
|
116
|
+
|
|
117
|
+
-- Full rights detail for a user
|
|
104
118
|
SELECT AccessRight, DatabaseName, TableName
|
|
105
|
-
FROM DBC.
|
|
106
|
-
WHERE UserName =
|
|
119
|
+
FROM DBC.AllRightsV
|
|
120
|
+
WHERE UserName = 'some_user'
|
|
107
121
|
ORDER BY DatabaseName, TableName;
|
|
108
122
|
```
|
|
109
123
|
|
|
124
|
+
> **Do not use `DBC.UserRightsV` for database enumeration** — it shows only directly granted rights and misses role-inherited access. Use `DBC.AllRightsV` for a complete picture.
|
|
125
|
+
|
|
110
126
|
## Common Lookup Patterns
|
|
111
127
|
```sql
|
|
112
128
|
-- Fully qualified table info in one query
|
|
@@ -353,7 +353,7 @@ Native functions do not cover everything. Use hand-written SQL for:
|
|
|
353
353
|
- Date/time arithmetic (`date-time`)
|
|
354
354
|
- CASE expressions and NULL handling (`conditional`)
|
|
355
355
|
- Window functions for lag/lead features, running totals (`window-functions`)
|
|
356
|
-
- Schema discovery
|
|
356
|
+
- Schema discovery via MCP tools first — `list_databases`, `list_tables`, `describe_table` cover the common cases; fall back to manual DBC.* queries only for capabilities not covered by those tools (`catalog-views`)
|
|
357
357
|
- Bit/byte manipulation — `BITAND`, `BITOR`, `BITXOR`, `BITNOT`, `SHIFTLEFT`/`SHIFTRIGHT`, `ROTATELEFT`/`ROTATERIGHT`, `GETBIT`, `SETBIT`, `COUNTSET`, `SUBBITSTR`, `TO_BYTE` — all Teradata-specific functions, **no ANSI equivalents**; do not use `&`, `|`, `^`, `~` operators (`bit-byte-functions`)
|
|
358
358
|
- JSON data — native `JSON` type with BSON/UBJSON binary formats; JSONPath extraction; shredding (JSON→relational) and publishing (relational→JSON) — all in-database (`json-functions`)
|
|
359
359
|
- One-off computations not covered by any native function
|
|
@@ -81,6 +81,18 @@ def _require_write() -> None:
|
|
|
81
81
|
raise PermissionError("Server is running in read-only mode; write operations are disabled.")
|
|
82
82
|
|
|
83
83
|
|
|
84
|
+
def _maybe_parse_json(value: Any) -> Any:
|
|
85
|
+
"""If a value is a string that looks like a JSON object or array, parse it."""
|
|
86
|
+
if isinstance(value, str):
|
|
87
|
+
s = value.strip()
|
|
88
|
+
if s and s[0] in ('{', '['):
|
|
89
|
+
try:
|
|
90
|
+
return json.loads(s)
|
|
91
|
+
except Exception:
|
|
92
|
+
pass
|
|
93
|
+
return value
|
|
94
|
+
|
|
95
|
+
|
|
84
96
|
def _execute_query_internal(sql: str, params: list | None = None) -> list[dict]:
|
|
85
97
|
with _conn_lock:
|
|
86
98
|
conn = _reconnect_if_needed()
|
|
@@ -120,7 +132,10 @@ def execute_query(sql: str, max_rows: int = 100) -> str:
|
|
|
120
132
|
return json.dumps({"rows": [], "row_count": 0, "truncated": False})
|
|
121
133
|
columns = [desc[0] for desc in cur.description]
|
|
122
134
|
rows = cur.fetchmany(max_rows)
|
|
123
|
-
result = [
|
|
135
|
+
result = [
|
|
136
|
+
dict(zip(columns, (_maybe_parse_json(v) for v in row)))
|
|
137
|
+
for row in rows
|
|
138
|
+
]
|
|
124
139
|
# Peek to detect truncation without fetching everything
|
|
125
140
|
truncated = cur.fetchone() is not None
|
|
126
141
|
return json.dumps(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/aggregate-functions.md
RENAMED
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/ai-text-analytics.md
RENAMED
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/association-analysis.md
RENAMED
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/authorization-objects.md
RENAMED
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/bit-byte-functions.md
RENAMED
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/byom-model-loading.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/data-exploration.md
RENAMED
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/data-types-casting.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/fit-transform-pattern.md
RENAMED
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/hypothesis-testing.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/model-evaluation.md
RENAMED
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/numeric-functions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/string-functions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/uaf-formula-rules.md
RENAMED
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/utility-functions.md
RENAMED
|
File without changes
|
|
File without changes
|
{tdsql_mcp-1.3.0 → tdsql_mcp-1.3.2}/skills/teradata-sql-analytics/syntax/window-functions.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|