MCP server providing SQL query execution and metadata access to Avalara AvaTax data source via JDBC
This MCP server exposes 3 tools for querying Avalara AvaTax via SQL. All three tools are explicitly registered with schemas and descriptions visible in the source code. However, the tool set shows moderate definition quality issues: tool names are clear and action-oriented (get_, run_), but descriptions lack the specificity needed for LLM-driven selection (e.g., no guidance on when to use avatax_get_tables vs avatax_get_columns vs avatax_run_query). Parameter descriptions are generic. Most critically, output schemas are NOT documented, the tools return CSV-formatted text with vague references to 'column headers' but no structured schema definition. Error handling is minimal (raw RuntimeException wrapping). The server reads data from a proprietary connector (AvaTax) through JDBC, so modification is not possible, but this should be stated explicitly in tool descriptions.
Retrieves a list of fields, dimensions, or measures (as columns) for an object, entity or collection (table). Use the `avatax_get_tables` tool to get a list of available tables. The output of the tool will be returned in CSV format, with the first line containing column headers.
Retrieves a list of objects, entities, collections, etc. (as tables) available in the data source. Use the `avatax_get_columns` tool to list available columns on a table. Both `catalog` and `schema` are optional parameters. The output of the tool will be returned in CSV format, with the first line containing column headers.
Execute a SQL SELECT statement.
Output schemas completely undocumented. Tools return 'CSV format' with no structured field definitions. LLMs cannot parse results reliably or plan downstream operations.
Tool descriptions lack selection guidance. 'Retrieves a list of objects...' does not explain when to call this vs avatax_get_columns or avatax_run_query. LLMs waste reasoning cycles disambiguating.
avatax_run_query description mentions 'SQL-92' dialect and valid clauses but provides no guidance on input validation, injection risks, or performance limits. Agents could construct expensive queries.
Parameter descriptions are generic ('The catalog name', 'The schema name', 'The table name'). No mention of optionality, defaults, valid patterns, or when each parameter is required.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 26 | - | v1 |
Error handling returns raw RuntimeException with minimal context. No recovery guidance, retryability hints, or actionable error messages for LLMs.
No pagination support documented. If queries return large result sets, CSV output could exhaust context windows. No limit parameter, no offset/cursor guidance.
CSV format response is unstructured. LLMs must parse text to extract field values, risking parsing errors. Structured JSON with typed fields would be far more reliable.