tdsql-mcp 1.3.8__tar.gz → 1.3.9__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 (55) hide show
  1. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/PKG-INFO +1 -1
  2. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/pyproject.toml +1 -1
  3. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/src/tdsql_mcp/server.py +13 -12
  4. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/.env.example +0 -0
  5. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/.gitignore +0 -0
  6. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/CLAUDE.md +0 -0
  7. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/README.md +0 -0
  8. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/docs/architecture.md +0 -0
  9. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/requirements.txt +0 -0
  10. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/README.md +0 -0
  11. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/SKILL.md +0 -0
  12. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/aggregate-functions.md +0 -0
  13. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/ai-text-analytics.md +0 -0
  14. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/association-analysis.md +0 -0
  15. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/authorization-objects.md +0 -0
  16. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/bit-byte-functions.md +0 -0
  17. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/byom-model-loading.md +0 -0
  18. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/byom-scoring.md +0 -0
  19. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/catalog-views.md +0 -0
  20. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/conditional.md +0 -0
  21. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/data-cleaning.md +0 -0
  22. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/data-exploration.md +0 -0
  23. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/data-prep.md +0 -0
  24. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/data-types-casting.md +0 -0
  25. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/date-time.md +0 -0
  26. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/embeddings.md +0 -0
  27. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/fit-transform-pattern.md +0 -0
  28. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/geospatial.md +0 -0
  29. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/guidelines.md +0 -0
  30. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/hypothesis-testing.md +0 -0
  31. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/index.md +0 -0
  32. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/json-functions.md +0 -0
  33. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/llm-providers.md +0 -0
  34. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/ml-functions.md +0 -0
  35. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/ml-patterns.md +0 -0
  36. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/model-evaluation.md +0 -0
  37. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/numeric-functions.md +0 -0
  38. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/path-analysis.md +0 -0
  39. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/query-tuning.md +0 -0
  40. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/sql-basics.md +0 -0
  41. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/string-functions.md +0 -0
  42. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/text-analytics.md +0 -0
  43. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/uaf-concepts.md +0 -0
  44. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/uaf-data-prep.md +0 -0
  45. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/uaf-diagnostics.md +0 -0
  46. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/uaf-dsp.md +0 -0
  47. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/uaf-estimation.md +0 -0
  48. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/uaf-forecasting.md +0 -0
  49. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/uaf-formula-rules.md +0 -0
  50. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/uaf-utility.md +0 -0
  51. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/utility-functions.md +0 -0
  52. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/vector-search.md +0 -0
  53. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/skills/teradata-sql-analytics/syntax/window-functions.md +0 -0
  54. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/src/tdsql_mcp/__init__.py +0 -0
  55. {tdsql_mcp-1.3.8 → tdsql_mcp-1.3.9}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tdsql-mcp
3
- Version: 1.3.8
3
+ Version: 1.3.9
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.8"
7
+ version = "1.3.9"
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"
@@ -354,11 +354,14 @@ def _parse_uri(uri: str) -> dict[str, Any]:
354
354
  """Parse a Teradata connection URI into a teradatasql.connect() kwargs dict.
355
355
 
356
356
  URI format:
357
- teradata://user:password@host[:port][/database][?param=value&...]
357
+ teradata://[user:password@]host[:port][/database][?param=value&...]
358
+
359
+ user and password are optional — omit them for authentication methods that
360
+ don't use inline credentials (e.g. logmech=BROWSER, logmech=KRB5).
358
361
 
359
362
  URI components map to teradatasql parameters:
360
- user → user
361
- password → password
363
+ user → user (optional)
364
+ password → password (optional)
362
365
  host → host
363
366
  port → dbs_port (Teradata default: 1025)
364
367
  /path → database
@@ -378,7 +381,7 @@ def _parse_uri(uri: str) -> dict[str, Any]:
378
381
  params: dict[str, Any] = {}
379
382
 
380
383
  if not parsed.hostname:
381
- raise ValueError("URI is missing a hostname. Expected: teradata://user:password@host/...")
384
+ raise ValueError("URI is missing a hostname. Expected: teradata://host/database or teradata://user:password@host/database")
382
385
 
383
386
  params["host"] = parsed.hostname
384
387
 
@@ -401,11 +404,6 @@ def _parse_uri(uri: str) -> dict[str, Any]:
401
404
  for key, values in parse_qs(parsed.query, keep_blank_values=True).items():
402
405
  params[key] = values[0]
403
406
 
404
- if not params.get("user"):
405
- raise ValueError("URI is missing a username. Expected: teradata://user:password@host/...")
406
- if not params.get("password"):
407
- raise ValueError("URI is missing a password. Expected: teradata://user:password@host/...")
408
-
409
407
  return params
410
408
 
411
409
 
@@ -424,11 +422,14 @@ def main() -> None:
424
422
  formatter_class=argparse.RawDescriptionHelpFormatter,
425
423
  epilog=(
426
424
  "Connection URI format:\n"
427
- " teradata://user:password@host[:port][/database][?param=value&...]\n\n"
425
+ " teradata://[user:password@]host[:port][/database][?param=value&...]\n\n"
426
+ "Credentials are optional — omit them for browser or Kerberos auth.\n\n"
428
427
  "Examples:\n"
429
428
  " teradata://alice:s3cr3t@myhost/mydb\n"
430
429
  " teradata://alice:s3cr3t@myhost:1025/mydb?logmech=LDAP&encryptdata=true\n"
431
- " teradata://alice:s3cr3t@myhost/mydb?logon_timeout=30&sslmode=VERIFY-FULL\n\n"
430
+ " teradata://alice:s3cr3t@myhost/mydb?logon_timeout=30&sslmode=VERIFY-FULL\n"
431
+ " teradata://myhost/mydb?logmech=BROWSER\n"
432
+ " teradata://myhost/mydb?logmech=KRB5\n\n"
432
433
  "Any teradatasql connection parameter can be added as a query-string argument.\n"
433
434
  "See: https://github.com/Teradata/python-driver#connection-parameters"
434
435
  ),
@@ -465,7 +466,7 @@ def main() -> None:
465
466
  parser.error(
466
467
  "A connection URI is required.\n"
467
468
  "Set DATABASE_URI env var or pass --uri.\n"
468
- "Format: teradata://user:password@host/database"
469
+ "Format: teradata://[user:password@]host/database[?logmech=BROWSER]"
469
470
  )
470
471
 
471
472
  try:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes