ThinAir Data
Server Details
Connect your AI to any database — PostgreSQL, MySQL, or SQL Server — in seconds.
- Status
- Healthy
- Uptime
- 85.9% over 59 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 26 tools
Most tools target distinct operations, and descriptions explicitly disambiguate pairs like analyze_table vs data_profile and pii_scan vs query_firewall. However explain_query and optimize_query both analyze SQL execution plans and return performance advice, creating a real risk of misselection. configure_allowlist and query_firewall also overlap conceptually around guardrails.
All 26 tools use snake_case, which is consistent. Most are verb_noun (list_connections, add_connection, query_sql) but some are noun-first (quota, saved_queries, query_history, pii_scan, data_profile). The convention is predictable enough.
26 tools is above the typical 3-15 sweet spot and sits in the heavy/borderline range. The broad database platform scope justifies many tools, but the count is high enough to burden agent selection. Many tools do earn their place, so it is not a severe mismatch.
The surface covers connection lifecycle, schema introspection, query execution, saved queries, profiling, anomaly detection, performance analysis, security guardrails, migrations, and account/quota. Gaps exist around applying migrations or executing writes, but for a read-only data platform the coverage is strong.
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?
With annotations only indicating non-read-only and non-destructive, the description carries the full burden of behavioral disclosure and does so comprehensively. It explains that the tool returns a one-time link, explicitly states the connection string is never sent through chat, and outlines the mssql-specific requirement that URLs must not include embedded credentials. This goes well beyond the annotations and provides essential operational context.
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 description is moderately long but every sentence carries important information. It begins with the core action, then explains the non-obvious workflow (link, form, not via chat), and culminates in a high-risk mssql caveat. While slightly verbose, it is well-structured and front-loads the primary purpose, with no redundant phrases.
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 tool's complexity (three dialects, a non-standard workflow, and a high-risk mssql edge case), the description covers all necessary aspects: what it returns, how to use it, what to do with the response fields, and a critical pitfall. Since an output schema exists, the description does not need to enumerate return values, but it still highlights key response elements, making it fully adequate for an agent to invoke 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?
The input schema already documents both `name` and `dialect` with descriptions, achieving 100% schema coverage. The description adds value by tying the dialect to specific behavioral implications (e.g., mssql's Azure SQL handling) and indirectly explaining how the name parameter is used (as a short connection identifier). This exceeds the baseline for fully covered schemas.
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 clearly states the tool's purpose: to obtain a secure one-time link for registering a new database connection, and explicitly lists supported dialects (postgres, mysql, mssql). It also distinguishes itself from typical connection tools by emphasizing that it does NOT take a connection string as input, clarifying its unique role among siblings like test_connection or list_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?
The description provides concrete usage guidance: open the returned link, paste the connection string into a secure web form, and surface `connection_string_format` and `auth_note` to the user. It also warns against constructing a particular mssql URL format. However, it does not explicitly contrast with alternative tools or state conditions for when to prefer this tool over others, so the intended use case is clear but not fully differentiated.
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, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds meaningful behavioral context by framing this as a lightweight/fast operation contrasted with the heavier full-profile sibling, though it says nothing about latency, rate limits, or cost beyond the 'QUICK' framing.
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: the value proposition and outputs lead, then the usage context, then the alternative-tool routing. Nothing is wasted and the most decision-relevant content is front-loaded.
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 annotations covering safety, a full output schema covering return values, and 100% schema coverage of parameters, the description only needs to establish purpose and routing. It does both completely, leaving no gap an agent needs to fill before calling.
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 all three parameters are documented in the schema itself. The description only nudges the optional column param ('Optionally drill into a specific column'), adding minimal meaning beyond what the schema already conveys, which matches the baseline 3.
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 opens with a specific verb and resource ('QUICK statistical snapshot for ONE table') and enumerates the concrete outputs (row count, null rates, cardinality, min/max/avg, date ranges). It is immediately distinguishable from siblings, especially data_profile, which it names 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?
It states the use condition ('fast at-a-glance read') and the exclusion plus alternative ('Use data_profile instead when the user wants a FULL quality report including PII detection and a health score'). This is explicit when-to-use and when-to-use-something-else routing.
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?
Annotations declare destructiveHint=true and non-idempotent, and the description adds substantial context beyond them: AST-level enforcement across subqueries/CTEs/JOINs, empty array locking down all tables, masking being a heuristic aid rather than a compliance guarantee, one-way per-execution behavior, and the ENTREPRISE tier requirement.
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 paragraph that front-loads the core concept before listing actions, with no filler sentences. The heavy parenthetical nesting reduces readability slightly but each 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?
Given a destructive, multi-action, enterprise-tier tool with an output schema (so return values need not be described) and 100% schema coverage, the description covers prerequisites, defaults, and safety caveats well. It omits any mention of auth/permission requirements for enterprise-tier use.
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 parameters are already documented in the schema. The description largely restates the action meanings and the [] locking semantics that the schema already provides, adding only the default-all-mask behavior, 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 (manage) over two named resources (table allowlist, PII masking policy) for an enterprise connection, and enumerates the four sub-actions with their effects. This clearly separates it from siblings like query_firewall or pii_scan.
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?
Explains each action's purpose (view shows policy, set_tables replaces, remove_allowlist disables, set_pii_policy toggles masking) and notes both features are opt-out by default. It gives no explicit guidance on when to prefer this over pii_scan or query_firewall, which are adjacent siblings.
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 readOnly/openWorld/idempotent, but the description adds non-obvious behavior: it fails per-connection on unknown names, returns rows plus errors per connection rather than aborting, and enforces a hard 4-connection cap. This is exactly the extra context 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?
The critical dialect warning is front-loaded and bolded, followed by behavior, use cases, prerequisite, and cap in logical order. Dense but each clause carries information; the example arrays are slightly redundant with the schema examples but not wasteful.
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 explained; the description instead covers the things the schema cannot — dialect portability, cap, name-resolution prerequisite, and per-connection error semantics — leaving no material gap for 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?
Schema coverage is 100% (baseline 3), and the description still adds value: it stresses that `connections` takes NAMES not IDs, gives concrete example arrays, and warns that `sql` must be dialect-portable with specific `TOP`/`LIMIT` failure cases. Strong semantic reinforcement beyond 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+resource: 'Run the same query across 2-4 connections in parallel; returns per-connection rows + errors for diffing.' This clearly distinguishes it from the single-connection sibling query_sql and names the diffing outcome, so an agent can select 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 names the prerequisite (resolve every connection name via `list_connections` first), the failure mode on unknown names, the 4-connection cap and the workaround (split into sequential calls of ≤4), plus four canonical use cases. When and how-to-use are fully specified.
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 cover safety (readOnlyHint, idempotentHint, openWorldHint), so the description's value-add is the cost/latency tradeoff ('slower than analyze_table') and the scope of what it computes (type-gated PII, insight warnings, BUILD tier). It doesn't mention anything about limits on table size or how PII detection behaves on untyped columns, so it stops short of 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?
Front-loads the report contents, then the tradeoff, then the trigger phrases — good ordering with no filler. It is dense and packs several clauses per sentence, which slightly reduces scannability.
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 only needs to tell the agent what class of result to expect — and it does (stats + health score + PII + warnings), alongside the cost tradeoff and trigger conditions. Nothing needed 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 description coverage is 100% and `connection` carries unusually rich resolution guidance (use list_connections, match semantically, don't invent names). The description adds nothing about the two parameters, which is acceptable at this coverage level.
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, 0-100 health score, type-gated PII detection, insight warnings. It explicitly positions itself against `analyze_table`, so an agent can distinguish the two 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?
Gives both a tradeoff cue ('slower than analyze_table') and explicit trigger conditions: user says 'profile'/'quality report' or mentions PII/compliance. The alternative tool is named, giving the agent a routing decision.
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 the safety profile (readOnlyHint, idempotentHint, openWorldHint), and the description adds substantial context beyond them: 1-hour per-connection caching, the refresh bypass, no daily quota consumption, MySQL index-reporting limitation, and foreign keys not being reported. These are real behavioral traits an agent needs to plan around.
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 every sentence carries information, but the final sentence ('Returns tables with their columns, types, primary keys, and indexes') restates the opening enumeration, adding slight redundancy in an already dense single paragraph.
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 annotations covering safety and an output schema present, the description need not explain return format in depth, and it still summarizes the shape and the known gaps (indexes on MySQL, foreign keys). Caching, quota, and alternative-tool routing complete the picture an agent needs to call it 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 coverage is 100% so the baseline is 3, but the description adds meaning beyond it: refresh is framed as a cache-bypass to use after schema alteration, and connection resolution is anchored to list_connections and a default fallback. It enriches refresh semantics though the connection resolution detail largely duplicates the schema text.
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 (introspect) and resource (full database structure for a connection) and enumerates exactly what is returned: tables, columns, types, primary keys, indexes. An agent can distinguish it from analyze_table, data_profile, or query_sql 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?
Explicitly names the alternative tools (analyze_table, data_profile) and the condition that selects them: 'when you need column VALUES (stats, nulls, PII) rather than structure.' It also states when to pass refresh=true (right after altering schema), giving concrete when-to-use guidance rather than leaving it to inference.
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 by disclosing the sampled path for tables over 100k rows (~5%), the sampled:true flag that marks affected findings, and the dialect-specific sampling mechanics. This is exactly the kind of behavior an agent needs to interpret results honestly.
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 with useful content, and the sampling/hedging rule is stated as an actionable instruction. The dialect-implementation detail (TABLESAMPLE SYSTEM/PERCENT/RAND) is somewhat internal and could be trimmed, but it is not wasteful enough to penalize heavily.
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 rich annotations, the description covers the remaining burdens: what is scanned, severity-ranking of alerts, the sampling caveat, and how to present results. Nothing needed 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 schema already documents all three parameters, including connection resolution and date_column auto-detection. The description adds no parameter-level syntax or meaning beyond what the schema provides, 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 (scan a table for anomalies) and enumerates exactly what it detects: volume drops/spikes, gaps, value concentration, null rates, stale data. This clearly distinguishes it from sibling diagnostics like data_profile or analyze_table.
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 clear operational context, including how to report sampled findings with a hedge, but never explicitly names when to choose this over alternatives like data_profile, analyze_table, or watch_table. The selection rule is left implied.
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?
Goes well beyond the readOnlyHint/idempotentHint annotations by disclosing that MySQL 8.0.18+ uses EXPLAIN ANALYZE which DOES execute the query, while other dialects only produce estimated plans. It also warns that estimated cost/row counts are planner guesses, not observed behavior — exactly the kind of caveat an agent needs.
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 purpose in the first sentence, then structures the dialect nuances as a compact enumerated list. Every clause carries operational information; nothing is 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, so return values need not be described. Combined with 100% schema coverage and rich behavioral caveats, the definition gives an agent everything required to call it 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%, and the schema already documents both `sql` and the `connection` resolution workflow. 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 and resource ('Analyze a SQL query's execution plan') plus the deliverable ('plain-English performance recommendations'), which cleanly separates it from optimize_query and query_sql. The per-dialect breakdown reinforces exactly what the tool does.
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 explains per-dialect behavior in depth but never names when to choose this over siblings like optimize_query or query_sql, nor any preconditions. Usage is implied (you want plan-level performance insight) rather than explicitly routed.
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?
Adds substantial context beyond the readOnlyHint/idempotentHint annotations: which 100 queries are scanned, literal normalization, that `connection` is accepted but does NOT scope the scan, trivial-probe skipping, daily-quota consumption, and what the response contains. The connection-doesn't-scope gotcha is exactly the kind of non-obvious behavior an agent needs.
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: the core action and its scope lead, followed by mechanics, prerequisites, quota, and return shape. Long single paragraph, but every clause carries information; only the tier tag is 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, yet the description still summarizes the returned shape (fingerprint, counts, timing, example query, severity insights). Prerequisites, quota cost, and default threshold are all covered, so an agent can invoke it correctly without further digging.
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% (baseline 3), but the description adds real meaning the schema lacks — notably that `connection` is accepted yet does not scope the scanned history, and the default value of min_executions. This is genuinely additive, not repetition.
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 (detect N+1 query patterns) and immediately scopes it: 'from your own query_history, not a live trace'. This distinguishes it from trace-based siblings and from analyze_table/detect_anomalies.
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 it applies (recorded history, not a live trace) and prerequisites ('Needs populated history first (run queries via query_sql or saved_queries); empty history returns no patterns'). It routes to query_sql/saved_queries but never contrasts against the closest siblings like optimize_query or query_history directly.
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, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds real context beyond them: it never executes, it emits both SQL and rollback, and it encodes dialect-specific constructs (pg `USING`, mssql `sp_rename`, mysql `MODIFY COLUMN`).
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: purpose first, then dialect nuances, then the non-execution guarantee and the `dialect`-field warning. The trailing [BUILD tier] tag adds little but the rest earns its place.
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, yet the description usefully flags the `dialect` field. For a two-param generator with full schema coverage and annotations, this covers what an agent needs before calling.
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 the intent and connection params are already fully documented in the schema (including the list_connections resolution procedure). The description adds little param-level meaning beyond tying output to the connection's dialect, 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+resource: generate dialect-correct ALTER TABLE migration SQL plus rollback from a plain-English intent. This clearly separates it from siblings like query_sql, generate_seed_data, or describe_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?
Implies usage (turn plain-English intent into a migration) and adds a caution about the `dialect` field, but never names an alternative tool or states when NOT to use it. The when-to-use is only inferable from the description.
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?
Annotations already declare readOnlyHint/idempotentHint/openWorldHint, so the safety profile is largely covered. The description adds genuinely non-redundant context: it respects column types, constraints and FK relationships, and it explicitly does NOT execute the generated SQL — the single most important thing to know about this tool. It stops short of stating permissions, size limits, or determinism of generated data.
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 short sentences, front-loaded with the verb and resource, followed by the guarantees and the never-executes boundary. No filler; the tier tag is compressed into a bracket.
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-value explanation is unnecessary, and the description covers purpose, safety boundaries, and generation guarantees. Minor gap: no note on determinism or limits (e.g. default/max row counts), though those are documented in the 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 description coverage is 100%, including a detailed connection-resolution instruction that already routes the agent to list_connections, so the schema does the heavy lifting. The description adds no parameter-level detail (no mention of row_count, format, or connection) beyond what the schema already contains, making the baseline 3 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+resource ('Generate ... INSERT statements') plus scope ('schema-aware', 'for development and testing') and the key behavioral boundary ('Never executes'). An agent can distinguish this from query_sql (which executes) and generate_migration (which emits DDL) 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?
Names the intended context (development and testing) and states the negative constraint that it never executes, which is useful routing information. However, it never names an alternative tool or an explicit when-not condition, so usage 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.
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 the safety profile is covered. The description adds what dimensions are inspected (FK deps, views, row count, risk score) but does not disclose cost, latency, or depth limits for a potentially expensive dependency-graph walk on a live connection.
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 that names the action, the scope, and the concrete outputs, followed by a compact tier tag. Zero 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, so return values need not be explained, and the two parameters are fully documented in the schema. The description covers purpose and outputs; only the tier semantics and any cost/limit expectations are left implicit.
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 schemas for both 'intent' and 'connection' are unusually rich, including examples and a resolve-via-list_connections protocol. The description adds nothing beyond the schema, 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 ('Analyze'), a precise resource ('blast radius of a proposed schema change'), and enumerates the concrete artifacts it produces (FK dependencies, affected views, row count, risk score). It does not name or differentiate itself from adjacent siblings like generate_migration or analyze_table, so it lands at 4 rather than 5.
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 the trigger condition (pre-change assessment), and the '[ARCHITECT tier]' tag hints at availability gating. However, there is no explicit when-to-use, no when-not, and no routing to alternatives such as generate_migration, which an agent would need to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_api_keyRead-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. |
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 readOnlyHint, idempotentHint, and openWorldHint=false, so safety is covered. The description adds genuinely non-obvious behavior: duplicate names are flagged and only the first-added connection is reachable by name, and the response excludes DSN/credentials. This is real value beyond the structured fields.
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; the identity of the resource is front-loaded, the duplicate-name caveat follows, and the security note closes. 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, so return values need not be explained, yet the description still summarizes them and adds the duplicate-name constraint. Nothing needed to call a zero-parameter read tool correctly is missing; only ordering/pagination detail is absent, which the output schema likely covers.
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, so the baseline is 4. The description instead describes the shape of the returned records, which is helpful but not parameter semantics.
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 ('List every database connection registered for your tenant') plus an enumeration of the returned fields (name, id, dbType, createdAt). An agent can immediately distinguish this from add_connection, remove_connection, and test_connection.
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 verb — use this to enumerate existing connections — but the description never states when to prefer it over siblings like test_connection or describe_schema, nor any prerequisites. Adequate minimum viability without explicit routing.
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?
With readOnlyHint/idempotentHint already covering the safety profile, the description adds substantial non-obvious behavior: the query is never executed, plans are ESTIMATED via dialect-specific EXPLAIN variants, run-time-only conditions (e.g. sorts spilling to disk) cannot be detected, ready-to-run index DDL exists only on mssql, and findings vary by dialect (mysql temp tables/filesorts). It also explicitly disclaims returning a rewritten query.
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 sentence and the following clauses all carry load (return shape, non-returns, estimation caveat, dialect-specific limits). It is dense and slightly parenthetical-heavy, but no sentence is pure 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, so return structure need not be re-explained, yet the description still previews the verdict enum and finding categories. Combined with the estimation caveats and dialect asymmetries, an agent has everything needed to call this correctly and set user expectations.
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 `connection` description pointing at list_connections and the default-connection fallback, so the schema carries the parameter burden. The description adds dialect context that informs findings but says nothing further about the `query` or `connection` parameters themselves; 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: analyzes a SQL query's plan and returns ranked optimization recommendations with explanations, and enumerates concrete outputs (verdict, scan/join findings). It implicitly separates itself from a raw-plan sibling like explain_query by stressing what it does and does not return, but it never names or rules out a sibling 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?
Usage is only implied: an agent can infer 'use this when you want optimization advice rather than a raw plan,' and the note that any rewrite is yours to author gives an implicit boundary. There is no explicit when-to-use/when-not statement and no reference to explain_query, analyze_table, or query_history to route between them.
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), and the description adds real value on top: it discloses that detection is heuristic and explicitly disclaims compliance-grade accuracy. That reliability caveat is exactly the kind of trait an agent needs to reason about the output. It stops short of describing scan cost, duration, or how hits are reported in the response.
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 sentences and a tier tag, with the core action front-loaded before the caveat. Every clause earns its place; nothing is redundant.
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-shape details are correctly omitted, and the sampling controls are fully handled by the schema. Scope, method and reliability limits are covered. The remaining gap is routing context — an agent still has to guess whether to run this or data_profile first.
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 connection, max_tables, and sample_rows are fully documented in the schema itself, including defaults, caps, and the floor behavior for sample_rows. The description adds no per-parameter meaning beyond restating that it walks tables and string columns, 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) and resource (string columns across tables) and enumerates the pattern classes it looks for (email, SSN, credit card, phone, JWT, bearer tokens). The PII focus inherently separates it from generic profiling siblings like data_profile and analyze_table, though it never names an alternative 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?
No statement of when to reach for this scan versus data_profile or describe_schema, and no prerequisites or exclusions. The only guidance-adjacent content is the caveat that it is heuristic-only, which sets expectations but does not tell the agent 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.
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?
Adds substantial context beyond the annotations: only 'block' is actually enforced while 'warn'/'log' are advisory, changes take effect within 60s, every action counts against quota, and explicit limits (50 rules/connection, 512-char patterns). This is exactly the kind of operational disclosure annotations cannot carry, though return/pagination behavior is left to the output 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?
Dense but front-loaded: the tool's purpose and sibling distinction come first, then per-action semantics, then limits. Long single paragraph, but every clause for a 7-param multi-action tool earns its place.
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 no explanation, and the description covers all action modes, enforcement nuance, timing, quota, and hard limits. An agent has everything needed to invoke 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 coverage is already 100%, so the baseline is 3, but the description adds real semantics: pattern is an RE2 regex, block_action defaults to block and only 'block' is enforced, and rule_name pairs with add_rule. This meaningfully exceeds the terse schema descriptions.
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 ('Manage and test per-connection SQL firewall rules') and immediately names the sibling it must not be confused with ('distinct from pii_scan, which scans stored data'). An agent can tell it apart from pii_scan and the query tools 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?
Breaks down all four action values with explicit semantics (add_rule creates, remove_rule deletes, list_rules is read-only, test_query checks without running) and names the alternative tool (pii_scan) with its distinguishing condition. Routing is fully specified.
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 beyond the readOnlyHint/openWorldHint annotations by disclosing the 200-char truncation, the tenant-wide scope (and that `connection` only affects echoed meta), the 100-entry ring buffer, 7-day retention, and that calls consume daily quota. The quota side-effect usefully explains the non-idempotent hint. Only omission is pagination/ordering behavior for the returned table.
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 purpose, then scope, alternatives, retention and cost in a logical order; every clause carries information. Dense as a single paragraph, with the '[BUILD tier]' tag being the only non-informative token.
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?
Covers the dimensions an agent needs despite an output schema and read-only annotations: scope semantics, retention window, quota cost, and alternative routing. Nothing required 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 baseline is 3, but the description adds genuine meaning: `connection` selects only the echoed name/dialect and not which entries return, and `limit` trims result count rather than history depth. It also restates defaults/max, which the schema already carries.
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 ('Read-only audit log of your own recent query executions') plus the exact fields returned (SQL text, execution time, row count, source tool, error status). An agent can distinguish this from query_sql, saved_queries and suggest_queries 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?
Explicitly frames the tool as backward-looking and names the alternatives with their selection conditions: suggest_queries for new query ideas, saved_queries to store and re-run by name. The when-not-use case is made clear rather than inferred.
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?
Beyond the readOnlyHint/idempotentHint/openWorldHint annotations, the description discloses concrete behavioral facts: only SELECT/WITH/EXPLAIN are permitted, engine-specific dialect expectations per backend, that response meta carries `connection` and `dialect`, and the default row cap. This is exactly the extra 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-loaded with the core action and constraint, then organized into dialect guidance and default-limit behavior. It is appropriately sized for a tool with cross-engine complexity, though the repeated LIKE/LIMIT examples across dialects add some redundancy that could be tightened.
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 re-explained, yet the description still usefully flags that response meta exposes `connection`/`dialect`. Combined with the read-only constraint, dialect rules, and default row cap, an agent has everything needed to call this 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 coverage is 100%, so the schema already documents all three params (baseline 3). The description goes slightly further by explaining the connection-dialect relationship and the default-LIMIT behavior, giving the agent semantic grounding for how `connection` and `limit` should be treated, though most of this overlaps the schema text.
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 (Execute) and resource (read-only SQL query) against a clearly scoped target (the target connection), and the SELECT/WITH/EXPLAIN allowance sharpens the read-only boundary. It is unmistakably a query executor, but it never names its closest siblings (cross_db_query, explain_query, optimize_query) to help an agent discriminate between them.
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?
Rich operational context: it tells the agent to adapt SQL to the connection's engine, to read `connection`/`dialect` from response meta and reuse the dialect, and to apply a default LIMIT 100 unless the user wants all rows. It gives clear how-to context but no explicit when-not or alternative-tool exclusions (e.g., when to prefer cross_db_query or explain_query).
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 declare readOnlyHint=true, and the description's 'Check' is consistent. The description goes beyond the schema by specifying the returned information: API usage, daily limit, plan name, and upgrade options. It does not mention whether the check itself affects quota or requires authentication, but the read-only nature and output schema mitigate this.
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 description is a single, front-loaded sentence: 'Check current API usage, daily limit, plan name, and upgrade options.' Every word adds value, and there is no redundancy or 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 zero-parameter read-only tool with an output schema, the description fully covers the purpose and expected results. It clearly enumerates the returned quota details, making the tool self-explanatory within its context.
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 has zero parameters, and schema coverage is 100% (vacuously). Per guidelines, a zero-parameter tool gets a baseline of 4. The description correctly adds no parameter information because there is nothing to add.
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 uses the specific verb 'Check' and identifies exact resources: API usage, daily limit, plan name, and upgrade options. This clearly distinguishes the tool from the data-analysis and connection-management siblings.
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 the tool is for monitoring current quota status. Although it does not explicitly mention alternatives, no sibling tool appears to cover quota, so the usage context is clear. It lacks an explicit 'when not to use' statement, but that is not critical for a zero-parameter status tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_connectionDestructiveIdempotentInspect
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 |
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?
Adds substantial context beyond the annotations: name_exists failure mode, delete-before-replace, that run goes through the same read-only guard/firewall as query_sql, 100-row/100-item caps, quota consumption, and which actions write to tenant storage. The annotations only cover the generic destructive/readOnly/idempotent profile, so this description is pulling real weight; it stops short of detailing permissions or error taxonomy.
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 purpose before the action breakdown, and each sentence carries distinct information (failure modes, guards, caps, quota, return shapes). It is long for a description but nearly every clause earns its place; the trailing '[BUILD tier]' marker is minor noise.
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 tool with 8 parameters, annotations, and an output schema, this covers action routing, write/read split, limits, failure modes, and quota. Nothing an agent needs to call it correctly is missing, and return shapes are summarized even though the output schema already defines them.
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 per-action semantics the schema lacks: id is an alternative to name for run/delete, tag filters only list, and name/sql/tags are save-scoped. That mapping is the useful delta beyond the field-level descriptions.
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 resource ('personal, named library of reusable SELECT queries') and enumerates the exact verb set (save/run/list/delete) with the per-action effect of each. It explicitly contrasts itself with siblings query_history and query_sql, so an agent can distinguish it 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?
Gives explicit when-to-use ('save once, run by name later, instead of re-pasting SQL or scanning query_history's backward-looking log') and names the alternative tools it overlaps with. It also states per-action conditions, e.g. replace requires a delete first because save fails with name_exists.
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?
Goes well beyond the readOnlyHint annotation to disclose the exact system view per dialect, the required privilege for each (pg_read_all_stats, PROCESS, VIEW SERVER STATE), the managed-cloud caveat, and the precise failure mode ('Query blocked by security policy' rather than partial data). This is exactly the behavioral context an agent needs before invoking.
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 sentence and the per-dialect privilege details are genuinely load-bearing rather than filler. The dense markdown bolding and the trailing '[BUILD tier]' tag add minor noise, keeping it just short of a 5.
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 the description still covers privileges, managed-cloud caveats, error behavior, and cross-dialect support. Nothing an agent needs in order to call this 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 description coverage is 100% and the inline connection description already explains resolution via list_connections and dialect matching. The description's note that the dialect is inferred from the connection adds minor context, but the schema does the heavy lifting, 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 and two resources: 'List active sessions + blocking locks', which is unambiguous about what the tool returns. It does not explicitly differentiate itself from plausible siblings such as query_history or query_firewall, so it stops short of a 5 but the purpose is clearly conveyed.
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 explains how the connection is resolved and that no dialect arg is needed, which is useful invocation context. However, it never states when to reach for this tool versus siblings like query_history or impact_analysis, so usage is only implied.
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 the safety profile (readOnly, idempotent, openWorld), so the description's main remaining job is to add behavior beyond that. 'Schema-aware' hints that output is derived from the live schema, but nothing is said about generation limits, connection requirements, or variability of results. Adequate given annotated coverage, but adds little.
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 short sentences, purpose front-loaded, zero filler. Every clause carries information the agent can use.
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 annotations covering safety, an output schema covering returns, and 100% parameter documentation, the short description is nearly sufficient. The only real gap is sibling differentiation against query_sql/saved_queries, which an agent exploring 25+ tools would want.
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 rich inline guidance (the connection param even spells out the list_connections resolution workflow). The description adds nothing beyond the schema, so the baseline of 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') and the output form ('ready-to-run SQL'). It is clear what the tool produces, but it never differentiates itself from close siblings like saved_queries, query_sql, or explain_query, so an agent must infer the boundary.
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 a genuine when-to-use signal: 'exploring unfamiliar databases or finding useful queries.' No when-not guidance and no sibling alternatives are named, so it falls short of the explicit routing that a 5 requires.
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?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds real behavioral context: it discloses the underlying SELECT 1 probe, that it validates credentials and network reachability, and that it returns version and latency (which explains variability implied by idempotentHint=false).
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 sentences, no filler. The core action and return are front-loaded, with the usage discriminator second.
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-value detail is unnecessary in the description. For a single-parameter read-only probe, the description plus a 100%-covered schema and annotations give the agent everything needed to call it 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% and the single 'connection' parameter has a detailed, self-sufficient description with resolution instructions. The tool description adds nothing about the parameter, so the baseline of 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 (ping), resource (connection), the implementation (SELECT 1), and the return (server version + latency) in one sentence. It is clearly distinguishable from the sibling describe_schema, which is named for contrast.
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?
Frames the tool as a fast way to confirm credentials and network path, and explicitly positions it against describe_schema as the heavier alternative. It stops short of stating when not to use it (e.g., when you actually need schema structure), so it is clear context rather than full when/when-not guidance.
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?
Goes beyond annotations by disclosing statefulness (results depend on the previous call's stored snapshot) and the absence of any scheduler or background polling, which explains why idempotentHint=false. It adds genuine context, though it says nothing about auth, scope, or failure behavior.
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 core action and the critical baseline caveat in two tight sentences with no filler. The trailing '[ARCHITECT tier]' tag is unexplained noise but costs little.
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 stateful watch tool with an output schema, the description covers what matters: what is captured, how it is compared, and that a second call is required. Return-format details are rightfully left to the output schema, leaving only minor gaps around scoping/auth.
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 four parameters are already documented in the schema, including the connection-resolution workflow. The description's mention of 'row count and latest record' loosely maps to condition/column but adds no new syntax or format detail, 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: snapshot a table's row count and latest record, then diff against the previous call's snapshot. This lets an agent distinguish it from neighbors like detect_anomalies or analyze_table 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 explains the call pattern required to get value: the first call only establishes a baseline and a second call is needed to see change, since nothing runs between calls. It doesn't name a sibling alternative for anomaly detection, but the when-to-use mechanics are clear.
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.
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."
23 tool updates
- Changed
analyze_table1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
cross_db_query1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/items/properties/rows/anyOf/2" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/items/properties/rows/anyOf/2" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
data_profile1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/items/properties/null_pct" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
describe_schema1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/items/properties/columns" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/items/properties/columns" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
detect_anomalies1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
explain_query1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
find_n_plus_one1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/items/properties/executions" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/items/properties/executions" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
generate_migration1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
generate_seed_data1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
impact_analysis1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/properties/row_count" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/properties/row_count" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
issue_api_key1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "api_key": { + "description": "One-time API key secret. Returned only on successful creation. Treat as a credential — never log, echo, or render in text channels.", + "type": "string" + }, + "credential_returned_once": { + "type": "boolean" + }, + "error": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "key_id": { + "description": "Non-secret fingerprint of the issued key. Safe to log and surface in UI.", + "type": "string" + }, + "note": { + "type": "string" + }, + "plan": { + "type": "string" + }, + "retry_after_s": { + "type": "number" + }, + "status": { + "enum": [ + "success", + "error" + ], + "type": "string" + }, + "tenantId": { + "type": "string" + }, + "usage": { + "type": "string" + }, + "user": { + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" +}
- Changed
list_connections1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
optimize_query1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
pii_scan1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/items/properties/sample_matches" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/items/properties/sample_matches" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
query_firewall1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
query_history1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/items/properties/execution_ms" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/items/properties/execution_ms" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
query_sql1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
quota1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "limit": { + "type": [ + "number", + "string" + ] + }, + "plan": { + "type": "string" + }, + "upgrade_url": { + "type": "string" + }, + "used": { + "type": [ + "number", + "string" + ] + } + }, + "required": [ + "used", + "limit", + "plan" + ], + "type": "object" +}
- Changed
saved_queries1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/items/properties/runs" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/items/properties/runs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
show_locks1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
suggest_queries1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "type": [ + "number", + "string" + ] + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/meta/properties/executionTimeMs" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
test_connection1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/properties/ping_ms" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/properties/ping_ms" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
- Changed
watch_table1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "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" + } + ] + }, + "display": { + "additionalProperties": true, + "properties": { + "chart": { + "additionalProperties": true, + "properties": { + "chartType": { + "type": "string" + }, + "color": { + "type": "string" + }, + "title": { + "type": "string" + }, + "x": { + "type": "string" + }, + "xLabel": { + "type": "string" + }, + "y": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "yLabel": { + "type": "string" + } + }, + "type": "object" + }, + "code": { + "additionalProperties": true, + "properties": { + "executable": { + "type": "boolean" + }, + "language": { + "anyOf": [ + { + "enum": [ + "sql", + "json", + "bash", + "typescript" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "metric": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "status": { + "anyOf": [ + { + "enum": [ + "good", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trend": { + "anyOf": [ + { + "enum": [ + "up", + "down", + "neutral" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "trendValue": { + "type": "string" + }, + "unit": { + "type": "string" + }, + "value": { + "type": [ + "string", + "number" + ] + } + }, + "type": "object" + }, + "type": { + "anyOf": [ + { + "enum": [ + "table", + "chart", + "metric", + "code", + "text", + "list" + ], + "type": "string" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + }, + "insights": { + "items": { + "additionalProperties": true, + "properties": { + "column": { + "type": "string" + }, + "message": { + "type": "string" + }, + "severity": { + "anyOf": [ + { + "enum": [ + "info", + "warning", + "critical" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "value": {} + }, + "required": [ + "severity", + "message" + ], + "type": "object" + }, + "type": "array" + }, + "meta": { + "additionalProperties": true, + "properties": { + "cacheHit": { + "type": "boolean" + }, + "connection": { + "type": "string" + }, + "dialect": { + "anyOf": [ + { + "enum": [ + "postgres", + "mysql", + "mssql" + ], + "type": "string" + }, + { + "type": "string" + } + ] + }, + "executionTimeMs": { + "$ref": "#/properties/data/anyOf/0/properties/current_count" + }, + "plan": {}, + "rowCount": { + "$ref": "#/properties/data/anyOf/0/properties/current_count" + }, + "tool": { + "type": "string" + }, + "truncated": { + "type": "boolean" + } + }, + "type": "object" + }, + "summary": { + "type": "string" + } + }, + "type": "object" +}
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
- AlicenseAqualityCmaintenanceEnables 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.1611 npm1MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs117 npm54 PyPIMIT
- AlicenseAqualityCmaintenanceRevnuvo Company Intelligence tells AI agents what changed at a company, with evidence. It observes company websites, technologies, and DNS over time and returns timestamped, confidence-aware changes, signals, and monitoring.9MIT

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.