ThinAir Data
Server Details
Connect your AI to any database — PostgreSQL, MySQL, or SQL Server — in seconds.
- Status
- Healthy
- Uptime
- 89.9% over 83 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 26 tools
Most tools have clearly distinct resource+action targets, and descriptions actively disambiguate pairs like analyze_table vs data_profile, query_history vs saved_queries, and test_connection vs describe_schema. The main real overlap is explain_query vs optimize_query, which both take a SQL query, analyze an estimated plan, and return recommendations, plus a softer overlap between configure_allowlist and query_firewall (both SQL guardrails).
Everything is snake_case with no style mixing, and the majority of names follow verb_noun (add_connection, describe_schema, generate_migration, find_n_plus_one). A noticeable minority are bare noun phrases (quota, data_profile, query_history, saved_queries, impact_analysis, pii_scan), so the pattern is not universal but remains predictable and readable.
26 tools is heavy and just past the point where the surface starts to feel sprawling, with one genuinely redundant pair (explain_query/optimize_query). The breadth is justified by a wide domain (connections, querying, profiling, security, migrations, history, quota), but the count could be trimmed without losing capability.
Coverage is strong across the lifecycle: connection add/list/test/remove, schema introspection, read-only querying, profiling, anomaly and PII detection, plan analysis, migration/seed generation, guardrails, and saved/history queries. Minor gaps remain — no update/edit_connection, no query cancellation, and schema snapshots are referenced (in remove_connection) without a tool to list or diff them.
Available Tools
26 toolsadd_connectionAInspect
Get a secure one-time link to register a new database connection with ThinAir Data (postgres, mysql, or mssql). This tool does NOT take a connection string as input — you'll open the returned link and paste the connection string into a secure web form; it is never sent through chat. The response includes connection_string_format and auth_note for the chosen dialect — surface both to the user verbatim. IMPORTANT for mssql: Azure SQL uses Microsoft Entra, so the connection string is HOST/DATABASE only (no credentials) and the tenant/client/secret go in the form's separate fields — never construct or suggest an mssql://CLIENT_ID:CLIENT_SECRET@host string (client secrets break URL parsing).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A short name for this connection, e.g. 'prod-postgres' or 'analytics-mysql'. | |
| dialect | Yes | Database engine for the new connection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | |
| name | No | |
| plan | No | |
| status | Yes | |
| dialect | No | |
| auth_note | No | |
| expires_in_s | No | |
| add_database_url | No | |
| connection_string_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the one-time-link flow, that credentials are never transmitted through chat, that the response carries connection_string_format and auth_note which must be surfaced verbatim, and the mssql/Entra edge case with an explicit warning against constructing a URL connection string. This is exactly the kind of operational context annotations (readOnlyHint=false, destructiveHint=false) cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first clause, followed by the crucial 'no connection string input' constraint and then the dialect-specific caveat. Every sentence carries actionable information; the mssql paragraph is long but justified by the failure mode it prevents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema already existing, the description names the two response fields the agent must relay, and it covers the input contract, the human-in-the-loop step, and the trickiest dialect edge case. Nothing an agent needs to invoke and follow up correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning about the dialect parameter by explaining what each dialect implies downstream and detailing the mssql/Entra special case. It doesn't elaborate on the name parameter beyond the schema's own example, so it is not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get a secure one-time link to register a new database connection') and names the supported dialects. It is easily distinguished from siblings like list_connections, test_connection, and remove_connection, which operate on existing connections rather than onboarding new ones.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the usage context: this is for registering a new connection, and it explicitly rules out passing a connection string as input, redirecting the user to the returned web form. It doesn't explicitly name sibling alternatives (e.g., test_connection for validating an existing connection), so it stops short of a full when/when-not matrix.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_tableARead-onlyIdempotentInspect
QUICK statistical snapshot for ONE table — row count, null rates, cardinality, numeric min/max/avg, date ranges. Optionally drill into a specific column. Use this for a fast at-a-glance read. Use data_profile instead when the user wants a FULL quality report including PII detection and a health score.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name to analyze | |
| column | No | Specific column to deep-analyze | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and idempotentHint=true, so safety is covered. The description adds the behavioral trait that matters most here — speed/lightweight cost ('QUICK', 'fast at-a-glance') — plus the concrete output contents, though it says nothing about how cost scales with table size or row limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: capability and scope first, then the differentiator, then the explicit alternative. Zero filler and no repetition of the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description still covers what an agent needs for correct selection: scope, output gist, and the competing tool. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, including a detailed `connection` resolution procedure, so the baseline is 3. The description adds only marginal meaning beyond that: 'optionally drill into a specific column' clarifies that `column` is optional and narrows scope, but adds no format or semantics beyond the schema's 'Specific column to deep-analyze'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('QUICK statistical snapshot for ONE table') and enumerates exactly what is returned: row count, null rates, cardinality, numeric min/max/avg, date ranges. The single-table scope and optional column drill-down make it instantly distinguishable from describe_schema or cross_db_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative and the selection condition: use this for a 'fast at-a-glance read', use `data_profile` instead for a 'FULL quality report including PII detection and a health score'. That is a textbook when/when-not routing rule with a named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_allowlistADestructiveInspect
Manage HARD SQL guardrails for an enterprise connection: a TABLE ALLOWLIST (queries may reference only the listed tables — enforced at the AST level across subqueries/CTEs/JOINs) and a PII MASKING policy (mask flagged columns in query results). Both opt-out by default. action=view shows current policy + schema reference; set_tables replaces the allowlist (use [] to lock down everything); remove_allowlist disables it; set_pii_policy toggles masking + chooses which PII kinds to mask. Masking is a heuristic policy aid (not a compliance guarantee) and one-way per execution. [ENTERPRISE tier]
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | What to do | |
| tables | No | For set_tables: the allowlist. Bare ('users') or one-level schema-qualified ('public.users'). Empty array = lock down (no tables allowed). | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect. If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. | |
| pii_enabled | No | For set_pii_policy: enable or disable result masking. | |
| mask_patterns | No | For set_pii_policy: which PII kinds to mask (defaults to all when enabling without a list). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the destructiveHint=true annotation: it explains that set_tables fully replaces the allowlist, that [] locks everything down, that masking is one-way per execution, and that the masking is a heuristic aid rather than a compliance guarantee. Those caveats tell the agent exactly what state is overwritten and what the tool cannot promise.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded: the two guardrails come first, then action semantics, then caveats, with no filler. It is on the long side for a single paragraph, but each clause carries real policy detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, fully described parameters, and destructive/enterprise annotations, the description covers everything needed to select and invoke it correctly, including tier gating and the irreversibility of masking.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter already carries a description, including the table format and PII enum. The description reinforces the action semantics and [] meaning but adds little the schema does not already state, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (manage hard SQL guardrails on an enterprise connection) and enumerates the two mechanisms, a table allowlist enforced at the AST level and a PII masking policy, then names each action. An agent can distinguish this policy-configuration tool from query-execution siblings like query_sql or pii_scan without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives per-action guidance for all four enum values (view shows policy, set_tables replaces, remove_allowlist disables, set_pii_policy toggles masking), plus the opt-out default and the [] lockdown trick. It stops short of naming sibling alternatives or explicit when-not-to-use exclusions, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cross_db_queryARead-onlyIdempotentInspect
⚠️ SQL MUST BE VALID IN EVERY DIALECT YOU TARGET — stick to ANSI-ish SELECT syntax when mixing pg/mysql/mssql. SELECT TOP 10 (mssql) or LIMIT (others) will fail on the wrong side. Run the same query across 2-4 connections in parallel; returns per-connection rows + errors for diffing. Canonical use cases: regional compare (['mssql-reporting-us', 'mssql-reporting-eu']), cross-dialect sync check (['prod-postgres-fleet', 'prod-mysql-app']), 3-env drift, 4-region compare. Resolve every connection name via list_connections first; tool fails per-connection on unknown names. Cap: 4 connections per call on every plan; to compare more, split into sequential calls of ≤4 and combine. [ARCHITECT tier]
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | SQL query to run on each connection. Must be valid in every dialect targeted — prefer ANSI SELECT syntax when mixing dialects. | |
| connections | Yes | Array of 2-4 connection NAMES (not IDs) from list_connections output. Examples: ['mssql-reporting-us', 'mssql-reporting-eu'] for regional compare, ['prod-postgres-fleet', 'prod-mysql-app'] for cross-dialect sync check. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, but the description adds genuinely non-derivable behavior: per-connection failure on unknown names, the 4-connection cap on every plan, per-connection rows and errors in the result, and dialect-specific failure modes (TOP vs LIMIT). That is exactly the operational context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the highest-risk constraint (cross-dialect SQL validity) before use cases and caveats, which is the right ordering. It is dense but nearly every clause carries information; the only minor waste is restating dialect guidance already in the schema's sql description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param, read-only fan-out tool with an output schema present, the description covers invocation risk, prerequisites, limits, and result shape (per-connection rows + errors). Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds real meaning: it stresses the SQL must be valid in every targeted dialect (with ANSI SELECT guidance) and clarifies connections must be NAMES, not IDs, with worked example arrays. It reinforces rather than merely repeats the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Run the same query across 2-4 connections in parallel; returns per-connection rows + errors for diffing.' This clearly separates it from query_sql (single connection) and the fleet of schema/analysis siblings, which never fan a query out across connections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use scenarios (regional compare, cross-dialect sync check, 3-env drift, 4-region compare) and a prerequisite to resolve names via list_connections, plus a workaround for exceeding 4 connections. It stops short of explicitly naming query_sql as the alternative for single-connection reads, which is the main contrast an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
data_profileARead-onlyIdempotentInspect
FULL data quality + compliance report for a table: per-column stats PLUS a 0-100 health score, type-gated PII detection (email / phone / SSN / etc.), and insight warnings. Slower than analyze_table but returns everything needed to audit a table for ownership / compliance / onboarding. Use this when the user says 'profile' or 'quality report' or mentions PII/compliance. [BUILD tier]
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table to profile | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered by structured data. The description adds real cost/latency context ("Slower than `analyze_table`") and a tier marker, which is exactly the kind of thing annotations can't express. It stops short of saying anything about rate limits or scan breadth (e.g. whether large tables are sampled), so a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the capability and immediately followed by the differentiator and triggers; no filler sentences. It is densely packed into two long sentences with multiple comma-separated clauses, which slightly hurts scannability but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be detailed, yet the description still summarizes what comes back (stats, score, PII, warnings). Combined with the 100%-covered two-parameter schema and the read-only annotations, an agent has everything needed to decide and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the `connection` parameter already carries detailed resolution guidance (call `list_connections`, semantic match, default fallback). The description adds nothing about parameters beyond implying a table is required, which the schema states. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("FULL data quality + compliance report for a table") and enumerates the concrete outputs: per-column stats, a 0-100 health score, type-gated PII detection, and insight warnings. It also names the sibling it is not ("Slower than `analyze_table`"), so an agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (`analyze_table`) and the tradeoff that selects against it, plus positive triggers ("'profile' or 'quality report' or mentions PII/compliance") and use cases (ownership / compliance / onboarding audit). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_schemaARead-onlyIdempotentInspect
Introspect the full database structure for a connection: every table, column, type, primary key, and index (MySQL connections do not report indexes yet; foreign keys are not reported) — the map to build queries against an unfamiliar database. Use analyze_table or data_profile instead when you need column VALUES (stats, nulls, PII) rather than structure. Read-only against your database. Results are cached 1 hour per connection; pass refresh=true to force a live re-introspection and bypass that cache, e.g. right after altering the schema. Does not consume daily quota. Returns tables with their columns, types, primary keys, and indexes.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | Force live introspection, bypassing cache | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnly/idempotent, but the description adds material context beyond them: a 1-hour per-connection cache, the refresh bypass, the fact that it does not consume daily quota, and concrete coverage limits (MySQL indexes not yet reported, foreign keys not reported). Those caveats are exactly what prevents an agent from over-trusting the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and scope, then alternative routing, then behavioral caveats. It loses a point only for the trailing sentence 'Returns tables with their columns, types, primary keys, and indexes,' which restates the opening enumeration almost verbatim and adds nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with an output schema and full annotation coverage, everything an agent needs is present: what it returns, the structural limits, cache behavior, quota impact, and the sibling to use for value-level profiling. No ambiguity remains before invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented; the baseline would be 3. The description earns extra credit by explaining the *why* behind refresh — bypassing a 1-hour cache after a schema alteration — which the schema only states tersely as 'Force live introspection'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Introspect') plus resource ('full database structure for a connection') with an enumerated scope: tables, columns, types, primary keys, indexes. It is clearly distinguished from the value-oriented siblings (analyze_table, data_profile), so an agent can tell exactly what this returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states not just when to use it ('the map to build queries against an unfamiliar database') but explicitly routes away: 'Use analyze_table or data_profile instead when you need column VALUES (stats, nulls, PII) rather than structure.' It also flags when to pass refresh=true (right after altering the schema).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_anomaliesARead-onlyIdempotentInspect
Scan a table for unusual patterns: volume drops/spikes, data gaps, value concentration, high null rates, stale data. Severity-ranked alerts. Tables > 100k rows use a sampled path (~5%) — when a finding has sampled:true, surface it to the user with a hedge like 'based on a ~5% sample' rather than presenting the number as exact. Dialect-aware: TABLESAMPLE SYSTEM on postgres, TABLESAMPLE PERCENT on mssql, WHERE RAND() on mysql.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table to scan for anomalies | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. | |
| date_column | No | Date column for trend analysis (auto-detected if omitted) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/openWorld annotations: it discloses the sampling threshold (>100k rows), the sampling rate (~5%), the `sampled:true` output flag, and a required hedge in the user-facing phrasing. It also explains that the scan is dialect-aware with different sampling mechanisms per engine, which tells the agent the behavior is not identical across connections. Nothing here contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then the sampling caveat, then dialect detail – a sensible ordering with no filler sentences. The final clause naming TABLESAMPLE SYSTEM/PERCENT/ROW() is implementation detail the agent rarely needs to act on, which slightly dilutes an otherwise tight description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description supplies what the schema cannot: the sampled-result interpretation rule that spans parameters and output. Missing is any sense of cost/latency or what happens on non-existent or inaccessible tables, which matters for a openWorldHint scan tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (table, connection, date_column) are already documented in structured form, including the connection-resolution procedure. The description adds no parameter-level meaning – it never mentions date_column or how the connection choice affects sampling behavior. Baseline 3 applies since the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a concrete verb (scan) and resource (table) and enumerates the finding classes it produces: volume drops/spikes, gaps, value concentration, null rates, stale data. That is much more specific than a generic 'analyze'. It does not name a sibling such as data_profile or analyze_table to mark the boundary, so an agent must infer the split from the phrase 'unusual patterns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the outcome list – it is the tool you reach for when you want anomaly alerts rather than a full profile. There is no explicit when-to-use / when-not-to-use statement and no routing against the many nearby siblings (data_profile, analyze_table, watch_table, query_history). The only real instructions given are about how to report results, not when to select the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_queryARead-onlyIdempotentInspect
Analyze a SQL query's execution plan and return plain-English performance recommendations. What runs, per dialect: postgres — EXPLAIN (FORMAT JSON), an ESTIMATED plan; the query is NOT executed and there are no measured timings (ANALYZE would execute it). mysql 8.0.18+ — EXPLAIN ANALYZE, which DOES execute the query to obtain real timings. mysql <8.0.18 — EXPLAIN FORMAT=JSON (estimated). mssql — SET SHOWPLAN_XML ON (estimated, not executed). Costs and row counts on an estimated plan are the planner's guesses: report them as estimates, not as observed behaviour. [BUILD tier]
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | The SELECT query to analyze | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This is exactly the kind of disclosure annotations cannot carry: the description states that postgres/mssql/older-mysql plans are ESTIMATED and never executed, while mysql 8.0.18+ runs EXPLAIN ANALYZE and DOES execute the query for real timings. It also instructs how to report estimates vs observed behavior, which is a critical nuance for a tool annotated readOnlyHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then structured per dialect as a scannable list of behaviors. Every sentence carries operational weight; the trailing '[BUILD tier]' marker is internal noise that doesn't help an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, there is no need to describe return values, and the description covers the risky behavior (query execution) plus dialect determinism. It doesn't mention error conditions or what happens with unsupported dialects, which is a minor omission for a tool with openWorldHint=true.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, but the description adds real meaning by tying the `connection` parameter's dialect to materially different execution behavior. The only remaining gap is that it doesn't restate the 50k length limit or that `sql` must be a SELECT, though the schema covers both.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb (analyze), resource (execution plan), and output (plain-English performance recommendations), which is far beyond a tautology. It does not explicitly distinguish itself from the sibling optimize_query, so an agent must infer the boundary between 'explain the plan' and 'optimize the query'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied rather than stated: the tool is for inspecting how a SELECT runs, and the per-dialect breakdown clarifies what will happen when invoked. There is no explicit when-to-use/when-not guidance and no routing to alternatives such as optimize_query or analyze_table, so the agent has to infer selection logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_n_plus_oneARead-onlyIdempotentInspect
Detect N+1 query patterns from your own query_history, not a live trace: fingerprints the last 100 recorded queries tenant-wide (numeric/string literals normalized to ?; connection is accepted but does not scope which history is scanned) and flags any fingerprint repeated min_executions+ times (default 5), skipping trivial no-FROM-clause probes like SELECT 1. Always read-only. Needs populated history first (run queries via query_sql or saved_queries); empty history returns no patterns. Counts against daily quota. Returns fingerprint, execution count, total/avg time, an example query, and severity-ranked insights (critical above 20 repeats). [ARCHITECT tier]
| Name | Required | Description | Default |
|---|---|---|---|
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. | |
| min_executions | No | Minimum executions to flag (default 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, so the bar is lower, yet the description adds substantial context: literal normalization to `?`, the 100-query tenant-wide window, trivial no-FROM probes being skipped, quota consumption, the empty-history outcome, and the return payload with severity ranking. This is behavior an agent could not infer from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, and essentially every clause carries information (scope, normalization, exclusions, quota, return shape). It is dense and parenthetical-heavy, which slows parsing slightly, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analysis tool with an output schema and full parameter coverage, the description covers prerequisites, side effects (quota), scope limitations, and call sequencing. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds a crucial nuance the schema misses: `connection` is accepted yet does not scope which history is scanned — this directly contradicts what an agent would assume from the schema's 'target connection name' text. It also documents the min_executions default of 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Detect N+1 query patterns from your own query_history') and immediately distinguishes itself from both a live trace and siblings like detect_anomalies. The scope of what is scanned (last 100 recorded queries, tenant-wide) is spelled out, so an agent can tell exactly what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete prerequisites and workflows: history must be populated first via query_sql or saved_queries, and empty history yields no patterns. It also excludes live-trace use and warns about daily quota. It does not explicitly contrast itself with explain_query or detect_anomalies, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_migrationARead-onlyIdempotentInspect
Generate dialect-correct ALTER TABLE migration SQL + rollback from a plain-English intent. Output uses the connection's exact dialect (ALTER TABLE for all three, plus pg-specific USING casts / mssql-specific sp_rename / mysql-specific MODIFY COLUMN). Never executes. Check response dialect field before manually editing — don't hand-translate across dialects. [BUILD tier]
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Plain English: 'add soft delete to drivers', 'add index on trips.driver_id' | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, but the description adds substantive behavior: it never executes, returns both migration SQL and rollback, uses dialect-specific constructs such as USING, sp_rename, and MODIFY COLUMN, and instructs checking the response dialect field before editing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the dialect-specific details are relevant, but the bracketed '[BUILD tier]' tag adds little for an invoking agent. Overall it is dense but mostly earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema coverage and the presence of an output schema, the description provides enough context for correct invocation: it explains generation scope, rollback output, dialect behavior, non-execution, and response dialect checking. No critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already fully documented in the input schema. The description reinforces that intent is plain-English and connection dialect matters, but adds no syntax or format detail beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: generate dialect-correct ALTER TABLE migration SQL plus rollback from plain-English intent. It clearly distinguishes the tool from query execution siblings by specifying generation and rollback output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for migration SQL generation and clarifies it never executes, but it does not explicitly state when to use this tool versus alternatives such as query_sql or add_connection. The guidance about checking the response dialect field is operational rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_seed_dataARead-onlyIdempotentInspect
Generate realistic, schema-aware INSERT statements for development and testing. Respects types, constraints, and FK relationships. Never executes. [BUILD tier]
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table to generate seed data for | |
| format | No | Output format (default sql) | |
| row_count | No | Number of rows (default 100, max 1000) | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real value beyond the readOnlyHint/idempotent annotations: it discloses that output respects types, constraints and FK relationships, and that nothing is executed against the database. Doesn't cover limits like row caps or performance, but the safety profile is well conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core purpose front-loaded, followed by behavioral guarantees and the non-execution constraint. No waste; the tier tag is compact metadata.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema and 100% parameter coverage, the description only needs to convey intent and safety, which it does. The unexplained '[BUILD tier]' marker is the only ambiguity an agent might not resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already carries rich documentation (format default, row_count bounds, connection resolution workflow). The description adds no parameter-level detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (generate) and resource (schema-aware INSERT statements) with the intended use case (development and testing). An agent can distinguish it from query_sql or generate_migration from the wording, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear usage context: development and testing, plus an explicit 'Never executes' boundary that separates it from execution tools like query_sql. No explicit when-not conditions or named alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
impact_analysisARead-onlyIdempotentInspect
Analyze the blast radius of a proposed schema change: FK dependencies, affected views, row count, risk score. [ARCHITECT tier]
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Describe the change: 'rename vehicle_id to vehicle_uuid on trips', 'drop column X' | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so safety is covered. The description adds real value by disclosing the exact analytical outputs (FK dependencies, views, row counts, risk score), which tells the agent the operation is a multi-faceted static analysis rather than a simple lookup. Minor gap: no indication of latency or depth of the analysis.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the object of analysis front-loaded before the enumerated output list, plus a short tier tag. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% parameter coverage, the description need not explain return shapes, and it correctly focuses on what the analysis covers. The only loose end is the unexplained '[ARCHITECT tier]' marker, which could confuse an agent about eligibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters carry detailed descriptions, including a semantic-resolution protocol for 'connection' via list_connections. The description adds nothing beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Analyze') and object ('blast radius of a proposed schema change') and enumerates the artifacts returned: FK dependencies, affected views, row count, risk score. This clearly distinguishes it from generate_migration, which produces DDL rather than analysis, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'proposed schema change' implies a pre-migration safety check, so the usage window is inferable. However, there is no explicit 'use this before X, not instead of Y' guidance, and the '[ARCHITECT tier]' tag is never explained as a gating or routing condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_api_keyARead-onlyIdempotentInspect
Get the link to the ThinAir DATA console where you create and manage your API keys (ta_data_*), plus your current plan. This tool does NOT create, rotate or return a key: you create the key yourself in the console, where it is shown to you once, and every key you already have keeps working unchanged. Use it when an integration needs a key and you want to point the user at the right place. NOTE: keys created in this console work ONLY against ThinAir Data - they do NOT authenticate against ThinAir Geo, which has its own console and an identically-named issue_api_key tool.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | The account's current plan. Existing keys keep working on it, unchanged. |
| error | No | |
| status | Yes | |
| console_url | No | The ThinAir Data console page where you create and manage API keys. Open it, sign in, and create a key there; it is shown to you once, in the console. This tool never creates, rotates or returns a key. |
| instructions | No | Plain-language next step for the user, including which product this is: a key created in this console works ONLY against ThinAir Data, not ThinAir Geo. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds real context beyond them: the key is shown once in the console, existing keys keep working unchanged, the tool only returns a link and plan, and DATA keys do not authenticate against ThinAir Geo. That cross-product scoping caveat is exactly the kind of behavioral detail structured fields cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and result, then the disclaimers. Slightly repetitive in restating the no-key-creation point twice ('does NOT create, rotate or return a key' and 'you create the key yourself'), but every sentence carries decision-relevant information and the critical Geo caveat is clearly signposted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only helper with an output schema, the agent needs to know what it returns and when to reach for it — both are covered, along with the cross-product limitation that would otherwise cause a wrong-tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so there is nothing to disambiguate and the baseline is 4. The description still explains what the call yields (console link plus current plan), though it does not go further into format since an output schema is present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: return the DATA console link plus current plan. It also preempts the obvious misreading of the name by declaring that the tool does NOT create, rotate or return a key, which lets an agent distinguish it from any real key-minting tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger is given ('use it when an integration needs a key and you want to point the user at the right place') along with the negative case (it does not create, rotate or return keys). The closing NOTE further routes the agent correctly by warning that an identically-named tool exists for ThinAir Geo with a different console.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_connectionsARead-onlyIdempotentInspect
List every database connection registered for your tenant: name, id, dbType (postgres / mysql / mssql), createdAt. Flags duplicate names — only the first-added connection of a duplicate name is reachable by name. Returns nothing sensitive (no DSN, no credentials).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and closed-world, so the safety bar is covered. The description adds genuinely useful behavior beyond that: duplicate names are flagged and only the first-added duplicate is reachable by name, plus an explicit data-safety statement (no DSN, no credentials). It stops short of describing ordering or behavior on large/empty result sets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler: the resource and returned fields come first, then the duplicate-name caveat, then the security note. Every clause carries actionable information for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, annotations cover the safety profile, and there are no parameters to document. The remaining minor gaps (result ordering, whether all connections are returned in one shot for large tenants) don't block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and the schema is fully described, so there is nothing for the description to disambiguate. The description correctly adds no spurious parameter talk and instead clarifies the filtering scope ('for your tenant'), which is the one semantic constraint worth stating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('List') plus a precisely scoped resource ('every database connection registered for your tenant'), and it enumerates the returned fields (name, id, dbType, createdAt). No sibling tool overlaps with this discovery/enumeration role, so an agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: a zero-parameter, tenant-scoped listing is obviously the discovery step before connection-dependent calls, and the duplicate-name warning hints at a name-resolution pitfall. However, the description never says when to call this versus alternatives (e.g. test_connection to validate one, add_connection/remove_connection to change the set) or that the returned name/id feeds other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_queryARead-onlyIdempotentInspect
Analyze a SQL query's plan and return ranked optimization recommendations with explanations. Returns a verdict (efficient / needs_attention) plus findings: full/sequential scans, nested-loop joins, and — on mysql — temporary tables and filesorts. It does NOT return a rewritten query; original_query comes back unchanged and any rewrite is yours to author from the recommendations. The plan is ESTIMATED on all three dialects (pg EXPLAIN (ANALYZE false, FORMAT JSON), mysql EXPLAIN, mssql SHOWPLAN_XML) — the query is never executed, so run-time-only conditions such as a sort spilling to disk cannot be detected and are not reported. Ready-to-run index DDL is available only on mssql, where SHOWPLAN carries the optimizer's own missing-index statements; on postgres/mysql the recommendation names the WHERE/JOIN columns to index instead. [BUILD tier]
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | SQL query to optimize | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that plans are ESTIMATED via the exact dialect-specific statements, that the query is never executed, and the concrete consequence (run-time-only conditions like a sort spilling to disk are not reported). It also scopes a capability by dialect — ready-to-run index DDL only on mssql, column names on postgres/mysql — which is exactly the kind of behavioral detail annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the outcome (ranked recommendations), then limits, then dialect behavior — every sentence carries non-redundant information, including the important 'rewrite is yours to author' clause. The only near-waste is the unexplained '[BUILD tier]' tag, which is too small a blemish to offset the density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description correctly avoids enumerating return fields and instead covers what the schema cannot: estimation vs. execution semantics, dialect-specific gaps, and what the tool deliberately omits. Nothing an agent needs in order to call it correctly or interpret results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the `connection` parameter already documents the list_connections resolution workflow in detail, so the schema does the heavy lifting. The description adds only indirect meaning — that dialect-dependent behavior follows from the target connection — without naming or explaining either parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — analyze a SQL query's plan and return ranked optimization recommendations — plus the scope of findings (scans, nested-loop joins, mysql temp tables/filesorts) and the verdict values. It does not name or differentiate itself from likely-adjacent siblings such as explain_query or analyze_table, so an agent must infer that distinction from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: you call it when you want optimization advice, and the explicit negative ('does NOT return a rewritten query') clarifies the expected output shape, not when to prefer this over explain_query or query_sql. The '[BUILD tier]' suffix is unexplained jargon that gives no actionable routing signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pii_scanARead-onlyIdempotentInspect
Sweep string columns across tables for common PII patterns (email, SSN, credit card, phone, JWT, bearer tokens). Heuristic-only — not a compliance guarantee. [BUILD tier]
| Name | Required | Description | Default |
|---|---|---|---|
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. | |
| max_tables | No | Max tables to sample (default 25, cap 50) | |
| sample_rows | No | Rows sampled per table (default 20, cap 100; values < 5 are floored to 5) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), so the description's job is to add context — and it does, by disclosing that detection is heuristic and not a compliance guarantee, a material accuracy caveat the agent needs when reporting results. It stops short of noting cost/runtime or credential prerequisites, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler: the capability and pattern list come first, followed immediately by the accuracy caveat. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and annotations cover safety; the description supplies scope and the heuristic caveat. The only real gap is the unexplained '[BUILD tier]' marker and no hint about runtime cost across up to 50 tables.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; the schema fully documents connection resolution, max_tables, sample_rows and their defaults/caps. The description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('sweep') plus resource ('string columns across tables') and enumerates the exact pattern classes detected (email, SSN, credit card, phone, JWT, bearer tokens), so the agent knows precisely what the tool returns. It does not, however, distinguish itself from the closely related sibling data_profile, which an agent could reasonably confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the scan framing and sharpened by the 'Heuristic-only — not a compliance guarantee' caveat, but there is no explicit when-to-use/when-not guidance and no named alternative (e.g. data_profile) for broader profiling needs. The '[BUILD tier]' tag hints at a prerequisite/tier gate but is not explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_firewallADestructiveInspect
Manage and test per-connection SQL firewall rules that block, warn, or log matching queries — distinct from pii_scan, which scans stored data (not SQL text) for PII. action=add_rule creates a rule (rule_name + RE2 pattern; optional block_action: block/warn/log, default block — only "block" is enforced, "warn"/"log" are advisory-only). action=remove_rule deletes by name or id. action=list_rules is read-only. action=test_query checks a sql string against the built-in guard plus your rules and returns a verdict without running it. add_rule/remove_rule write; changes take effect within 60s. All actions count against quota. Limits: 50 rules/connection, 512-char patterns. [ARCHITECT tier]
| Name | Required | Description | Default |
|---|---|---|---|
| sql | No | SQL to test against rules | |
| action | Yes | What to do | |
| message | No | Message shown when rule triggers | |
| pattern | No | Regex pattern to match | |
| rule_name | No | Rule name | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. | |
| block_action | No | Action when matched (default block) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it states which actions write, that changes take effect within 60s, that all actions consume quota, the 50-rule/512-char limits, and the crucial detail that only "block" is enforced while "warn"/"log" are advisory-only. These are non-obvious traits an agent could not infer from destructiveHint=true alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded, opening with scope and the sibling contrast before action-by-action detail. It is a single long block that would read better as a short list, but virtually every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action, mixed read/write tool with an output schema present, the description supplies everything the output schema cannot: write semantics, propagation delay, quota cost, capacity limits, and enforcement behavior. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds real meaning on top — rule_name plus an RE2 pattern, block_action defaulting to block with its enforcement caveat, and sql as the string tested. It does not cover message or the connection resolution rules, but the schema already carries those.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (per-connection SQL firewall rules) and verb set (manage and test), then explicitly distinguishes it from the sibling pii_scan (scans stored data, not SQL text). An agent can route between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each of the four actions is enumerated with its purpose: add_rule creates, remove_rule deletes by name or id, list_rules is read-only, and test_query evaluates a sql string without executing it. That last clause is exactly the when-to-use guidance an agent needs to pick test_query over query_sql.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_historyARead-onlyInspect
Read-only audit log of your own recent query executions on this tenant — SQL text (truncated to 200 chars), execution time, row count, source tool, and error status. History is tenant-wide across every connection: connection only selects which name/dialect is echoed in meta, not which entries return. Looks backward only: use suggest_queries for NEW query ideas, or saved_queries to store and re-run a query by name. Backed by a 100-entry ring buffer per tenant, 7-day retention; limit (default 20, max 100) trims how many return, not how far back history goes. Counts against daily quota. Returns a table of {sql, execution_ms, rows, tool, error, time}. [BUILD tier]
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent queries (default 20, max 100) | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (readOnlyHint, openWorldHint=false, idempotentHint=false): 100-entry ring buffer per tenant, 7-day retention, tenant-wide scope across every connection, 200-char SQL truncation, and that calls count against the daily quota. These are exactly the facts that change how an agent should use and interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and dense — scope, alternatives, retention/limits, then return shape — with no filler sentences. Minor redundancy: the returned fields are enumerated in prose and then again in the trailing return-table note, and '[BUILD tier]' is internal jargon that costs a little space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param read tool with full annotations and an output schema, this covers everything an agent needs: scope, retention window, quota cost, truncation, and the correct sibling for adjacent intents. The brief return-shape note is a bonus rather than a substitute for the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds decisive semantics the schema obscures: `connection` only selects which name/dialect is echoed in meta rather than filtering entries, and `limit` trims how many rows return, not how far back history reaches. That corrects a plausible misreading of the schema's own 'Target connection' wording.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: a read-only audit log of the caller's own recent query executions on the tenant, with the exact fields returned (SQL text truncated to 200 chars, execution time, row count, source tool, error status). It also distinguishes itself from the nearest-looking siblings (suggest_queries, saved_queries), so an agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the boundary 'looks backward only' and names both alternatives with the condition that selects each: suggest_queries for NEW query ideas, saved_queries to store and re-run by name. It also preempts a likely misuse by explaining that `connection` does not scope which entries return.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_sqlARead-onlyIdempotentInspect
Execute a read-only SQL query against the target connection. ONLY SELECT / WITH / EXPLAIN permitted. Write dialect-appropriate SQL for the connection's engine — use PostgreSQL syntax for postgres connections (SELECT NOW(), LIMIT, ILIKE), T-SQL for mssql (SELECT GETDATE(), TOP N, LIKE), MySQL for mysql (SELECT NOW(), LIMIT). Response meta includes connection + dialect so you know which syntax worked; reuse that dialect in follow-up calls. Default LIMIT 100 unless the user asks for all rows.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return (default 100, max 1000) | |
| query | Yes | SQL SELECT query to execute | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| columns | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/openWorldHint/idempotentHint, yet the description still adds real substance: the enforced statement whitelist, the 100-row default cap, and the feedback loop where response meta returns `connection` + `dialect` to confirm which syntax applied. That is behavioral context the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the read-only contract, then dialect guidance, then the limit default — ordered by what an agent needs before writing SQL. Five dense sentences with no filler and no restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description correctly limits itself to flagging the useful meta fields rather than describing return shapes. Combined with 100% param coverage and rich annotations, an agent has everything needed to compose and target the query; only error/failure semantics are left unstated, which is minor for a read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description goes beyond by explaining how `query` content should vary by dialect (NOW() vs GETDATE(), LIMIT vs TOP N) and by tying the default row cap to user intent ("unless the user asks for all rows"). The `connection` resolution strategy is already spelled out in the schema, so the description repeats rather than extends there.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource ("Execute a read-only SQL query against the target connection") and immediately scopes it ("ONLY SELECT / WITH / EXPLAIN permitted"). It never names the closest siblings (cross_db_query, explain_query, analyze_table), so an agent must infer that multi-connection or plan-inspection work belongs elsewhere.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use mechanics: read-only statement whitelist, dialect selection per engine, and the prerequisite to resolve `connection` via `list_connections` rather than inventing names. It stops short of exclusions — nothing says when to prefer explain_query or cross_db_query instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quotaARead-onlyInspect
Check current API usage, daily limit, plan name, and upgrade options.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | |
| used | Yes | |
| limit | Yes | |
| reset_at | No | |
| upgrade_url | No | |
| schema_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that the response includes plan name and upgrade options, which is genuinely extra context, but it says nothing about auth requirements, whether usage is per-key or account-wide, or rate-limit behavior of this check itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Slight redundancy in listing return fields that the output schema will already declare, but the enumeration aids scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No parameters, an output schema that documents the return shape, and annotations covering read-only semantics — the description fills the remaining gap (what domain 'quota' means) and nothing an agent needs to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters — baseline 4 per the rubric. The description has nothing to mis-specify and correctly implies no input is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb-and-resource pairing (check API usage/quota) and enumerates the exact fields surfaced: usage, daily limit, plan name, upgrade options. The vague tool name 'quota' is fully disambiguated. It doesn't need sibling differentiation because none of the listed siblings (query_sql, analyze_table, etc.) are quota-related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent can infer 'call this when you need to know your plan or remaining quota' but the description never states the trigger, prerequisites, or when another tool would be preferable. For a no-param self-evident tool this is acceptable but thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_connectionADestructiveIdempotentInspect
Remove a stored database connection from ThinAir Data by name. This deletes the stored credential, cached schema and schema snapshots, table watches and query firewall rules for that connection, and stops automatic credential renewal. It keeps your query history (7 days), saved queries and audit logs. Your actual database is never touched, nothing is dropped or altered on it; for a few minutes after removal, ThinAir's connection pool may keep or reopen sessions to it using a temporary copy of the connection details, which is then discarded. Call list_connections first if you're unsure of the exact name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact name of the connection to remove, as shown by list_connections. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the destructiveHint/idempotentHint annotations: it names exactly what is destroyed (credential, cached schema and snapshots, table watches, firewall rules, auto-renewal), what survives (7-day query history, saved queries, audit logs), and that the underlying database is untouched. It even discloses the non-obvious post-removal pool behavior where sessions may persist briefly using a temporary credential copy — precisely the kind of caveat annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its scope, and every sentence adds distinct information (destroyed, preserved, external side effects, fallback). Slightly long-winded in the pool caveat clause, but no redundancy worth cutting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with an output schema (so return values need no explanation) and full annotation coverage, nothing an agent needs is missing: safety profile, retained data, external impact, and name-resolution path are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter description already says "Exact name of the connection to remove, as shown by list_connections." The description's "by name" and the list_connections pointer largely restate that, so the baseline of 3 applies rather than a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Remove a stored database connection from ThinAir Data by name") with explicit scope. The destructive blast radius is enumerated, so an agent can distinguish this from add_connection, test_connection and list_connections without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call list_connections first if you're unsure of the exact name" gives concrete routing to the right sibling for name resolution. It does not, however, discuss when-not-to-use (e.g. temporarily disabling vs deleting) or how it compares with test_connection for validation, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
saved_queriesADestructiveInspect
Personal, named library of reusable SELECT queries — save once, run by name later, instead of re-pasting SQL or scanning query_history's backward-looking log. action=save stores sql under name (fails with name_exists if taken — delete first to replace). action=run executes the stored SQL through the same read-only guard and firewall as query_sql and returns up to 100 rows. action=list returns saved queries (up to 100), optionally filtered by tag. action=delete removes one by name or id. save/run/delete write to tenant storage; list is read-only. All four actions count against daily quota. Returns the saved record, a result table (run), the query list, or a delete confirmation. [BUILD tier]
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Query ID (alternative to name for run/delete) | |
| sql | No | SQL to store (required for action=save) | |
| tag | No | Filter by tag (action=list) | |
| name | No | Query name (save/run/delete) | |
| tags | No | Tags (action=save) | |
| action | Yes | save | run | list | delete | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. | |
| description | No | Freeform description (action=save) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by disclosing the name_exists failure mode, the read-only guard and firewall reuse for action=run, the 100-row and 100-query caps, the fact that save/run/delete write to tenant storage while list is read-only, and that all actions consume daily quota. These are operationally significant facts an agent could not infer from readOnlyHint/destructiveHint alone, and they are consistent with destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core identity and tightly packed action-by-action phrasing. Minor waste: the trailing return-value sentence duplicates what the output schema already conveys, and the '[BUILD tier]' marker is meta clutter rather than tool semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-action, eight-parameter, destructive tool, the description covers the quota, storage side effects, failure mode, and execution guardrails; return values are covered by the output schema and echoed here. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents each param, so the description's added value is limited. It does add cross-parameter semantics the schema only hints at: id as an alternative to name for run/delete, and sql being required specifically for action=save. A modest bump over the 3 baseline, not a full 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opening clause states a specific resource and value proposition ('Personal, named library of reusable SELECT queries — save once, run by name later'), and it explicitly contrasts with siblings query_sql and query_history's log. An agent can distinguish this from every other query-related tool without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Every action carries an explicit condition: save stores sql under name, run executes stored SQL, list returns saved queries with optional tag filter, delete removes by name or id. It also names the alternative path ('instead of re-pasting SQL or scanning query_history') and the replacement prerequisite ('delete first to replace').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_locksARead-onlyInspect
List active sessions + blocking locks. Uses the dialect's own system view — pg_stat_activity on postgres, information_schema.processlist on mysql, sys.dm_exec_requests joined with sys.dm_tran_locks on mssql. No dialect arg needed — inferred from the connection. Required privileges (per dialect): postgres — pg_read_all_stats role membership (or be the role that owns the queries; otherwise you only see your own session); mysql — PROCESS privilege; mssql — VIEW SERVER STATE. If the role lacks the privilege the tool returns a clean Query blocked by security policy error rather than partial data — grant the role above and retry. RDS/Aurora/Azure managed PostgreSQL: pg_read_all_stats is grantable but not on by default. [BUILD tier]
| Name | Required | Description | Default |
|---|---|---|---|
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses behavior well beyond the annotations: required privileges per dialect (pg_read_all_stats, PROCESS, VIEW SERVER STATE), the managed-cloud default-grant caveat for RDS/Aurora/Azure PostgreSQL, and crucially that missing privileges yield a clean 'Query blocked by security policy' error rather than silently partial data. Nothing here contradicts readOnlyHint=true or openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the capability in one sentence, then layers dialect mechanics, privileges, failure mode, and managed-cloud caveat in a bolded, scannable structure. Every sentence carries actionable information; nothing is restated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single optional parameter, an output schema that covers return values, and read-only annotations, the description supplies the remaining burden: dialect resolution, privilege prerequisites, failure semantics, and cloud-specific gotchas. An agent can decide whether to call it and diagnose failure without further lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single connection parameter is already well documented, so the baseline would be 3. The description adds real value by clarifying that connection implicitly determines dialect and that no separate dialect argument exists — a fact not derivable from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource set — 'List active sessions + blocking locks' — and immediately grounds it in concrete system views per dialect (pg_stat_activity, information_schema.processlist, sys.dm_exec_requests + dm_tran_locks). No sibling tool in the inventory deals with live lock/session state, so the scope is unambiguous without naming an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear situational context: no dialect argument is needed because it is inferred, and it spells out the exact remediation path when the call fails on privileges ('grant the role above and retry'). It stops short of explicitly steering the agent between this and siblings like query_history or query_sql for diagnostics, so it is strong context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_queriesARead-onlyIdempotentInspect
Generate schema-aware query suggestions with ready-to-run SQL. Great for exploring unfamiliar databases or finding useful queries.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | Topic or goal to focus suggestions | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds that suggestions are schema-aware and produce runnable SQL, but it never clarifies that nothing is executed against the database nor whether connection listing is a prerequisite — a meaningful gap for an open-world tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the core action and followed immediately by the use case. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, parameters are fully documented, and annotations cover the safety profile, so the description only needs to frame the action — which it does. The missing piece is that it doesn't clarify whether generated SQL is executed or merely returned, which matters given an execute-capable sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; both 'context' and 'connection' are described in detail, including a recommended resolution flow via list_connections. The description adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Generate schema-aware query suggestions with ready-to-run SQL' — which is clearly distinct from execution-oriented siblings like query_sql or storage-oriented ones like saved_queries. It does not explicitly name a sibling to contrast with, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Great for exploring unfamiliar databases or finding useful queries' gives a clear situational trigger. It lacks explicit exclusions (e.g., 'use query_sql to actually run them' or 'use describe_schema for raw structure'), so the routing is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_connectionARead-onlyInspect
Ping a connection (SELECT 1) and return server version + latency. Fast way to confirm credentials and network path without running describe_schema.
| Name | Required | Description | Default |
|---|---|---|---|
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: it runs a specific query (SELECT 1) and returns server version plus latency. Annotations already cover read-only and open-world hints, but the description usefully clarifies the lightweight nature and the exact operation performed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences that front-load the core operation and the alternative. Every phrase earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described. The description covers purpose, behavior, and alternative sufficiently for a simple one-parameter utility tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter has detailed guidance embedded in the schema. The description adds no additional parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Ping a connection') and resource, and explicitly names the alternative it replaces ('without running describe_schema'). An agent can immediately distinguish it from describe_schema and similar connection tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('confirm credentials and network path') and names the alternative it avoids ('without running describe_schema'). The condition for selecting this tool over the sibling is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_tableARead-onlyInspect
Snapshot a table's row count and latest record, and compare against the snapshot taken by the PREVIOUS call. There is no scheduler and no background polling — nothing runs between calls, so the first call only establishes a baseline and you must call it again to see any change. [ARCHITECT tier]
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table to monitor | |
| column | No | Date column to track latest | |
| condition | No | What to watch: 'new rows', 'row count drops' | |
| connection | No | Target connection name from this tenant's inventory. Call `list_connections` to see every name + dialect, then match semantically to the user's intent (e.g. 'analytics' → a connection named `*-analytics-*`; 'prod' → a connection with `prod-` prefix). If the user didn't specify, use the tenant's default (first added). Do not invent names — resolve from `list_connections` output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| meta | No | |
| display | No | |
| summary | No | |
| insights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint=false, but they cannot convey that this tool has no scheduler or background polling and therefore does nothing between invocations. That is exactly the non-obvious trait an agent needs in order to avoid a single-call misread of an empty result, and it is stated plainly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core mechanism is front-loaded in the first sentence and the baseline caveat follows immediately, so no sentence is wasted. The trailing '[ARCHITECT tier]' marker is metadata rather than tool guidance and slightly dilutes the ending.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. The remaining gap is state-keying: the description never says whether the snapshot is scoped per table, per column, or per connection, which matters for a tool whose entire value depends on matching a prior call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including a detailed resolution procedure for `connection`, so the schema carries the parameter burden and the baseline of 3 applies. The description adds no meaning about `column` or `condition` beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb and resource: snapshot a table's row count and latest record, then diff against the previous snapshot. That mechanism is distinctive enough to separate it from siblings like analyze_table or data_profile, but no sibling is named, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit operational guidance: the first call only establishes a baseline and you must call again to observe change, because nothing runs between calls. What it omits is any exclusion or named alternative — it never says when to prefer detect_anomalies or analyze_table instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
26 tool updates
- Changed
add_connection2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
analyze_table14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "avg": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "cardinality_pct": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "distinct_count": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "earliest": {}, - "latest": {}, - "max": {}, - "min": {}, - "name": { - "type": "string" - }, - "null_pct": { - "type": [ - "number", - "string" - ] - }, - "top_values": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "type": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": {}, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "avg": { + "type": [ + "number", + "string" + ] + }, + "cardinality_pct": { + "type": [ + "number", + "string" + ] + }, + "distinct_count": { + "type": [ + "number", + "string" + ] + }, + "earliest": {}, + "latest": {}, + "max": {}, + "min": {}, + "name": { + "type": "string" + }, + "null_pct": { + "type": [ + "number", + "string" + ] + }, + "top_values": { + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/null_pct" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/null_pct" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
configure_allowlist12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": {}, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
cross_db_query14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "connection": { - "type": "string" - }, - "error": { - "type": [ - "string", - "null" - ] - }, - "execution_ms": { - "$ref": "#/properties/data/anyOf/0/items/properties/rows/anyOf/2" - }, - "rows": { - "anyOf": [ - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - }, - { - "type": [ - "number", - "string" - ] - } - ] - }, - "sample": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "connection" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "connection": { + "type": "string" + }, + "error": { + "type": [ + "string", + "null" + ] + }, + "execution_ms": { + "type": [ + "number", + "string" + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + }, + { + "type": [ + "number", + "string" + ] + } + ] + }, + "sample": { + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "connection" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/rows/anyOf/2" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/rows/anyOf/2" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
data_profile14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "cardinality": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "distinct_count": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "isPrimaryKey": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "null_pct": { - "type": [ - "number", - "string" - ] - }, - "nullable": { - "type": "boolean" - }, - "pii_risk": { - "type": "boolean" - }, - "pii_type": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "cardinality": { + "type": [ + "number", + "string" + ] + }, + "distinct_count": { + "type": [ + "number", + "string" + ] + }, + "isPrimaryKey": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "null_pct": { + "type": [ + "number", + "string" + ] + }, + "nullable": { + "type": "boolean" + }, + "pii_risk": { + "type": "boolean" + }, + "pii_type": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/null_pct" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/null_pct" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
describe_schema14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "columns": { - "type": [ - "number", - "string" - ] - }, - "details": { - "items": { - "additionalProperties": true, - "properties": { - "defaultValue": { - "type": [ - "string", - "null" - ] - }, - "isPrimaryKey": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "nullable": { - "type": "boolean" - }, - "type": { - "type": "string" - } - }, - "required": [ - "name", - "type" - ], - "type": "object" - }, - "type": "array" - }, - "indexes": { - "items": { - "additionalProperties": true, - "properties": { - "columns": { - "items": { - "type": "string" - }, - "type": "array" - }, - "isPrimary": { - "type": "boolean" - }, - "isUnique": { - "type": "boolean" - }, - "name": { - "type": "string" - } - }, - "required": [ - "name", - "columns" - ], - "type": "object" - }, - "type": "array" - }, - "name": { - "type": "string" - }, - "primaryKeys": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "columns": { + "type": [ + "number", + "string" + ] + }, + "details": { + "items": { + "additionalProperties": {}, + "properties": { + "defaultValue": { + "type": [ + "string", + "null" + ] + }, + "isPrimaryKey": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "nullable": { + "type": "boolean" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type" + ], + "type": "object" + }, + "type": "array" + }, + "indexes": { + "items": { + "additionalProperties": {}, + "properties": { + "columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "isPrimary": { + "type": "boolean" + }, + "isUnique": { + "type": "boolean" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "columns" + ], + "type": "object" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "primaryKeys": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/columns" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/columns" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
detect_anomalies12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": [ - "string", - "null" - ] - }, - "message": { - "type": "string" - }, - "recommendation": { - "type": "string" - }, - "severity": { - "anyOf": [ - { - "enum": [ - "info", - "low", - "medium", - "high", - "warning", - "critical" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "type": { - "type": "string" - }, - "value": {} - }, - "required": [ - "severity" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "column": { + "type": [ + "string", + "null" + ] + }, + "message": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "low", + "medium", + "high", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "type": { + "type": "string" + }, + "value": {} + }, + "required": [ + "severity" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
explain_query12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "original_sql": { - "type": "string" - }, - "plan": {} - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "original_sql": { + "type": "string" + }, + "plan": {} + }, + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
find_n_plus_one14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "executions": { - "type": [ - "number", - "string" - ] - }, - "pattern": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "executions": { + "type": [ + "number", + "string" + ] + }, + "pattern": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/executions" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/executions" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
generate_migration12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "down_sql": { - "type": "string" - }, - "intent": { - "type": "string" - }, - "up_sql": { - "type": "string" - }, - "warnings": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "up_sql" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "down_sql": { + "type": "string" + }, + "intent": { + "type": "string" + }, + "up_sql": { + "type": "string" + }, + "warnings": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "up_sql" + ], + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
generate_seed_data12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "anyOf": [ - { - "type": "string" - }, - { - "items": {}, - "type": "array" - } - ] - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "anyOf": [ + { + "type": "string" + }, + { + "items": {}, + "type": "array" + } + ] + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
impact_analysis14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "affected_views": { - "items": {}, - "type": "array" - }, - "analysis_scope": { - "enum": [ - "table", - "column" - ], - "type": "string" - }, - "dependency_risk": { - "type": "string" - }, - "fk_dependencies": { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": "string" - }, - "direction": { - "type": "string" - }, - "references": { - "type": "string" - }, - "references_column": { - "type": "string" - }, - "table": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "fk_dependencies_evaluated": { - "type": "boolean" - }, - "intent": { - "type": "string" - }, - "operation_risk": { - "type": "string" - }, - "recommendation": { - "type": "string" - }, - "risk": { - "type": "string" - }, - "row_count": { - "type": [ - "number", - "string" - ] - }, - "target": { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "column": { - "type": "string" - }, - "object_type": { - "type": "string" - }, - "table": { - "type": "string" - } - }, - "type": "object" - }, - "target_table": { - "type": "string" - } - }, - "required": [ - "target_table" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "affected_views": { + "items": {}, + "type": "array" + }, + "analysis_scope": { + "enum": [ + "table", + "column" + ], + "type": "string" + }, + "dependency_risk": { + "type": "string" + }, + "fk_dependencies": { + "items": { + "additionalProperties": {}, + "properties": { + "column": { + "type": "string" + }, + "direction": { + "type": "string" + }, + "references": { + "type": "string" + }, + "references_column": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "fk_dependencies_evaluated": { + "type": "boolean" + }, + "intent": { + "type": "string" + }, + "operation_risk": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "risk": { + "type": "string" + }, + "row_count": { + "type": [ + "number", + "string" + ] + }, + "target": { + "additionalProperties": {}, + "properties": { + "action": { + "type": "string" + }, + "column": { + "type": "string" + }, + "object_type": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "target_table": { + "type": "string" + } + }, + "required": [ + "target_table" + ], + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/properties/row_count" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/properties/row_count" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
issue_api_key1 field changed- changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
list_connections11 fields changed- changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "createdAt": { - "type": [ - "string", - "number", - "null" - ] - }, - "dbType": { - "anyOf": [ - { - "enum": [ - "postgres", - "mysql", - "mssql" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "name", - "id", - "dbType" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "createdAt": { + "type": [ + "string", + "number", + "null" + ] + }, + "dbType": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "id", + "dbType" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
optimize_query12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "node_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "original_query": { - "type": "string" - }, - "recommendations": { - "items": {}, - "type": "array" - }, - "verdict": { - "type": "string" - } - }, - "required": [ - "verdict" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "node_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "original_query": { + "type": "string" + }, + "recommendations": { + "items": {}, + "type": "array" + }, + "verdict": { + "type": "string" + } + }, + "required": [ + "verdict" + ], + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
pii_scan14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": "string" - }, - "kind": { - "type": "string" - }, - "sample_matches": { - "type": [ - "number", - "string" - ] - }, - "sampled_rows": { - "$ref": "#/properties/data/anyOf/0/items/properties/sample_matches" - }, - "severity": { - "anyOf": [ - { - "enum": [ - "info", - "warning", - "critical" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "table": { - "type": "string" - } - }, - "required": [ - "table", - "column", - "kind", - "severity" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "column": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "sample_matches": { + "type": [ + "number", + "string" + ] + }, + "sampled_rows": { + "type": [ + "number", + "string" + ] + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "table": { + "type": "string" + } + }, + "required": [ + "table", + "column", + "kind", + "severity" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/sample_matches" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/sample_matches" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
query_firewall12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "pattern": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "added": { - "type": "boolean" - }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "pattern": { - "type": "string" - }, - "rule_name": { - "type": "string" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "allowed": { - "type": "boolean" - }, - "matched": { - "type": "boolean" - }, - "matched_rule": { - "type": "string" - }, - "message": { - "type": "string" - }, - "rule": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pattern": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "action": { + "type": "string" + }, + "added": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pattern": { + "type": "string" + }, + "rule_name": { + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "action": { + "type": "string" + }, + "allowed": { + "type": "boolean" + }, + "matched": { + "type": "boolean" + }, + "matched_rule": { + "type": "string" + }, + "message": { + "type": "string" + }, + "rule": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
query_history14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "error": { - "type": [ - "string", - "null" - ] - }, - "execution_ms": { - "type": [ - "number", - "string" - ] - }, - "rows": { - "$ref": "#/properties/data/anyOf/0/items/properties/execution_ms" - }, - "sql": { - "type": "string" - }, - "time": { - "type": [ - "string", - "number", - "null" - ] - }, - "tool": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "error": { + "type": [ + "string", + "null" + ] + }, + "execution_ms": { + "type": [ + "number", + "string" + ] + }, + "rows": { + "type": [ + "number", + "string" + ] + }, + "sql": { + "type": "string" + }, + "time": { + "type": [ + "string", + "number", + "null" + ] + }, + "tool": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/execution_ms" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/execution_ms" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
query_sql13 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / columns / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
quota1 field changed- changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
remove_connection2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{}
- Changed
saved_queries14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "created": { - "type": "string" - }, - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "runs": { - "type": [ - "number", - "string" - ] - }, - "tags": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "deleted": { - "type": "string" - } - }, - "required": [ - "deleted" - ], - "type": "object" - }, - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "created": { + "type": "string" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "runs": { + "type": [ + "number", + "string" + ] + }, + "tags": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "deleted": { + "type": "string" + } + }, + "required": [ + "deleted" + ], + "type": "object" + }, + { + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/runs" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/items/properties/runs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
show_locks12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
suggest_queries12 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "category": { - "type": "string" - }, - "question": { - "type": "string" - }, - "sql": { - "type": "string" - } - }, - "required": [ - "question", - "sql" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "properties": { + "category": { + "type": "string" + }, + "question": { + "type": "string" + }, + "sql": { + "type": "string" + } + }, + "required": [ + "question", + "sql" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/meta/properties/executionTimeMs" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
test_connection14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "current_database": { - "type": [ - "string", - "null" - ] - }, - "current_schema": { - "type": [ - "string", - "null" - ] - }, - "db_type": { - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "ping_ms": { - "type": [ - "number", - "string" - ] - }, - "total_ms": { - "$ref": "#/properties/data/anyOf/0/properties/ping_ms" - }, - "version": { - "type": "string" - } - }, - "required": [ - "ok" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "current_database": { + "type": [ + "string", + "null" + ] + }, + "current_schema": { + "type": [ + "string", + "null" + ] + }, + "db_type": { + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "ping_ms": { + "type": [ + "number", + "string" + ] + }, + "total_ms": { + "type": [ + "number", + "string" + ] + }, + "version": { + "type": "string" + } + }, + "required": [ + "ok" + ], + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/properties/ping_ms" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/properties/ping_ms" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
- Changed
watch_table14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "baseline": { - "type": "boolean" - }, - "current_count": { - "type": [ - "number", - "string" - ] - }, - "latest_record": { - "type": [ - "string", - "number", - "null" - ] - }, - "table": { - "type": "string" - } - }, - "required": [ - "table" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - }, - "retryable": { - "type": "boolean" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "baseline": { + "type": "boolean" + }, + "current_count": { + "type": [ + "number", + "string" + ] + }, + "latest_record": { + "type": [ + "string", + "number", + "null" + ] + }, + "table": { + "type": "string" + } + }, + "required": [ + "table" + ], + "type": "object" + }, + { + "additionalProperties": {}, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - changed
Output schema / properties / display / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / chart / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / code / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / map / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / display / properties / metric / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / insights / items / additionalPropertiesPrevious value: -trueNew value: +{} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -trueNew value: +{} - removed
Output schema / properties / meta / properties / executionTimeMs / $refRemoved value: -"#/properties/data/anyOf/0/properties/current_count" - added
Output schema / properties / meta / properties / executionTimeMs / typeAdded value: +[ + "number", + "string" +] - removed
Output schema / properties / meta / properties / rowCount / $refRemoved value: -"#/properties/data/anyOf/0/properties/current_count" - added
Output schema / properties / meta / properties / rowCount / typeAdded value: +[ + "number", + "string" +]
1 tool update
- Changed
issue_api_key13 fields changed- removed
Output schema / properties / api_keyRemoved value: -{ - "description": "One-time API key secret. Returned only on successful creation, in both structuredContent.api_key and content[0].text. Save this key now. It is shown once. ThinAir authenticates using a hash of the key. Matches AWS IAM / Stripe / GitHub PAT one-time-reveal semantics.", - "type": "string" -} - added
Output schema / properties / console_urlAdded value: +{ + "description": "The ThinAir Data console page where you create and manage API keys. Open it, sign in, and create a key there; it is shown to you once, in the console. This tool never creates, rotates or returns a key.", + "type": "string" +} - removed
Output schema / properties / credential_returned_onceRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / instructionsAdded value: +{ + "description": "Plain-language next step for the user, including which product this is: a key created in this console works ONLY against ThinAir Data, not ThinAir Geo.", + "type": "string" +} - removed
Output schema / properties / key_idRemoved value: -{ - "description": "Non-secret fingerprint of the issued key. Safe to log and surface in UI.", - "type": "string" -} - removed
Output schema / properties / noteRemoved value: -{ - "type": "string" -} - added
Output schema / properties / plan / descriptionAdded value: +"The account's current plan. Existing keys keep working on it, unchanged." - removed
Output schema / properties / previous_keys_retire_atRemoved value: -{ - "description": "ISO 8601 instant when the previous keys stop working (one hour after this mint). Present only when previous_keys_retiring > 0. Update anything still using them before this time.", - "type": "string" -} - removed
Output schema / properties / previous_keys_retiringRemoved value: -{ - "description": "How many previously-live keys this mint scheduled to retire. issue_api_key rotates: after the grace window the returned key is the only live key on the tenant. 0 means there was nothing else.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / retry_after_sRemoved value: -{ - "type": "number" -} - removed
Output schema / properties / tenantIdRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / usageRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / userRemoved value: -{ - "type": "string" -}
1 tool update
- Changed
issue_api_key1 field changed- changed
Output schema / properties / api_key / descriptionPrevious value: -"One-time API key secret. Returned only on successful creation, in both structuredContent.api_key and content[0].text — save it immediately. The server stores only sha-256 of the secret; once this response is lost, the key is unrecoverable and must be rotated. Matches AWS IAM / Stripe / GitHub PAT one-time-reveal semantics."New value: +"One-time API key secret. Returned only on successful creation, in both structuredContent.api_key and content[0].text. Save this key now. It is shown once. ThinAir authenticates using a hash of the key. Matches AWS IAM / Stripe / GitHub PAT one-time-reveal semantics."
22 tool updates
- Changed
analyze_table4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "avg": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "cardinality_pct": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "distinct_count": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "earliest": {}, - "latest": {}, - "max": {}, - "min": {}, - "name": { - "type": "string" - }, - "null_pct": { - "type": [ - "number", - "string" - ] - }, - "top_values": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "type": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": {}, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "avg": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "cardinality_pct": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "distinct_count": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "earliest": {}, + "latest": {}, + "max": {}, + "min": {}, + "name": { + "type": "string" + }, + "null_pct": { + "type": [ + "number", + "string" + ] + }, + "top_values": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
configure_allowlist4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": {}, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
cross_db_query4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "connection": { - "type": "string" - }, - "error": { - "type": [ - "string", - "null" - ] - }, - "execution_ms": { - "$ref": "#/properties/data/anyOf/0/items/properties/rows/anyOf/2" - }, - "rows": { - "anyOf": [ - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - }, - { - "type": [ - "number", - "string" - ] - } - ] - }, - "sample": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "connection" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "connection": { + "type": "string" + }, + "error": { + "type": [ + "string", + "null" + ] + }, + "execution_ms": { + "$ref": "#/properties/data/anyOf/0/items/properties/rows/anyOf/2" + }, + "rows": { + "anyOf": [ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + }, + { + "type": [ + "number", + "string" + ] + } + ] + }, + "sample": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "connection" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
data_profile4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "cardinality": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "distinct_count": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "isPrimaryKey": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "null_pct": { - "type": [ - "number", - "string" - ] - }, - "nullable": { - "type": "boolean" - }, - "pii_risk": { - "type": "boolean" - }, - "pii_type": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "cardinality": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "distinct_count": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "isPrimaryKey": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "null_pct": { + "type": [ + "number", + "string" + ] + }, + "nullable": { + "type": "boolean" + }, + "pii_risk": { + "type": "boolean" + }, + "pii_type": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
describe_schema4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "columns": { - "type": [ - "number", - "string" - ] - }, - "details": { - "items": { - "additionalProperties": true, - "properties": { - "defaultValue": { - "type": [ - "string", - "null" - ] - }, - "isPrimaryKey": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "nullable": { - "type": "boolean" - }, - "type": { - "type": "string" - } - }, - "required": [ - "name", - "type" - ], - "type": "object" - }, - "type": "array" - }, - "name": { - "type": "string" - }, - "primaryKeys": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "columns": { + "type": [ + "number", + "string" + ] + }, + "details": { + "items": { + "additionalProperties": true, + "properties": { + "defaultValue": { + "type": [ + "string", + "null" + ] + }, + "isPrimaryKey": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "nullable": { + "type": "boolean" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type" + ], + "type": "object" + }, + "type": "array" + }, + "indexes": { + "items": { + "additionalProperties": true, + "properties": { + "columns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "isPrimary": { + "type": "boolean" + }, + "isUnique": { + "type": "boolean" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "columns" + ], + "type": "object" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "primaryKeys": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
detect_anomalies4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": [ - "string", - "null" - ] - }, - "message": { - "type": "string" - }, - "recommendation": { - "type": "string" - }, - "severity": { - "anyOf": [ - { - "enum": [ - "info", - "low", - "medium", - "high", - "warning", - "critical" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "type": { - "type": "string" - }, - "value": {} - }, - "required": [ - "severity" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": [ + "string", + "null" + ] + }, + "message": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "low", + "medium", + "high", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "type": { + "type": "string" + }, + "value": {} + }, + "required": [ + "severity" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
explain_query4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "original_sql": { - "type": "string" - }, - "plan": {} - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "original_sql": { + "type": "string" + }, + "plan": {} + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
find_n_plus_one4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "executions": { - "type": [ - "number", - "string" - ] - }, - "pattern": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "executions": { + "type": [ + "number", + "string" + ] + }, + "pattern": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
generate_migration4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "down_sql": { - "type": "string" - }, - "intent": { - "type": "string" - }, - "up_sql": { - "type": "string" - }, - "warnings": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "up_sql" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "down_sql": { + "type": "string" + }, + "intent": { + "type": "string" + }, + "up_sql": { + "type": "string" + }, + "warnings": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "up_sql" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
generate_seed_data4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "anyOf": [ - { - "type": "string" - }, - { - "items": {}, - "type": "array" - } - ] - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "anyOf": [ + { + "type": "string" + }, + { + "items": {}, + "type": "array" + } + ] + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
impact_analysis4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "affected_views": { - "items": {}, - "type": "array" - }, - "analysis_scope": { - "enum": [ - "table", - "column" - ], - "type": "string" - }, - "dependency_risk": { - "type": "string" - }, - "fk_dependencies": { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": "string" - }, - "direction": { - "type": "string" - }, - "references": { - "type": "string" - }, - "references_column": { - "type": "string" - }, - "table": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "fk_dependencies_evaluated": { - "type": "boolean" - }, - "intent": { - "type": "string" - }, - "operation_risk": { - "type": "string" - }, - "recommendation": { - "type": "string" - }, - "risk": { - "type": "string" - }, - "row_count": { - "type": [ - "number", - "string" - ] - }, - "target": { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "column": { - "type": "string" - }, - "object_type": { - "type": "string" - }, - "table": { - "type": "string" - } - }, - "type": "object" - }, - "target_table": { - "type": "string" - } - }, - "required": [ - "target_table" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "affected_views": { + "items": {}, + "type": "array" + }, + "analysis_scope": { + "enum": [ + "table", + "column" + ], + "type": "string" + }, + "dependency_risk": { + "type": "string" + }, + "fk_dependencies": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "direction": { + "type": "string" + }, + "references": { + "type": "string" + }, + "references_column": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "fk_dependencies_evaluated": { + "type": "boolean" + }, + "intent": { + "type": "string" + }, + "operation_risk": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "risk": { + "type": "string" + }, + "row_count": { + "type": [ + "number", + "string" + ] + }, + "target": { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "column": { + "type": "string" + }, + "object_type": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "target_table": { + "type": "string" + } + }, + "required": [ + "target_table" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
list_connections4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "createdAt": { - "type": [ - "string", - "number", - "null" - ] - }, - "dbType": { - "anyOf": [ - { - "enum": [ - "postgres", - "mysql", - "mssql" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "name", - "id", - "dbType" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "createdAt": { + "type": [ + "string", + "number", + "null" + ] + }, + "dbType": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "id", + "dbType" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
optimize_query4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "node_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "original_query": { - "type": "string" - }, - "recommendations": { - "items": {}, - "type": "array" - }, - "verdict": { - "type": "string" - } - }, - "required": [ - "verdict" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "node_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "original_query": { + "type": "string" + }, + "recommendations": { + "items": {}, + "type": "array" + }, + "verdict": { + "type": "string" + } + }, + "required": [ + "verdict" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
pii_scan4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": "string" - }, - "kind": { - "type": "string" - }, - "sample_matches": { - "type": [ - "number", - "string" - ] - }, - "sampled_rows": { - "$ref": "#/properties/data/anyOf/0/items/properties/sample_matches" - }, - "severity": { - "anyOf": [ - { - "enum": [ - "info", - "warning", - "critical" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "table": { - "type": "string" - } - }, - "required": [ - "table", - "column", - "kind", - "severity" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "sample_matches": { + "type": [ + "number", + "string" + ] + }, + "sampled_rows": { + "$ref": "#/properties/data/anyOf/0/items/properties/sample_matches" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "table": { + "type": "string" + } + }, + "required": [ + "table", + "column", + "kind", + "severity" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
query_firewall4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "pattern": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "added": { - "type": "boolean" - }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "pattern": { - "type": "string" - }, - "rule_name": { - "type": "string" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "allowed": { - "type": "boolean" - }, - "matched": { - "type": "boolean" - }, - "matched_rule": { - "type": "string" - }, - "message": { - "type": "string" - }, - "rule": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pattern": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "added": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pattern": { + "type": "string" + }, + "rule_name": { + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "allowed": { + "type": "boolean" + }, + "matched": { + "type": "boolean" + }, + "matched_rule": { + "type": "string" + }, + "message": { + "type": "string" + }, + "rule": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
query_history4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "error": { - "type": [ - "string", - "null" - ] - }, - "execution_ms": { - "type": [ - "number", - "string" - ] - }, - "rows": { - "$ref": "#/properties/data/anyOf/0/items/properties/execution_ms" - }, - "sql": { - "type": "string" - }, - "time": { - "type": [ - "string", - "number", - "null" - ] - }, - "tool": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "error": { + "type": [ + "string", + "null" + ] + }, + "execution_ms": { + "type": [ + "number", + "string" + ] + }, + "rows": { + "$ref": "#/properties/data/anyOf/0/items/properties/execution_ms" + }, + "sql": { + "type": "string" + }, + "time": { + "type": [ + "string", + "number", + "null" + ] + }, + "tool": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
query_sql5 fields changed- added
Output schema / properties / columnsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
saved_queries4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "created": { - "type": "string" - }, - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "runs": { - "type": [ - "number", - "string" - ] - }, - "tags": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "deleted": { - "type": "string" - } - }, - "required": [ - "deleted" - ], - "type": "object" - }, - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "created": { + "type": "string" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "runs": { + "type": [ + "number", + "string" + ] + }, + "tags": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "deleted": { + "type": "string" + } + }, + "required": [ + "deleted" + ], + "type": "object" + }, + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
show_locks4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
suggest_queries4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "category": { - "type": "string" - }, - "question": { - "type": "string" - }, - "sql": { - "type": "string" - } - }, - "required": [ - "question", - "sql" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "question": { + "type": "string" + }, + "sql": { + "type": "string" + } + }, + "required": [ + "question", + "sql" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
test_connection4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "current_database": { - "type": [ - "string", - "null" - ] - }, - "current_schema": { - "type": [ - "string", - "null" - ] - }, - "db_type": { - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "ping_ms": { - "type": [ - "number", - "string" - ] - }, - "total_ms": { - "$ref": "#/properties/data/anyOf/0/properties/ping_ms" - }, - "version": { - "type": "string" - } - }, - "required": [ - "ok" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "current_database": { + "type": [ + "string", + "null" + ] + }, + "current_schema": { + "type": [ + "string", + "null" + ] + }, + "db_type": { + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "ping_ms": { + "type": [ + "number", + "string" + ] + }, + "total_ms": { + "$ref": "#/properties/data/anyOf/0/properties/ping_ms" + }, + "version": { + "type": "string" + } + }, + "required": [ + "ok" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
- Changed
watch_table4 fields changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "baseline": { - "type": "boolean" - }, - "current_count": { - "type": [ - "number", - "string" - ] - }, - "latest_record": { - "type": [ - "string", - "number", - "null" - ] - }, - "table": { - "type": "string" - } - }, - "required": [ - "table" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "required": [ - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "baseline": { + "type": "boolean" + }, + "current_count": { + "type": [ + "number", + "string" + ] + }, + "latest_record": { + "type": [ + "string", + "number", + "null" + ] + }, + "table": { + "type": "string" + } + }, + "required": [ + "table" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "retryable": { + "type": "boolean" + } + }, + "required": [ + "error" + ], + "type": "object" + } +] - added
Output schema / properties / meta / properties / maskedCellsAdded value: +{ + "type": "number" +} - added
Output schema / properties / meta / properties / maskedColumnsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / meta / properties / rowCapReachedAdded value: +{ + "type": "boolean" +}
22 tool updates
- Changed
analyze_table1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "avg": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "cardinality_pct": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "distinct_count": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "earliest": {}, - "latest": {}, - "max": {}, - "min": {}, - "name": { - "type": "string" - }, - "null_pct": { - "type": [ - "number", - "string" - ] - }, - "top_values": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "type": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": {}, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "avg": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "cardinality_pct": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "distinct_count": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "earliest": {}, + "latest": {}, + "max": {}, + "min": {}, + "name": { + "type": "string" + }, + "null_pct": { + "type": [ + "number", + "string" + ] + }, + "top_values": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": {}, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
configure_allowlist1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": {}, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": {}, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
cross_db_query1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "connection": { - "type": "string" - }, - "error": { - "type": [ - "string", - "null" - ] - }, - "execution_ms": { - "$ref": "#/properties/data/anyOf/0/items/properties/rows/anyOf/2" - }, - "rows": { - "anyOf": [ - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - }, - { - "type": [ - "number", - "string" - ] - } - ] - }, - "sample": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "connection" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "connection": { + "type": "string" + }, + "error": { + "type": [ + "string", + "null" + ] + }, + "execution_ms": { + "$ref": "#/properties/data/anyOf/0/items/properties/rows/anyOf/2" + }, + "rows": { + "anyOf": [ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + }, + { + "type": [ + "number", + "string" + ] + } + ] + }, + "sample": { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "connection" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
data_profile1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "cardinality": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "distinct_count": { - "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" - }, - "isPrimaryKey": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "null_pct": { - "type": [ - "number", - "string" - ] - }, - "nullable": { - "type": "boolean" - }, - "pii_risk": { - "type": "boolean" - }, - "pii_type": { - "type": "string" - }, - "type": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "cardinality": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "distinct_count": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "isPrimaryKey": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "null_pct": { + "type": [ + "number", + "string" + ] + }, + "nullable": { + "type": "boolean" + }, + "pii_risk": { + "type": "boolean" + }, + "pii_type": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
describe_schema1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "columns": { - "type": [ - "number", - "string" - ] - }, - "details": { - "items": { - "additionalProperties": true, - "properties": { - "defaultValue": { - "type": [ - "string", - "null" - ] - }, - "isPrimaryKey": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "nullable": { - "type": "boolean" - }, - "type": { - "type": "string" - } - }, - "required": [ - "name", - "type" - ], - "type": "object" - }, - "type": "array" - }, - "name": { - "type": "string" - }, - "primaryKeys": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "columns": { + "type": [ + "number", + "string" + ] + }, + "details": { + "items": { + "additionalProperties": true, + "properties": { + "defaultValue": { + "type": [ + "string", + "null" + ] + }, + "isPrimaryKey": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "nullable": { + "type": "boolean" + }, + "type": { + "type": "string" + } + }, + "required": [ + "name", + "type" + ], + "type": "object" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "primaryKeys": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
detect_anomalies1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": [ - "string", - "null" - ] - }, - "message": { - "type": "string" - }, - "recommendation": { - "type": "string" - }, - "severity": { - "anyOf": [ - { - "enum": [ - "info", - "low", - "medium", - "high", - "warning", - "critical" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "type": { - "type": "string" - }, - "value": {} - }, - "required": [ - "severity" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": [ + "string", + "null" + ] + }, + "message": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "low", + "medium", + "high", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "type": { + "type": "string" + }, + "value": {} + }, + "required": [ + "severity" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
explain_query1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "original_sql": { - "type": "string" - }, - "plan": {} - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "original_sql": { + "type": "string" + }, + "plan": {} + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
find_n_plus_one1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "executions": { - "type": [ - "number", - "string" - ] - }, - "pattern": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "executions": { + "type": [ + "number", + "string" + ] + }, + "pattern": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
generate_migration1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "down_sql": { - "type": "string" - }, - "intent": { - "type": "string" - }, - "up_sql": { - "type": "string" - }, - "warnings": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "up_sql" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "down_sql": { + "type": "string" + }, + "intent": { + "type": "string" + }, + "up_sql": { + "type": "string" + }, + "warnings": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "up_sql" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
generate_seed_data1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "anyOf": [ - { - "type": "string" - }, - { - "items": {}, - "type": "array" - } - ] - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "anyOf": [ + { + "type": "string" + }, + { + "items": {}, + "type": "array" + } + ] + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
impact_analysis1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "affected_views": { - "items": {}, - "type": "array" - }, - "analysis_scope": { - "enum": [ - "table", - "column" - ], - "type": "string" - }, - "dependency_risk": { - "type": "string" - }, - "fk_dependencies": { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": "string" - }, - "direction": { - "type": "string" - }, - "references": { - "type": "string" - }, - "references_column": { - "type": "string" - }, - "table": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "fk_dependencies_evaluated": { - "type": "boolean" - }, - "intent": { - "type": "string" - }, - "operation_risk": { - "type": "string" - }, - "recommendation": { - "type": "string" - }, - "risk": { - "type": "string" - }, - "row_count": { - "type": [ - "number", - "string" - ] - }, - "target": { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "column": { - "type": "string" - }, - "object_type": { - "type": "string" - }, - "table": { - "type": "string" - } - }, - "type": "object" - }, - "target_table": { - "type": "string" - } - }, - "required": [ - "target_table" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "affected_views": { + "items": {}, + "type": "array" + }, + "analysis_scope": { + "enum": [ + "table", + "column" + ], + "type": "string" + }, + "dependency_risk": { + "type": "string" + }, + "fk_dependencies": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "direction": { + "type": "string" + }, + "references": { + "type": "string" + }, + "references_column": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "fk_dependencies_evaluated": { + "type": "boolean" + }, + "intent": { + "type": "string" + }, + "operation_risk": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "risk": { + "type": "string" + }, + "row_count": { + "type": [ + "number", + "string" + ] + }, + "target": { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "column": { + "type": "string" + }, + "object_type": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "target_table": { + "type": "string" + } + }, + "required": [ + "target_table" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
list_connections1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "createdAt": { - "type": [ - "string", - "number", - "null" - ] - }, - "dbType": { - "anyOf": [ - { - "enum": [ - "postgres", - "mysql", - "mssql" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "name", - "id", - "dbType" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "createdAt": { + "type": [ + "string", + "number", + "null" + ] + }, + "dbType": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "id", + "dbType" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
optimize_query1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "node_types": { - "items": { - "type": "string" - }, - "type": "array" - }, - "original_query": { - "type": "string" - }, - "recommendations": { - "items": {}, - "type": "array" - }, - "verdict": { - "type": "string" - } - }, - "required": [ - "verdict" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "node_types": { + "items": { + "type": "string" + }, + "type": "array" + }, + "original_query": { + "type": "string" + }, + "recommendations": { + "items": {}, + "type": "array" + }, + "verdict": { + "type": "string" + } + }, + "required": [ + "verdict" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
pii_scan1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": "string" - }, - "kind": { - "type": "string" - }, - "sample_matches": { - "type": [ - "number", - "string" - ] - }, - "sampled_rows": { - "$ref": "#/properties/data/anyOf/0/items/properties/sample_matches" - }, - "severity": { - "anyOf": [ - { - "enum": [ - "info", - "warning", - "critical" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "table": { - "type": "string" - } - }, - "required": [ - "table", - "column", - "kind", - "severity" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "sample_matches": { + "type": [ + "number", + "string" + ] + }, + "sampled_rows": { + "$ref": "#/properties/data/anyOf/0/items/properties/sample_matches" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "table": { + "type": "string" + } + }, + "required": [ + "table", + "column", + "kind", + "severity" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
query_firewall1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "pattern": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "added": { - "type": "boolean" - }, - "message": { - "type": "string" - }, - "name": { - "type": "string" - }, - "pattern": { - "type": "string" - }, - "rule_name": { - "type": "string" - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "action": { - "type": "string" - }, - "allowed": { - "type": "boolean" - }, - "matched": { - "type": "boolean" - }, - "matched_rule": { - "type": "string" - }, - "message": { - "type": "string" - }, - "rule": { - "type": [ - "string", - "null" - ] - } - }, - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pattern": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "added": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "pattern": { + "type": "string" + }, + "rule_name": { + "type": "string" + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "allowed": { + "type": "boolean" + }, + "matched": { + "type": "boolean" + }, + "matched_rule": { + "type": "string" + }, + "message": { + "type": "string" + }, + "rule": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
query_history1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "error": { - "type": [ - "string", - "null" - ] - }, - "execution_ms": { - "type": [ - "number", - "string" - ] - }, - "rows": { - "$ref": "#/properties/data/anyOf/0/items/properties/execution_ms" - }, - "sql": { - "type": "string" - }, - "time": { - "type": [ - "string", - "number", - "null" - ] - }, - "tool": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "error": { + "type": [ + "string", + "null" + ] + }, + "execution_ms": { + "type": [ + "number", + "string" + ] + }, + "rows": { + "$ref": "#/properties/data/anyOf/0/items/properties/execution_ms" + }, + "sql": { + "type": "string" + }, + "time": { + "type": [ + "string", + "number", + "null" + ] + }, + "tool": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
query_sql1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
saved_queries1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "created": { - "type": "string" - }, - "description": { - "type": "string" - }, - "name": { - "type": "string" - }, - "runs": { - "type": [ - "number", - "string" - ] - }, - "tags": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "deleted": { - "type": "string" - } - }, - "required": [ - "deleted" - ], - "type": "object" - }, - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "created": { + "type": "string" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "runs": { + "type": [ + "number", + "string" + ] + }, + "tags": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "deleted": { + "type": "string" + } + }, + "required": [ + "deleted" + ], + "type": "object" + }, + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
show_locks1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
suggest_queries1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "category": { - "type": "string" - }, - "question": { - "type": "string" - }, - "sql": { - "type": "string" - } - }, - "required": [ - "question", - "sql" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "question": { + "type": "string" + }, + "sql": { + "type": "string" + } + }, + "required": [ + "question", + "sql" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
test_connection1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "current_database": { - "type": [ - "string", - "null" - ] - }, - "current_schema": { - "type": [ - "string", - "null" - ] - }, - "db_type": { - "type": "string" - }, - "ok": { - "type": "boolean" - }, - "ping_ms": { - "type": [ - "number", - "string" - ] - }, - "total_ms": { - "$ref": "#/properties/data/anyOf/0/properties/ping_ms" - }, - "version": { - "type": "string" - } - }, - "required": [ - "ok" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "current_database": { + "type": [ + "string", + "null" + ] + }, + "current_schema": { + "type": [ + "string", + "null" + ] + }, + "db_type": { + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "ping_ms": { + "type": [ + "number", + "string" + ] + }, + "total_ms": { + "$ref": "#/properties/data/anyOf/0/properties/ping_ms" + }, + "version": { + "type": "string" + } + }, + "required": [ + "ok" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
- Changed
watch_table1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "baseline": { - "type": "boolean" - }, - "current_count": { - "type": [ - "number", - "string" - ] - }, - "latest_record": { - "type": [ - "string", - "number", - "null" - ] - }, - "table": { - "type": "string" - } - }, - "required": [ - "table" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "baseline": { + "type": "boolean" + }, + "current_count": { + "type": [ + "number", + "string" + ] + }, + "latest_record": { + "type": [ + "string", + "number", + "null" + ] + }, + "table": { + "type": "string" + } + }, + "required": [ + "table" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "required": [ + "error" + ], + "type": "object" + } +]
1 tool update
- Changed
detect_anomalies1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": "string" - }, - "message": { - "type": "string" - }, - "recommendation": { - "type": "string" - }, - "severity": { - "anyOf": [ - { - "enum": [ - "info", - "low", - "medium", - "high", - "warning", - "critical" - ], - "type": "string" - }, - { - "type": "string" - } - ] - }, - "type": { - "type": "string" - }, - "value": {} - }, - "required": [ - "severity" - ], - "type": "object" - }, - "type": "array" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": [ + "string", + "null" + ] + }, + "message": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "low", + "medium", + "high", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "type": { + "type": "string" + }, + "value": {} + }, + "required": [ + "severity" + ], + "type": "object" + }, + "type": "array" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "type": "object" + } +]
1 tool update
- Changed
impact_analysis1 field changed- changed
Output schema / properties / data / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "affected_views": { - "items": {}, - "type": "array" - }, - "fk_dependencies": { - "items": { - "additionalProperties": true, - "properties": { - "column": { - "type": "string" - }, - "references": { - "type": "string" - }, - "table": { - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - "intent": { - "type": "string" - }, - "recommendation": { - "type": "string" - }, - "risk": { - "type": "string" - }, - "row_count": { - "type": [ - "number", - "string" - ] - }, - "target_table": { - "type": "string" - } - }, - "required": [ - "target_table" - ], - "type": "object" - }, - { - "additionalProperties": true, - "properties": { - "code": { - "type": "string" - }, - "details": { - "additionalProperties": {}, - "type": "object" - }, - "error": { - "type": "string" - }, - "internal_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "retry_after_s": { - "type": "number" - } - }, - "type": "object" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "affected_views": { + "items": {}, + "type": "array" + }, + "analysis_scope": { + "enum": [ + "table", + "column" + ], + "type": "string" + }, + "dependency_risk": { + "type": "string" + }, + "fk_dependencies": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "direction": { + "type": "string" + }, + "references": { + "type": "string" + }, + "references_column": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "fk_dependencies_evaluated": { + "type": "boolean" + }, + "intent": { + "type": "string" + }, + "operation_risk": { + "type": "string" + }, + "recommendation": { + "type": "string" + }, + "risk": { + "type": "string" + }, + "row_count": { + "type": [ + "number", + "string" + ] + }, + "target": { + "additionalProperties": true, + "properties": { + "action": { + "type": "string" + }, + "column": { + "type": "string" + }, + "object_type": { + "type": "string" + }, + "table": { + "type": "string" + } + }, + "type": "object" + }, + "target_table": { + "type": "string" + } + }, + "required": [ + "target_table" + ], + "type": "object" + }, + { + "additionalProperties": true, + "properties": { + "code": { + "type": "string" + }, + "details": { + "additionalProperties": {}, + "type": "object" + }, + "error": { + "type": "string" + }, + "internal_code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + } + }, + "type": "object" + } +]
2 tool updates
- Changed
add_connection1 field changed- changed
Output schema / properties / status / enumPrevious value: -[ - "link_issued", - "over_cap" -]New value: +[ + "link_issued", + "over_cap", + "forbidden_scope" +]
- Changed
remove_connection1 field changed- changed
Output schema / properties / status / enumPrevious value: -[ - "removed", - "not_found" -]New value: +[ + "removed", + "not_found", + "forbidden_scope" +]
1 tool update
- Changed
issue_api_key3 fields changed- added
Output schema / properties / previous_keys_retire_atAdded value: +{ + "description": "ISO 8601 instant when the previous keys stop working (one hour after this mint). Present only when previous_keys_retiring > 0. Update anything still using them before this time.", + "type": "string" +} - added
Output schema / properties / previous_keys_retiringAdded value: +{ + "description": "How many previously-live keys this mint scheduled to retire. issue_api_key rotates: after the grace window the returned key is the only live key on the tenant. 0 means there was nothing else.", + "minimum": 0, + "type": "integer" +} - removed
Output schema / properties / revoked_previousRemoved value: -{ - "description": "How many previously-live keys this mint revoked. issue_api_key rotates: the returned key is the only live key on the tenant. 0 means there was nothing else to revoke.", - "minimum": 0, - "type": "integer" -}
1 tool update
- Changed
issue_api_key1 field changed- added
Output schema / properties / revoked_previousAdded value: +{ + "description": "How many previously-live keys this mint revoked. issue_api_key rotates: the returned key is the only live key on the tenant. 0 means there was nothing else to revoke.", + "minimum": 0, + "type": "integer" +}
23 tool updates
- Added
add_connection - Changed
analyze_table3 fields changed- added
Input schema / properties / column / maxLengthAdded value: +256 - added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / table / maxLengthAdded value: +256
- Added
configure_allowlist - Changed
cross_db_query2 fields changed- added
Input schema / properties / connections / items / maxLengthAdded value: +256 - added
Input schema / properties / sql / maxLengthAdded value: +50000
- Changed
data_profile2 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / table / maxLengthAdded value: +256
- Changed
describe_schema1 field changed- added
Input schema / properties / connection / maxLengthAdded value: +256
- Changed
detect_anomalies3 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / date_column / maxLengthAdded value: +256 - added
Input schema / properties / table / maxLengthAdded value: +256
- Changed
explain_query2 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / sql / maxLengthAdded value: +50000
- Changed
find_n_plus_one3 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / min_executions / maximumAdded value: +1000000 - added
Input schema / properties / min_executions / minimumAdded value: +1
- Changed
generate_migration3 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - changed
Input schema / properties / intent / descriptionPrevious value: -"Plain English: 'add soft delete to users', 'add index on trips.driver_id'"New value: +"Plain English: 'add soft delete to drivers', 'add index on trips.driver_id'" - added
Input schema / properties / intent / maxLengthAdded value: +2000
- Changed
generate_seed_data4 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / row_count / maximumAdded value: +1000 - added
Input schema / properties / row_count / minimumAdded value: +1 - added
Input schema / properties / table / maxLengthAdded value: +256
- Changed
impact_analysis3 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - changed
Input schema / properties / intent / descriptionPrevious value: -"Describe the change: 'rename customer_id to account_id', 'drop column X'"New value: +"Describe the change: 'rename vehicle_id to vehicle_uuid on trips', 'drop column X'" - added
Input schema / properties / intent / maxLengthAdded value: +500
- Changed
optimize_query2 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / query / maxLengthAdded value: +50000
- Changed
pii_scan6 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / max_tables / maximumAdded value: +50 - added
Input schema / properties / max_tables / minimumAdded value: +1 - changed
Input schema / properties / sample_rows / descriptionPrevious value: -"Rows sampled per table (default 20, cap 100)"New value: +"Rows sampled per table (default 20, cap 100; values < 5 are floored to 5)" - added
Input schema / properties / sample_rows / maximumAdded value: +100 - added
Input schema / properties / sample_rows / minimumAdded value: +1
- Changed
query_firewall5 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / message / maxLengthAdded value: +500 - added
Input schema / properties / pattern / maxLengthAdded value: +2000 - added
Input schema / properties / rule_name / maxLengthAdded value: +256 - added
Input schema / properties / sql / maxLengthAdded value: +50000
- Changed
query_history3 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1
- Changed
query_sql4 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / limit / maximumAdded value: +1000 - added
Input schema / properties / limit / minimumAdded value: +1 - added
Input schema / properties / query / maxLengthAdded value: +50000
- Added
remove_connection - Changed
saved_queries8 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / description / maxLengthAdded value: +1000 - added
Input schema / properties / id / maxLengthAdded value: +256 - added
Input schema / properties / name / maxLengthAdded value: +256 - added
Input schema / properties / sql / maxLengthAdded value: +50000 - added
Input schema / properties / tag / maxLengthAdded value: +256 - added
Input schema / properties / tags / items / maxLengthAdded value: +256 - added
Input schema / properties / tags / maxItemsAdded value: +20
- Changed
show_locks1 field changed- added
Input schema / properties / connection / maxLengthAdded value: +256
- Changed
suggest_queries2 fields changed- added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / context / maxLengthAdded value: +500
- Changed
test_connection1 field changed- added
Input schema / properties / connection / maxLengthAdded value: +256
- Changed
watch_table4 fields changed- added
Input schema / properties / column / maxLengthAdded value: +256 - added
Input schema / properties / condition / maxLengthAdded value: +256 - added
Input schema / properties / connection / maxLengthAdded value: +256 - added
Input schema / properties / table / maxLengthAdded value: +256
21 tool updates
- Changed
analyze_table2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
cross_db_query2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
data_profile2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
describe_schema2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
detect_anomalies2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
explain_query2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
find_n_plus_one2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
generate_migration2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
generate_seed_data2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
impact_analysis2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
list_connections2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
optimize_query2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
pii_scan2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
query_firewall2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
query_history2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
query_sql2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
saved_queries2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
show_locks2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
suggest_queries2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
test_connection2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
- Changed
watch_table2 fields changed- added
Output schema / properties / display / properties / mapAdded value: +{ + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "lat": { + "type": "string" + }, + "lon": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / display / properties / type / anyOfPrevious value: -[ - { - "enum": [ - "table", - "chart", - "metric", - "code", - "text", - "list" - ], - "type": "string" - }, - { - "type": "string" - } -]New value: +[ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list", + "map" + ], + "type": "string" + }, + { + "type": "string" + } +]
1 tool update
- Changed
quota3 fields changed- added
Output schema / properties / reset_atAdded value: +{ + "type": "string" +} - added
Output schema / properties / schema_versionAdded value: +{ + "type": "string" +} - changed
Output schema / properties / upgrade_url / typePrevious value: -"string"New value: +[ + "string", + "null" +]
1 tool update
- Changed
issue_api_key1 field changed- changed
Output schema / properties / api_key / descriptionPrevious value: -"One-time API key secret. Returned only on successful creation. Treat as a credential — never log, echo, or render in text channels."New value: +"One-time API key secret. Returned only on successful creation, in both structuredContent.api_key and content[0].text — save it immediately. The server stores only sha-256 of the secret; once this response is lost, the key is unrecoverable and must be rotated. Matches AWS IAM / Stripe / GitHub PAT one-time-reveal semantics."
Publisher details
- Operator
- ThinAir Telematics, LLC · Publisher source
- Operator website
- https://data.thinair.co
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://data.thinair.co/developers
- Trust center
- Not available
- Restrictions
- Free tier available without a credit card. Paid plans add higher quotas and dedicated API keys. Authentication via OAuth 2.1 (keyless, no custom OAuth app required) or Bearer API key. No admin approval or allowlisting required. Global coverage, no regional restrictions. · Publisher source
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs112 npm29 PyPIMIT
- AlicenseAqualityDmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1623 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.