Skip to main content
Glama

Azure SQL MCP

azure-sql-mcp is the typed execution and evidence layer for Azure SQL Database performance and administration work. It gives MCP clients bounded read access, durable performance cases, iterative query benchmarks, leased sandbox index tests, reversible sandbox view changes, reviewed Query Store plan actions, and an explicitly gated general DBA execution path.

The supported tuning path is evidence-first but rewrite-active: a missing plan lowers confidence; it does not prevent a concrete static rewrite. A failed or slower experiment rejects only that candidate and does not end the session.

What it owns

  • Read-only SQL execution, metadata, plans, Query Store, waits, blocking, resource, statistics, and parameter-sensitivity evidence.

  • Versioned EvidenceEnvelopeV1, PerformanceCaseV1, TuningSessionV1, TuningCandidateV1, and PlanActionIntentV1 contracts.

  • Redacted SQLite state under ~/.azure-sql-mcp/state by default.

  • Exactly-once measured query samples with the result sample and actual plan from the same execution.

  • Interleaved baseline/candidate benchmarking with medians, spread, noise classification, and parameter buckets.

  • Snapshot-consistent, shape-, duplicate-, and order-aware result comparison where a complete bounded comparison is possible.

  • Database-aware equivalence preflight with recursive view-dependency and volatile-function analysis.

  • Durable temporary-index leases, automatic cleanup, and startup recovery of expired leases.

  • Reviewed view preparation with sandbox-only apply, durable restart recovery, verification, and exact rollback.

  • Prepared Query Store plan actions with prior-state capture, policy checks, verification, and exact rollback.

  • Evidence-linked decisions, terminal outcome reviews, reviewed lessons, and typed cross-skill handoffs.

  • Audited general DBA T-SQL execution that rejects direct or statically recoverable DROP DATABASE statements.

The Copilot operating instructions live in the akaalholdings/SQL skills. The skills decide what to investigate and how to present the result; this package owns database execution, policy, durable state, and deterministic workflow transitions.

Related MCP server: Warp SQL Server MCP

Support boundary

Supported:

  • Azure SQL Database PaaS.

  • Local MCP clients over stdio.

  • Streamable HTTP or SSE for private-service use when bearer authentication and network controls are configured; admin tools require a separate remote-admin opt-in.

  • Microsoft Entra authentication through DefaultAzureCredential, service principal, or interactive browser credentials.

  • SQL password authentication when supplied from protected local secret storage.

  • Read-only SELECT-shaped active benchmarks. DML and side-effecting procedures are not executed by the tuning workflow.

Not supported:

  • Azure control-plane changes, server provisioning, firewall changes, or service-tier changes.

  • Automatic production index deployment.

  • Autonomous plan forcing.

  • Treating a bounded sample as proof of equivalence.

  • Treating PLE, buffer-cache ratio, or fragmentation thresholds as query-health conclusions.

Install

Requirements: Python 3.12 or newer and uv.

cd azure-sql-mcp
uv sync --dev --locked
uv run azure-sql-mcp --help

The server does not load .env files automatically. Supply local settings through the MCP client, a process manager, or protected environment injection. .env.example contains placeholders only.

Minimal read-only start

export AZURE_SQL_SERVER="your-server.database.windows.net"
export AZURE_SQL_DEFAULT_DATABASE="your-database"
export AZURE_SQL_ALLOWED_DATABASES="your-database"
export AZURE_SQL_AUTH_MODE="entra-default"
export AZURE_SQL_ACCESS_MODE="restricted"
export AZURE_SQL_WRITE_POLICY="disabled"
export AZURE_SQL_PROFILE="triage"
export AZURE_SQL_TOOL_GROUPS="core,performance"

uv run azure-sql-mcp

The default transport is stdio. This configuration can inspect only databases in AZURE_SQL_ALLOWED_DATABASES; Azure SQL permissions remain the final authority.

General DBA start

Use a separate unprofiled local process for authorized DBA work. Do not set AZURE_SQL_PROFILE: every named profile deliberately hides execute_tsql_unrestricted.

export AZURE_SQL_SERVER="your-server.database.windows.net"
export AZURE_SQL_DEFAULT_DATABASE="master"
export AZURE_SQL_ALLOWED_DATABASES="master,appdb,reportingdb"
export AZURE_SQL_AUTH_MODE="entra-default"
export AZURE_SQL_TRANSPORT="stdio"
export AZURE_SQL_ACCESS_MODE="unrestricted"
export AZURE_SQL_WRITE_POLICY="apply"
export AZURE_SQL_TOOL_GROUPS="all"
export AZURE_SQL_ENABLE_REMOTE_ADMIN="0"
unset AZURE_SQL_PROFILE

uv run azure-sql-mcp

Call execute_tsql_unrestricted with dry_run=true to review the audit preview, then use dry_run=false for the authorized execution. The selected database_name must be in AZURE_SQL_ALLOWED_DATABASES; that allowlist controls the initial connection database, not every object an authorized T-SQL batch might reference.

This path accepts DBA T-SQL, including DDL, DML, maintenance commands, permission changes, module creation, and stored procedure execution. Its one command-level exclusion is DROP DATABASE when the statement appears directly or can be recovered statically from literal EXEC / sp_executesql text and simple constant variables. It does not reject runtime-opaque construction from non-literal data or behavior hidden inside an existing stored procedure. The scanner is defense in depth, not an authoritative database permission boundary.

Each applied DBA batch is submitted once with no retry, runs on an isolated connection that is discarded afterward, and drains every result set while returning only the configured row bound. If the connection fails or the tool is cancelled after submission, treat the outcome as unknown and reconcile database state before another attempt. Submit one T-SQL batch per call; GO is a client command used by tools such as SSMS and sqlcmd, not T-SQL understood by the server.

Azure control-plane deletion and T-SQL deletion are separate authorization surfaces. Azure RBAC or a resource lock governs deletion through Azure Resource Manager; SQL permissions govern DROP DATABASE submitted over a database connection. Configure both where deletion protection matters. The MCP scanner cannot replace least-privilege SQL credentials, Azure RBAC, resource locks, or restrictions on alternate database clients.

VS Code Copilot

Create a local .vscode/mcp.json in the workspace. Do not commit machine paths or environment-specific values.

{
  "servers": {
    "azure-sql-triage": {
      "type": "stdio",
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/azure-sql-mcp",
        "run",
        "azure-sql-mcp"
      ],
      "env": {
        "AZURE_SQL_SERVER": "your-server.database.windows.net",
        "AZURE_SQL_DEFAULT_DATABASE": "your-database",
        "AZURE_SQL_ALLOWED_DATABASES": "your-database",
        "AZURE_SQL_AUTH_MODE": "entra-default",
        "AZURE_SQL_ACCESS_MODE": "restricted",
        "AZURE_SQL_WRITE_POLICY": "disabled",
        "AZURE_SQL_PROFILE": "triage",
        "AZURE_SQL_TOOL_GROUPS": "core,performance"
      }
    }
  }
}

Reload VS Code, enable the server in Copilot Chat, then call list_databases and check_capabilities. Full client setup and profile runbooks are in docs/09-operations.md.

Named profiles

AZURE_SQL_PROFILE is enforced by the server. It removes tools that do not belong to the selected workflow; it does not grant database permission or silently enable writes.

Profile

Purpose

Required posture

Important tools

triage

Incident and broad performance diagnosis

restricted, write disabled

performance cases, evidence collection, waits, blocking, Query Store, resources, statistics

optimizer

Read-only rewrite benchmarking and view preparation

restricted, write disabled, benchmark policy

tuning sessions, candidates, rewrite benchmark, result/plan comparison, view preview

sandbox

Disposable non-production index and view tests

local stdio, unrestricted, write apply, sandbox policy

optimizer tools plus leased index benchmark and prepared view apply/verify/rollback

enforcer-review

Query Store review and intent preparation

restricted, write disabled

plan health, preview-only review, prepare_plan_action

enforcer-apply

One authorized prepared plan action

local stdio, unrestricted, write apply, apply policy, kill switch open

apply, verify, and rollback prepared intents

Named profiles always hide direct force, hint, raw plan-apply, and direct test-index mutation tools. The compatibility implementations of those tools are preview-only even when a server is started without a profile.

Profiles compose with AZURE_SQL_TOOL_GROUPS. A required tool must survive both filters.

Local database policy

Repeated benchmarks, temporary indexes, prepared view changes, and prepared plan actions fail closed unless AZURE_SQL_DATABASE_POLICY_FILE points to a valid local JSON document. Keep this file outside Git.

Synthetic policy example:

{
  "version": 1,
  "databases": {
    "your-sandbox-database": {
      "environment": "sandbox",
      "allow_read": true,
      "allow_benchmark": true,
      "allow_test_indexes": true,
      "allow_view_apply": true,
      "allow_plan_apply": false,
      "max_benchmark_executions": 80,
      "max_tuning_candidates": 60,
      "max_tuning_session_executions": 2000,
      "max_tuning_session_minutes": 360
    },
    "your-production-database": {
      "environment": "production",
      "allow_read": true,
      "allow_benchmark": false,
      "allow_test_indexes": false,
      "allow_view_apply": false,
      "allow_plan_apply": false,
      "max_benchmark_executions": 0,
      "max_tuning_candidates": 0,
      "max_tuning_session_executions": 0,
      "max_tuning_session_minutes": 0
    }
  }
}

Rules:

  • Unknown databases are denied.

  • allow_read is required for schema/catalog tools and schema MCP resources; it does not imply benchmark or write permission.

  • max_benchmark_executions is the hard ceiling for one benchmark request.

  • max_tuning_candidates, max_tuning_session_executions, and max_tuning_session_minutes cap the complete campaign. Set them explicitly when a reviewed deep search may run for hours.

  • Temporary indexes are rejected when the policy environment is production, prod, or live, even if another field is misconfigured.

  • View apply requires allow_view_apply=true, a non-production environment, the sandbox profile, and explicit durable view-SQL state.

  • Plan apply requires allow_plan_apply=true in addition to every server and intent gate.

Durable state and privacy

AZURE_SQL_PERFORMANCE_STATE_DIR defaults to ~/.azure-sql-mcp/state. The directory is created with owner-only permissions and the SQLite file with owner read/write permissions where the platform supports POSIX modes.

Performance state stores:

  • SQL and database fingerprints;

  • plan fingerprints and sourced summaries;

  • metric aggregates and evidence availability;

  • artifact references;

  • session/candidate state and budgets;

  • plan-action prior state and verification decisions;

  • temporary-index lease identifiers and cleanup targets.

Supported database scalar values are normalized at the persistence boundary: UUID values become canonical strings, date and time values use ISO-8601, and Decimal values use precision-preserving strings. Unknown object types remain rejected. Initial collection and idempotent replay return the same normalized persisted evidence sections.

Performance state does not persist raw query SQL by default. Secret-like metadata and SQL-shaped metadata fields are dropped at the normal persistence boundary. Sandbox view apply is the deliberate exception: exact crash recovery requires the target and prior view definitions, so it is disabled unless AZURE_SQL_PERSIST_VIEW_SQL_STATE=true. With that explicit opt-in, only durable view intents store raw view SQL in the same owner-only state directory and mode-0600 SQLite file. The separate admin audit can include full generated SQL only when AZURE_SQL_AUDIT_FULL_SQL=1; leave it disabled unless an approved local audit process requires it.

Read-only triage workflow

  1. check_equivalence_preflight with the affected SELECT and database.

  2. start_performance_case with the affected SELECT, up to four typed named parameter cases, and an exact query_store_query_id when one is known.

  3. collect_performance_evidence with execute_query=false for broad read-only evidence.

  4. Inspect the result status: healthy, actionable, partial, or inconclusive.

  5. Use get_performance_case to retrieve redacted evidence and event history.

  6. Hand the same case id to the optimizer or the Query Store review process.

Every diagnostic section carries collection window, availability, truncation, units, provenance, and stable query identity. Missing or truncated required evidence cannot produce healthy.

Parameter-case values are fingerprinted but not persisted. Case responses return value-free receipts/templates and exact fingerprint-v1 matching rules. Session responses derive deadline_exceeded, accepts_new_work, and accepts_finalization without rewriting the durable lifecycle state.

collect_performance_evidence focuses on Azure SQL resource history, Query Store state/history, waits, blocking/open transactions, statistics, parameter sensitivity, and regressions. analyze_db_health remains available for operational checks such as connections, constraints, replication, identity, Query Store configuration, storage, and statistics; it no longer grades PLE, buffer-cache ratio, or fragmentation as query health.

Iterative optimizer workflow

  1. Record result shape, NULL, duplicate, ordering, tie, isolation, and parameter semantics in the client workflow.

  2. Produce concrete static rewrites before plan access whenever safe.

  3. check_equivalence_preflight for the baseline and database.

  4. start_performance_case for the baseline and parameter cases.

  5. start_tuning_session, passing explicit candidate, execution, and time budgets when the user wants a deep search.

  6. For each experiment, call add_tuning_candidate with one strategy. Use combined for multi-family rewrites and rewrite_plus_index only for an index child with a recorded parent.

  7. Call benchmark_tuning_candidate in screening phase.

  8. Continue after neutral, regressed, equivalence-failed, timed-out, or otherwise inconclusive candidates.

  9. Re-run credible winners in finalist phase.

  10. Call finalize_tuning_session with the winner, if any, an explicit stopping reason, and the default selection_scope=proven. Use selection_scope=performance_only only for an explicitly accepted unproven finalist.

Compatibility defaults, used only when the caller does not request another policy-authorized budget:

Limit

Default

Candidates

10

Screening runs per candidate and parameter case

3

Finalist runs per candidate and parameter case

5

Parameter cases

4

Measured query executions

80

Wall-clock duration

20 minutes

These values are not product ceilings. A local policy can authorize a multi-hour campaign with a larger candidate and execution budget. The session remains durable across client restarts and stops at its configured budget, after all credible candidate families and combinations have terminal evidence, or at a written evidence-based diminishing-return point.

check_capabilities returns the effective local_tuning_policy ceilings without exposing the policy file or connection configuration. Benchmark tool timeouts scale to the allowed per-request execution count and configured query timeout, so a policy-authorized long campaign is not cut off by a fixed 20-minute wrapper.

Each measured sample runs the user query once. Parameterized SQL uses typed sp_executesql, never a local-variable compatibility batch. Baseline and rewrite order alternates between runs. The result includes per-side medians, min/max spread, sourced plan deltas, equivalence status, and execution count.

Rewrite screening normally defers full equivalence and costs six executions per parameter case: three baseline/candidate pairs. Finalist validation adds one two-query snapshot comparison, so five pairs cost twelve executions per case and 48 for four cases. Screening one case and validating four costs 54; screening all four and validating four costs 72. All work shares the configured session execution limit.

Input contracts publish these enums:

  • Objectives: elapsed_time, cpu, logical_reads, and physical_reads.

  • Strategies: predicate, join, aggregation, cardinality, index, combined, and rewrite_plus_index.

  • Benchmark phases: screening and finalist.

  • Finalist selection scopes: proven and performance_only.

Candidate outcomes are improved, performance_only, neutral, regressed, equivalence_failed, inconclusive, or cleanup_required. A screening winner remains open for finalist validation; finalization marks every unresolved experiment inconclusive, so the leaderboard has no ambiguous unfinished candidate.

performance_only requires complete, nonzero finalist measurements that show improvement when semantic equivalence cannot be proven. It is terminal but unproven: it never means semantic equivalence, deployment readiness, or automatic deployment approval. Finalization selects it only through explicit selection_scope=performance_only; the default proven scope rejects it.

combined is the normal strategy for a rewrite that combines multiple query families. rewrite_plus_index is an index child whose candidate: artifact references a recorded parent candidate. A performance-only parent propagates parent_equivalence=unproven, so its child cannot become a proven winner. Existing lineage-backed combined records remain readable as a deprecated compatibility form, but new lineage-backed index children use rewrite_plus_index.

Equivalence

Call check_equivalence_preflight(sql, database_name) before opening a case or comparing or benchmarking candidates. It returns coverage, risks, a verdict for each detected clock, volatile, or safely seeded function, resolved view dependencies, and unresolved dependencies. Referenced view definitions are inspected recursively to a maximum depth of eight. Encrypted, inaccessible, unresolved, cyclic, or depth-exceeded dependencies fail closed. Only summaries are persisted; raw definitions are not.

compare_query_results executes both SELECT-shaped queries inside one snapshot transaction. A match is proven only for the supplied parameter case when:

  • result shape matches;

  • the complete result fits inside the configured bound;

  • values and duplicate multiplicity match;

  • row order matches when compare_order=true;

  • both statements complete in the same snapshot.

If the result is truncated, snapshot comparison is unavailable, or execution fails, the result is inconclusive, never proven. The client remains responsible for testing semantic cases beyond the supplied buckets.

When preflight shows that direct snapshot proof is impossible, finalist validation still runs its complete performance workload and skips only the impossible semantic comparison. An improving finalist can then become performance_only under the gates above. Direct-snapshot-safe finalist behavior is unchanged.

Compatibility tools

  • tune_query starts a performance case/session and returns an evidence pack plus the next rewrite step.

  • benchmark_query_rewrite wraps one screening candidate in the session engine.

They remain available only to unprofiled compatibility clients. Named profiles intentionally omit them; new integrations should use the explicit case/session tools to preserve a complete leaderboard.

Sandbox index workflow

Use only benchmark_index_candidate; direct create/drop tools cannot perform live DDL.

Required gates:

  • AZURE_SQL_PROFILE=sandbox;

  • AZURE_SQL_TOOL_GROUPS=core,performance,admin;

  • local stdio transport;

  • AZURE_SQL_ACCESS_MODE=unrestricted;

  • AZURE_SQL_WRITE_POLICY=apply;

  • target in the normal database allowlist;

  • local policy with non-production environment, benchmark permission, and temporary-index permission;

  • active tuning session and matching candidate/query fingerprints.

The workflow writes a durable lease before DDL. CREATE INDEX and a private index-level ownership marker commit in one transaction. Cleanup requires that marker and the exact observed definition, so a same-name external index is never adopted or dropped. The workflow then performs baseline/index/post-cleanup A-B-A measurements, verifies that the expected index was used, and drops the IX_Testing_ index before the final baseline phase. Screening costs nine executions per parameter case; a five-run finalist costs fifteen per case and 60 for four. Screening may use an unchanged subset of the recorded cases; a finalist must use all of them.

Because DDL separates the phases, this is not a same-snapshot rewrite-equivalence test. The SQL is unchanged, and MCP requires complete non-truncated result fingerprints to remain stable across A-B-A. Data movement makes the result inconclusive. Cleanup failure produces cleanup_required and blocks another index experiment for that database. A completed idempotent reservation is retrieved rather than rerun. On the next sandbox start, expired leases are checked and cleanup is retried before the server accepts work.

The returned payload contains generated index DDL, rollback DDL, lease state, plan/metric deltas, classification, and the instruction to continue the tuning session.

Sandbox view workflow

prepare_view_change is read-only under optimizer and sandbox. Under optimizer it is a process-local preview only. An optimizer preview cannot be applied by another MCP process.

Apply only through a local sandbox process:

  1. Set a non-production policy entry with allow_view_apply=true and set AZURE_SQL_PERSIST_VIEW_SQL_STATE=true.

  2. Call prepare_view_change again in that sandbox process and review the target, dependency, legality, prior-state, apply, rollback, durable change id, and raw-state disclosure.

  3. Call apply_prepared_view_change with reviewed_intent=true and the same caller-stable idempotency key.

  4. Call verify_view_change.

  5. Call rollback_view_change when the candidate loses or verification fails. Existing views restore the exact prior definition; a workflow-created view is dropped only when the current definition still matches the prepared target.

The view mutation, its private ownership marker, and its catalog precondition checks execute in one transaction. A new prepare is rejected while another suite marker owns the view. The sandbox intent and exact rollback state survive MCP restarts. If apply is interrupted, call verify_view_change with the same change id. MCP adopts rollback ownership only when the target and durable database-side marker both match; otherwise it returns hold and retains the original rollback contract. Do not re-prepare against a possibly changed view until that intent is reconciled.

Production view deployment is outside this workflow and requires its normal owner-approved release path.

Reviewed plan enforcement

The only mutation path is:

  1. Use plan_health_review, review_plan_enforcement, or preview-only plan_enforcer_tick under enforcer-review.

  2. Call prepare_plan_action with the shared tuning session id, reviewed evidence, reviewer, reason, operation, and unique idempotency key.

  3. Review the intent and exact prior force/hint state.

  4. Start a local enforcer-apply process that points at the same state directory.

  5. Set AZURE_SQL_PLAN_APPLY_KILL_SWITCH=false only for the authorized action.

  6. Call apply_prepared_plan_action with the intent id and an explicit authorization reference.

  7. Collect a non-overlapping post-change window for the same parameter buckets.

  8. Call verify_plan_action.

  9. Keep on improvement, return hold on insufficient evidence, or restore the exact prior force/hint state on regression.

Apply gates include the named profile, unrestricted local server, write policy, database policy, kill switch, prepared intent, evidence hash, exact current-vs-prior state, manual ownership, authorization reference, and idempotency key. Automatic Tuning ownership is detected and cannot be silently overridden.

rollback_plan_action restores the exact force-plan and Query Store hint state captured during preparation, then confirms the resulting state.

Authentication

AZURE_SQL_AUTH_MODE

Required local values

entra-default

A working DefaultAzureCredential source, such as Azure CLI or managed identity

service-principal

AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET

interactive

Interactive browser sign-in support

sql-password

AZURE_SQL_USERNAME, AZURE_SQL_PASSWORD

Keep credentials in the operating-system credential store, managed identity, or a protected local environment source. Do not put them in MCP JSON committed to Git.

Configuration reference

Connection and workflow

Variable

Default

Meaning

AZURE_SQL_SERVER

required

Azure SQL logical server host

AZURE_SQL_DEFAULT_DATABASE

required

Default database for omitted tool arguments

AZURE_SQL_ALLOWED_DATABASES

required

Comma-separated database allowlist

AZURE_SQL_AUTH_MODE

entra-default

Authentication mode

AZURE_SQL_ACCESS_MODE

restricted

restricted or unrestricted

AZURE_SQL_PROFILE

none

Enforced named workflow profile; use one for suite operations

AZURE_SQL_TOOL_GROUPS

all

core, performance, schema, admin, or all

AZURE_SQL_DATABASE_POLICY_FILE

none

Local versioned policy; no file means benchmark and write denial

AZURE_SQL_PERFORMANCE_STATE_DIR

~/.azure-sql-mcp/state

Protected durable workflow state

AZURE_SQL_PERSIST_VIEW_SQL_STATE

false

Explicitly permit exact view SQL in the protected durable state store for restart-safe sandbox apply/rollback; requires a filesystem state directory

AZURE_SQL_LEGACY_STATE_SERVER_BINDING

none

Temporary upgrade attestation for pre-v1 durable state. It must exactly match AZURE_SQL_SERVER; without it, server-agnostic legacy identities remain blocked. Remove it after active legacy workflows have completed or been retired.

AZURE_SQL_PLAN_APPLY_KILL_SWITCH

true

true blocks prepared plan apply; set false only during authorization

Limits and transport

Variable

Default

Meaning

AZURE_SQL_ROW_LIMIT

200

Maximum returned rows for bounded query paths

AZURE_SQL_COMPARISON_ROW_LIMIT

10000

Maximum complete rows per result set eligible for equivalence or A-B-A stability proof

AZURE_SQL_QUERY_TIMEOUT_SECONDS

30

Per-query timeout

AZURE_SQL_TOOL_TIMEOUT_SECONDS

query timeout + 15

Outer tool timeout; cannot be lower than query timeout

AZURE_SQL_POOL_SIZE

5

Connections per database pool

AZURE_SQL_MAX_RETRIES

3

Retry count for retry-safe connection operations; profiled samples and execute_tsql_unrestricted are not retried

AZURE_SQL_TRANSPORT

stdio

stdio, sse, or streamable-http

AZURE_SQL_HOST

127.0.0.1

HTTP/SSE bind host

AZURE_SQL_PORT

8000

HTTP/SSE port

AZURE_SQL_MCP_BEARER_TOKEN

required remotely

Bearer token for SSE/HTTP

AZURE_SQL_ENABLE_REMOTE_ADMIN

0

Additional remote admin exposure gate; named write profiles should remain local

Audit and TLS

Variable

Default

Meaning

AZURE_SQL_WRITE_POLICY

disabled when restricted, otherwise review

disabled, review, or apply

AZURE_SQL_AUDIT_DIR

~/.azure-sql-mcp/audit

Permission-restricted admin audit directory

AZURE_SQL_AUDIT_FULL_SQL

0

Opt in to full generated SQL in admin audit records

AZURE_SQL_TRUST_SERVER_CERTIFICATE

false

Keep false for Azure SQL Database

AZURE_SQL_LOG_LEVEL

INFO

Logging level

AZURE_SQL_LOG_FORMAT

text

text or json

Equivalent --azure-sql-* flags are available in uv run azure-sql-mcp --help.

Tool groups

  • core: bounded query execution, introspection, performance cases, tuning sessions, result/plan comparison, Query Store top queries, and operational health.

  • performance: waits, blocking, resource history, statistics, query/index analysis, plan regression, and plan review.

  • schema: schema capture, comparison, and migration-script generation. Generated scripts are not executed.

  • admin: guarded maintenance, prepared apply, and unprofiled general DBA execution. Named profiles prune unrelated direct mutation tools.

check_runtime_status includes the configured tool_groups so a client can confirm the effective runtime surface after startup.

MCP discovery follows the protocol: the tool array returned by tools/list is under result.tools, not at the response root. Input schemas expose the objective, strategy, phase, and selection-scope enums. Tool responses retain their existing nested keys while adding typed output schemas and stable headline objects for case classification, session budgets, benchmark changes, and plan counts. Argument validation failures use a sanitized invalid_arguments envelope; caller input and Pydantic internals are not returned.

Resources include schema views and token-safe plan artifacts under azuresql-artifact://{artifact_id}. Artifact content is process-local and expires with the server.

Evidence-governed learning

Local stdio servers expose advisory learning tools for sql-health-triage@1.0.0, sql-optimizer@2.3.0, and sql-plan-enforcer@1.0.0. They persist redacted DecisionRecordV1, OutcomeReviewV1, LessonV1, and HandoffV1 contracts in the existing owner-only performance.sqlite3. Remote transports do not expose these tools, and an unavailable learning store leaves the normal static and database-operation surfaces unchanged.

Lessons never authorize database changes or modify a skill. Normal lessons need three aligned terminal reviews across at least two sessions and two subject fingerprints before becoming eligible. Activation, rejection, retirement, and supersession require the local maintainer CLI, a named reviewer, and the current optimistic version:

uv run azure-sql-mcp-learning list
uv run azure-sql-mcp-learning activate lesson-id --reviewer reviewer-name --expected-version 0
uv run azure-sql-mcp-learning export --output learning-pack.json
uv run azure-sql-mcp-learning import learning-pack.json

Exports contain active lessons only. Imports are inactive proposals with source-pack provenance and require fresh local approval. Learning contracts and packs reject raw SQL, parameters, result rows, credentials, environment values, and hidden reasoning.

Verification

Normal checks require no database credentials:

uv sync --dev --locked
uv run ruff check src tests scripts
uv run pyright
uv run python -m compileall -q src tests scripts
uv run pytest -q
uv build
uv run python scripts/check_markdown_links.py
uv run python scripts/verify_repository_content.py

Live validation is opt-in. Use only an allowlisted dedicated non-production Azure SQL database. Start with the optimizer profile for read-only validation. Use sandbox only for leased test indexes or reviewed view changes, and enforcer-apply only for one explicitly authorized prepared intent. Do not use the general DBA path as a production smoke test.

CI runs the repository checks on Ubuntu with Python 3.12 and 3.13 and on Windows with Python 3.12. Tests use pytest-managed temporary directories and do not rely on a fixed /tmp path.

Troubleshooting

A profile tool is missing

Check both AZURE_SQL_PROFILE and AZURE_SQL_TOOL_GROUPS. Restricted access also removes admin-group tools. Restart the MCP process after changing environment values.

For general DBA work, leave AZURE_SQL_PROFILE unset, use AZURE_SQL_ACCESS_MODE=unrestricted, include admin or all in AZURE_SQL_TOOL_GROUPS, and use local stdio. Applied execution additionally requires AZURE_SQL_WRITE_POLICY=apply and dry_run=false. Remote transports require bearer authentication, private TLS termination, and AZURE_SQL_ENABLE_REMOTE_ADMIN=1 before admin tools are exposed.

A DBA batch has an unknown outcome

Do not resubmit automatically. Inspect the audit id and reconcile the intended database state using a separate read-only query. DBA batches are never retried by the server, because a disconnect or cancellation after submission does not prove that SQL Server did not execute the batch.

A benchmark is denied

Confirm the database policy file exists, the database key matches the configured allowlist, allow_benchmark=true, and the requested execution count is within both policy and session budgets.

An equivalence check is inconclusive

Narrow the result safely so the complete set fits inside the row bound, confirm snapshot isolation is available, and retry the same parameter case. Do not relabel a bounded or failed comparison as proven.

An index lease requires cleanup

Stop further index tests. Restart the approved sandbox profile to retry expired-lease cleanup. If it remains cleanup_required, use the returned rollback DDL through the approved database change process and retain the lease as evidence until removal is confirmed.

Plan apply is blocked

Check the prepared intent, current prior-state match, ownership, enforcer-apply profile, local stdio transport, unrestricted access, write policy, database policy, authorization reference, and kill switch. Do not fall back to a direct force or hint tool.

A diagnostic is partial

Treat unavailable permissions, missing Query Store history, truncation, mismatched windows, or missing parameter buckets as evidence gaps. Recollect only the missing section against the same case instead of starting a new conclusion.

Repository handoff

This is the canonical standalone repository for the Azure SQL MCP server. Companion SQL skills and broader assessment tooling remain in akaalholdings/SQL. Package operations are in docs/09-operations.md; release history is in CHANGELOG.md; security reporting is in SECURITY.md.

Available Tools

76 tools
add_tuning_candidateB
Read-onlyIdempotent

Add one concrete rewrite or index experiment to a tuning session. Only its fingerprint and optional artifact reference are persisted.

ParametersJSON Schema
NameRequiredDescriptionDefault
strategyYesCandidate family: predicate, join, aggregation, cardinality, index, combined, or rewrite_plus_index.
session_idYesTuning session identifier.
artifact_refNoDurable artifact reference. rewrite_plus_index candidates require candidate:<parent-id>.
candidate_sqlYesConcrete read-only candidate SQL.
database_nameNo
idempotency_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and idempotentHint=true, but the description says 'Only its fingerprint and optional artifact reference are persisted,' indicating a durable write. This directly contradicts the read-only annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences deliver the core action and persistence behavior with minimal verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has six parameters and an output schema, but the description's brevity plus the contradiction leaves usage ambiguity. The persistence note is useful, yet the read-only annotation undermines trust in the description's completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 67% of parameters with descriptions, including strategy enum and artifact_ref requirements. The tool description itself adds no parameter-level detail for database_name or idempotency_key; the fingerprint persistence note is tangential.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Add one concrete rewrite or index experiment') targeting an existing tuning session, clearly distinct from session creation or benchmarking. The 'fingerprint' note emphasizes a lightweight candidate record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives listed. Context implies use within an active tuning session, but there is no direct comparison to benchmarking or session tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_db_healthA
Read-onlyIdempotent

Analyze operational Azure SQL database health. Query-performance triage belongs to collect_performance_evidence, which uses resource, Query Store, wait, blocking, statistics, parameter-sensitivity, and regression evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
decision_idNo
health_typeNoHealth type: connection, constraint, replication, identity, query_store, tuning, resource, storage, statistics, or all.all
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the 'operational' qualifier and the performance-triage exclusion, but these are more about scope than behavioral traits like return format or edge cases. It doesn't contradict annotations, but the added value beyond annotations is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose and immediately redirecting to a sibling tool. Every sentence earns its place with no redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations are strong, the description is sufficient for a health-analysis tool. It doesn't explicitly enumerate health dimensions, but the input schema's health_type parameter covers that. The main gap is the absence of broad usage context, but it's not critical given the available structured information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 67%, with health_type and database_name having descriptions. The description itself does not add parameter details, leaving decision_id undocumented beyond its default null. Since the schema covers most parameters adequately and the missing one is optional, the description adds marginal value but doesn't fully compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as analyzing operational Azure SQL database health, which is a specific verb+resource pair. It also distinguishes itself from collect_performance_evidence by explicitly noting that query-performance triage belongs to that alternative tool, ensuring the agent can differentiate between them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an explicit exclusion: 'Query-performance triage belongs to collect_performance_evidence', which tells the agent when not to use this tool and names the correct alternative. However, it doesn't offer broader guidance on when to use this tool versus other health-related siblings, so it's not fully comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_index_recommendationsA
Read-onlyIdempotent

Analyze missing-index and automatic tuning recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description simply repeats the read-only nature with 'Analyze' but adds no further behavioral context, such as outputs or side effects. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with no filler. It immediately states the purpose and front-loads the key verb and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and well-annotated, with an output schema present. The description is sufficient for basic understanding but could provide more context on what recommendations entail or how to interpret results, especially given the large set of sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides a full description for the single optional parameter database_name, including its default value. The tool description adds no additional parameter semantics, but the baseline of 3 applies due to high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Analyze missing-index and automatic tuning recommendations,' which uses a specific verb ('Analyze') and identifies the exact resource type (missing-index and auto-tuning recommendations). This distinguishes it from sibling tools that analyze query or workload indexes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. An agent cannot determine from the description alone whether to choose this over analyze_query_indexes or optimize_indexes. No prerequisites, exclusions, or recommended contexts are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_query_indexesA
Read-only

Extract SQL Server missing-index hints from estimated plans for up to 10 queries. A per-query missing_index_count of zero means no Showplan hint was emitted for that plan. The filtered recommendations can also be empty when an existing index already covers an emitted hint; neither condition proves that no index could improve the query.

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYesList of SQL SELECT queries to analyze (max 10).
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
parameter_typesNoOptional exact SQL types keyed by parameter name and shared across the supplied queries.
auto_bind_paramsNoWhen true, automatically binds @param placeholders in queries using column statistics before analyzing.
parameter_valuesNoExplicit parameter values for the supplied queries.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral nuance beyond the annotations: it explains the meaning of a zero missing_index_count, the possibility of empty filtered recommendations due to existing covered indexes, and explicitly warns that neither condition proves no index could improve the query. This is valuable interpretive guidance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main purpose, and each sentence earns its place. The second sentence provides a critical interpretation caveat without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations cover safety, the description sufficiently explains scope, expected results, and a key edge case. It is complete for its complexity and does not need to duplicate structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, so the baseline is 3. The description does not add any parameter-specific semantics beyond the schema (e.g., it doesn't explain database_name or auto_bind_params), and the 'up to 10 queries' limit is already present in the schema's maxItems constraint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('Extract SQL Server missing-index hints from estimated plans') and clearly scopes it to up to 10 queries. The per-query focus distinguishes it from workload-level sibling tools such as analyze_workload_indexes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context is provided: it handles up to 10 queries individually and uses estimated plans. However, it does not explicitly name alternatives or state when not to use this tool, leaving exclusions implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analyze_workload_indexesA
Read-only

Analyze the database workload to identify resource-intensive queries and recommend optimal indexes.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoNumber of top queries to analyze.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoHow far back to look in Query Store, in minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavioral context by explaining that the tool identifies resource-intensive queries and recommends indexes, which gives a clearer idea of what the analysis produces beyond what annotations state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that clearly communicates the tool's purpose without unnecessary words. It is concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a complete parameter schema, annotations for read-only safety, and an output schema present, the description is adequately complete for a read-only analysis tool. It could be slightly more explicit about how it differs from similar index-related siblings, but the overall context is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters (top_n, database_name, window_minutes), each with its own description. The tool description does not add parameter-specific meaning beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: analyze the database workload, identify resource-intensive queries, and recommend optimal indexes. It uses a specific verb and resource, and distinguishes from siblings like analyze_query_indexes by focusing on workload-level analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for workload-level index analysis (e.g., when you need to analyze the overall database workload), but it does not explicitly state when to use this tool versus alternatives like analyze_index_recommendations or optimize_indexes. No exclusions or alternative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

benchmark_index_candidateA
Destructive

Benchmark a leased disposable index in a policy-allowlisted sandbox. Cleanup is automatic and cleanup failures are durable.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesRead-only query measured before and after the index.
phaseNoBenchmark phase: screening or finalist.screening
onlineNo
is_uniqueNo
session_idYesTuning session identifier.
table_nameYesTarget table.
decision_idNo
key_columnsYesOrdered key columns, optionally ASC/DESC.
schema_nameYesTarget schema.
candidate_idYesIndex candidate identifier.
compare_orderNoPreserve ordered-result semantics during A-B-A stability checks.
database_nameNo
lease_minutesNo
idempotency_keyYesCaller-generated key used to fence retries and cleanup.
include_columnsNo
parameter_casesNoThe same named parameter cases recorded on the performance case.
filter_definitionNoOptional filtered-index predicate; no SQL statements or comments.

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds that cleanup is automatic and cleanup failures are durable, which is valuable behavioral context. It doesn't contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each providing distinct value: purpose and cleanup behavior. No redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 17 parameters, an output schema, and multiple phases, the description is high-level but leaves out significant invocation details such as the phase parameter, idempotency key usage, and filter definition. However, the schema and output schema compensate somewhat.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description provides no parameter-level detail; schema covers about 65% of parameters with descriptions, leaving several (online, is_unique, decision_id, database_name, lease_minutes, include_columns) unexplained. The description does not compensate for this gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies 'Benchmark a leased disposable index in a policy-allowlisted sandbox,' clearly identifying the verb (benchmark), resource (index candidate), and sandbox context. This distinguishes it from sibling tools like benchmark_tuning_candidate or benchmark_query_rewrite by focusing on a leased disposable index.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys that this is for benchmarking a temporary index in a safe sandbox, implying a testing use case, but it lacks explicit guidance on when to use versus alternatives like benchmark_tuning_candidate or what prerequisites exist. It also doesn't mention the screening/finalist phases from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

benchmark_query_rewriteA
Read-only

Benchmark a baseline query against a proposed rewrite using the same typed read-only execution path, interleaved actual-plan samples, and complete bounded snapshot equivalence.

ParametersJSON Schema
NameRequiredDescriptionDefault
runsNoScreening executions per side (2-3). Metrics become per-run medians with min/max spread, so a single lucky run cannot masquerade as a win. The workflow does not clear Azure SQL caches.
analyzeNoWhen true, execute both queries to capture actual plans.
rewrite_sqlYesCandidate semantically equivalent rewrite.
baseline_sqlYesOriginal read-only SQL query.
compare_orderNoCompare result rows in returned order. Set false only when the query contract does not require ordering.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
include_raw_xmlNoInclude raw SHOWPLAN XML inline. Defaults to artifact URI only.
parameter_typesNoOptional exact SQL types shared by baseline and rewrite.
auto_bind_paramsNoBind @param placeholders from column statistics where possible.
parameter_valuesNoExplicit parameter values for both baseline and rewrite.

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not restate safety. It adds meaningful behavioral context by explaining the methodology: executing both queries on the same typed read-only path, interleaving actual-plan samples, and verifying complete bounded snapshot equivalence. This goes beyond annotations by disclosing the comparison approach and the nature of the benchmark, though it stops short of detailing every execution side-effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the primary action ('Benchmark') and packs essential details efficiently without redundancy. Every clause adds value, making it appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (10 parameters) and the presence of a detailed schema with 100% coverage, the description is fairly complete. It communicates the core purpose and high-level behavior, but could be more robust by explicitly positioning the tool within the workflow (e.g., when to use versus benchmarking tuning/index candidates). Overall, it provides enough context for an agent to infer when and how to invoke it, especially with the schema's supplementary details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add significant parameter-specific meaning; it refers overall to the benchmarking process rather than individual parameters. The schema already has rich descriptions for all 10 parameters (e.g., 'runs' explains medians, 'analyze' captures plans), so the description's contribution is marginal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb and resource: 'Benchmark a baseline query against a proposed rewrite'. It distinguishes from siblings like 'benchmark_tuning_candidate' and 'benchmark_index_candidate' by focusing on query rewrites, and includes specific methodological details (typed read-only path, interleaved plan samples, snapshot equivalence) that define its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is implied: benchmark a rewrite against a baseline. However, there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The description implies usage for query rewrites but does not state 'use this when...' or mention alternatives. The parameter descriptions in the schema provide some conditional guidance (e.g., 'compare_order'), but the main description lacks explicit usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

benchmark_tuning_candidateA
Read-only

Benchmark one rewrite candidate with interleaved, exactly-once samples and snapshot-consistent duplicate-aware result comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
runsNoOptional paired runs per parameter case. Screening is capped by the session screening limit; finalists by the finalist limit.
phaseNoBenchmark phase: screening or finalist.screening
session_idYesTuning session identifier.
decision_idNo
baseline_sqlYesBaseline read-only SQL.
candidate_idYesCandidate identifier.
candidate_sqlYesCandidate read-only SQL.
compare_orderNo
database_nameNo
idempotency_keyNo
parameter_casesNoExact unchanged subset of the performance-case parameter inputs.
prove_equivalenceNoDefaults false for broad screening and true for finalists. Finalists cannot disable full snapshot equivalence.

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and non-destructive, so the bar is lower. The description adds behavioral context by disclosing interleaved exactly-once sampling and snapshot-consistent duplicate-aware result comparison, which explains how execution occurs without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the core action and then specifies the key methodological details. No filler words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 12 parameters and an output schema, the description provides a high-level summary of purpose and method. It doesn't mention required session/candidate identifiers, but those are evident from the schema. The presence of an output schema reduces the need to describe return values. Some context on the benchmarking process is omitted, but the description is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, with most parameters individually described in the schema. The tool description itself does not explain any parameters, but the schema's descriptions for parameters like runs, phase, and prove_equivalence carry that burden. Thus, the description adds no extra parameter semantics but doesn't need to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Benchmark' and identifies the resource as 'one rewrite candidate', distinguishing it from sibling tools like benchmark_index_candidate. It also specifies the methodology (interleaved, exactly-once samples, snapshot-consistent comparison), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates this tool is for benchmarking a single rewrite candidate, which provides context vs. siblings like benchmark_query_rewrite. However, it does not explicitly state when to use this vs alternatives or mention exclusions, so it stops short of full usage guidelines.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

capture_schema_snapshotA
Read-only

Capture a point-in-time schema snapshot for a database.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
schema_filterNoComma-separated schema names to capture. Defaults to all user schemas.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds 'point-in-time' but doesn't explain whether the snapshot is stored, returned, or purely transient. It doesn't contradict annotations, but also doesn't add significant behavioral detail beyond them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-constructed sentence with no redundancy or irrelevant information. It front-loads the action and resource effectively.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich annotations and full parameter documentation, the description is adequate but minimal. It leaves open the exact nature of the snapshot (return vs. persistence) and doesn't tie into its workflow context relative to sibling tools like compare_schemas. The presence of an output schema likely covers return details, but the description alone is sparse.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters (database_name and schema_filter) already documented. The description adds no extra parameter context, so it neither enhances nor detracts from the schema's clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Capture') and a clear resource ('schema snapshot for a database'), with the qualifier 'point-in-time' adding precision. This distinguishes it from sibling tools like list_schemas or compare_schemas, making the tool's purpose immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There is no mention of alternatives, prerequisites, or typical scenarios, leaving the agent to infer usage context from the name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_capabilitiesA
Read-onlyIdempotent

Probe Azure SQL capabilities and permission-sensitive features for a database.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description only adds 'probe' and 'permission-sensitive features,' which aligns with the read-only nature but does not disclose additional behavioral details like exact checks performed or permission requirements, providing minimal value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant or filler content. Every word contributes to conveying the tool's core purpose, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter, strong safety-related annotations, and an output schema, the description is minimally adequate. However, it does not explain what specific capabilities or permission-sensitive features will be probed, leaving some ambiguity about the tool's exact coverage. This represents a clear but tolerable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema contains a single parameter (database_name) with a complete description and default value, achieving 100% schema description coverage. The tool description does not add meaning to the parameter, but since the schema already documents it fully, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Probe') and resource ('Azure SQL capabilities and permission-sensitive features') tied to a database. This distinguishes it from sibling diagnostic tools, which focus on performance, indexes, or schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need to inspect database capabilities or permission-sensitive features, but it does not explicitly state when to use this tool versus alternatives or provide exclusions. Since context is clear but no alternatives are mentioned, it falls at the baseline for implied guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_equivalence_preflightA
Read-onlyIdempotent

Analyze direct SQL and recursively resolved view definitions for semantic-equivalence proof risks without returning raw definitions.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesRead-only SQL to inspect, including referenced view definitions.
database_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes
functionsYes
risk_codesYes
analysis_scopeYes
classificationYes
contract_versionYes
coverage_completeYes
resolved_dependenciesYes
unresolved_dependenciesYes
direct_snapshot_supportedYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, idempotent, and non-destructive hints. The description adds value by disclosing that it does not return raw definitions, only analysis, and notes recursive view resolution, which are behavioral traits beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that conveys purpose, scope, and key behavioral constraint without unnecessary words. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 does not need to explain return values. It covers purpose and key behavior. However, it omits any guidance on the optional database_name parameter and does not mention when to use this over alternatives, leaving minor gaps for a tool with two parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (sql described, database_name not). The description mentions 'direct SQL' and 'recursively resolved view definitions', which partly aligns with the sql parameter, but it does not clarify the role of database_name or provide any additional meaning for that parameter. The description largely repeats the schema's sql description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verb 'Analyze' with clear objects 'direct SQL and recursively resolved view definitions' and states the goal 'semantic-equivalence proof risks'. It clearly distinguishes from sibling tools that compare results or plans, and the phrase 'without returning raw definitions' adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The term 'preflight' implies use before an equivalence proof or transformation, but the description does not explicitly state when to use this tool versus alternatives like 'compare_query_results' or 'explain_query'. It provides clear context but no exclusions or alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_runtime_statusA
Read-onlyIdempotent

Return DB-free runtime identity, registered-tool capabilities, and contract fingerprints for this MCP server process.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only and idempotent behavior. The description adds valuable context that the tool is 'DB-free', meaning it does not rely on a database connection, and mentions contract fingerprints, which imply a stable and predictable output structure. This goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that front-loads the action ('Return') and lists the three output categories. Every word earns its place, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-argument status tool with a strong annotation set and an output schema (indicated by has_output_schema=true), the description provides all necessary context: what is returned and that it is server-process-scoped. No additional details are needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema description covers 100% trivially. There is no parameter complexity to explain. The baseline of 4 applies here as the description correctly focuses on the return payload rather than parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns specific items: runtime identity, registered-tool capabilities, and contract fingerprints. The verb 'Return' is specific, and the scope 'for this MCP server process' distinguishes it from sibling tools like check_capabilities, which likely only covers capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as check_capabilities or other status-related tools. The description implies general runtime status checking but does not state explicit use cases, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_statistics_healthA
Read-onlyIdempotent

Check statistics health: stale stats, high modification counts, low sample rates. Flags stats needing UPDATE STATISTICS.

ParametersJSON Schema
NameRequiredDescriptionDefault
stale_daysNoFlag stats not updated in this many days.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
mod_pct_thresholdNoFlag stats where modification_counter exceeds this % of rows.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only, idempotent, and non-destructive, so the description only needs to add behavioral context. It specifies the health criteria (stale, high modification, low sample rates) and the flagging outcome, which is useful but doesn't go beyond what annotations and schema already cover. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that packs the purpose, criteria, and outcome efficiently. No redundant words, front-loaded with the action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is well-covered by annotations (read-only) and an output schema. The description adds the core logic of the health check. It could mention that it doesn't modify anything, but annotations already handle that. It's complete for a diagnostic tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with descriptions for all three parameters. The tool description mentions 'stale stats' and 'high modification counts' which map to stale_days and mod_pct_threshold, but doesn't add extra meaning beyond the schema. The 'low sample rates' check is not parameterized but is a behavioral detail, not a param semantic.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's purpose as checking statistics health by examining stale stats, high modification counts, and low sample rates, and it flags stats needing update. This is specific enough to distinguish from generic stats retrieval, though it doesn't explicitly contrast with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (when you need to assess statistics health before updating), but it does not explicitly state alternatives or exclusions. The presence of siblings like get_table_stats and analyze_db_health implies alternatives, but the description doesn't reference them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

collect_performance_evidenceA
Read-only

Collect Azure SQL resource, Query Store, wait, blocking, statistics, parameter-sensitivity, and regression evidence for a performance case.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesThe same baseline SQL used to create the case.
case_idYesPerformance case identifier.
decision_idNo
database_nameNo
execute_queryNoCapture one actual-plan sample. Requires database benchmark policy.
parameter_caseNoFor active evidence on parameterized SQL, one named case containing an exact values object and exact SQL types object.
window_minutesNo
idempotency_keyNo
query_store_query_idNoOptional exact Query Store query_id. It must match any identity already stored on the performance case.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows the tool is safe and read-only. The description adds no behavioral details beyond listing evidence types; it does not disclose potential execution of the query when execute_query=true or require special policies. With annotations covering the safety profile, the description provides minimal additional value, so a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence: 'Collect Azure SQL resource, Query Store, wait, blocking, statistics, parameter-sensitivity, and regression evidence for a performance case.' It is concise, contains no fluff, and efficiently conveys a large amount of scope information. Every word earns its place, making it highly scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 9 parameters, an output schema, and a clear relationship to a performance-case workflow. The description gives the high-level purpose but omits contextual details such as the connection to start_performance_case, the general output structure, or how the evidence categories relate. The output schema and annotations reduce the burden, but for a tool of this complexity, the description leaves notable gaps, earning a 3.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 56%, meaning several parameters (decision_id, database_name, window_minutes, idempotency_key) have no description in either the schema or the main description. The description itself does not explain any parameter semantics and fails to compensate for the uncovered parameters. Even for covered parameters, the description adds no contextual meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Collect' and names a specific resource ('evidence') with an enumerated list of evidence categories: Azure SQL resource, Query Store, wait, blocking, statistics, parameter-sensitivity, and regression. It explicitly ties the action to 'for a performance case', which distinguishes it from sibling tools that target individual diagnostics (e.g., get_wait_stats, detect_parameter_sniffing). This makes the tool's purpose and scope immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates the tool is for gathering comprehensive evidence in the context of a performance case, implying it is the umbrella collection tool. However, it does not explicitly state when to prefer this over the more specialized sibling tools, nor does it mention exclusions. The context is clear but lacks explicit alternative guidance, so it earns a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_plan_summariesA
Read-onlyIdempotent

Compare arbitrary redacted execution-plan summaries and sourced metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNo
baseline_summaryYesBaseline plan summary.
candidate_summaryYesCandidate plan summary.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds minimal behavioral context beyond naming the inputs (e.g., 'redacted' suggests the summaries are sanitized), but it does not disclose output details, performance implications, or potential side effects. Since annotations cover the key traits, a mid-range score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the core action and inputs. There is no fluff, redundant information, or repeated schema content. It earns a top score for clarity and brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While an output schema exists to document return values, the description does not explain the comparison's purpose or use cases, nor does it clarify when to choose this tool over similar siblings. It also leaves database_name's meaning ambiguous. Given the tool's moderate complexity and the availability of an output schema, the description is minimally adequate but lacks useful context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, with baseline_summary and candidate_summary having brief descriptions ('Baseline plan summary.'), but database_name lacks any description. The tool description adds context about what the summaries contain ('execution-plan summaries and sourced metrics'), helping agents understand the input objects' purpose, but it does not clarify the role of database_name. This partial compensation over the schema's sparse parameter info earns a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Compare') and clearly identifies the target resources ('arbitrary redacted execution-plan summaries and sourced metrics'). This distinguishes it from sibling tools like compare_query_plans, which focus on raw query plans, and compare_schemas, which focus on schema objects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as compare_query_plans or compare_query_results. It does not state prerequisites, exclusions, or typical use cases, leaving the agent to infer appropriate usage from the name and description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_query_plansA
Read-onlyIdempotent

Compare two query plans side-by-side: operators, duration, CPU, I/O. If plan IDs not specified, compares best vs worst plan by duration.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_idYesQuery Store query_id.
plan_id_aNoFirst plan_id to compare (optional, uses best by default).
plan_id_bNoSecond plan_id to compare (optional, uses worst by default).
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat safety. It adds valuable behavioral context by specifying the default comparison logic (best vs worst plan by duration) and listing the exact metrics included in the comparison. This enriches the annotation coverage without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences and gets straight to the point. The first sentence states the main action and outputs; the second adds the important default behavior. No filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, the description covers the core purpose, default behavior, and comparison metrics. The output schema exists, so return values are handled separately. It could mention that both plans must belong to the same query_id or how to use one plan ID, but these are implied by the schema and not major gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by clarifying that the 'best' and 'worst' plan defaults are determined specifically by duration, which is not stated in the parameter descriptions. This adds meaningful context for how plan_id_a and plan_id_b behave when omitted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Compare') and resource ('two query plans side-by-side') and lists concrete comparison dimensions (operators, duration, CPU, I/O). It clearly distinguishes from sibling tools like compare_query_results (which compares result sets) and compare_plan_summaries (which likely summarizes plans). The additional note about defaulting to best vs worst plan by duration further clarifies purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: you use this when you need a side-by-side comparison of two query plans with specific metrics. It also explains the default behavior when plan IDs are omitted. However, it does not explicitly mention when not to use it or name alternatives like compare_plan_summaries, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_query_resultsA
Read-only

Compare two read-only query results in one snapshot. The result is proven only when the complete bounded results, duplicates, shape, and required order match.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseline_sqlYesBaseline read-only SQL.
candidate_sqlYesCandidate read-only SQL.
compare_orderNo
database_nameNo
parameter_caseNoRequired for parameterized SQL: one named case with exact values and declared SQL types for every parameter.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the annotations (readOnlyHint=true, destructiveHint=false) by specifying that results are proven only when complete bounded results, duplicates, shape, and required order match. This clarifies the strictness of comparison, which is valuable and does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the primary action, and every word contributes meaningful information. There is no redundant or irrelevant text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and annotations, the description sufficiently conveys the tool's purpose and success criteria. Minor gaps remain (e.g., what 'bounded results' means), but overall it is adequate for a tool with this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not mention any parameters or their semantics. Schema coverage is 60%, with some parameter descriptions present, but the tool description adds no value for understanding parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool compares two read-only query results in one snapshot. It specifies the exact criteria for proof (complete bounded results, duplicates, shape, and required order), which distinguishes it from sibling tools like compare_query_plans and compare_schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys clear context: use for comparing read-only query results, and the strict matching criteria imply when results are considered equivalent. It does not explicitly name alternatives or exclusions, but the specificity of 'query results' adequately separates it from schema or plan comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_schemasA
Read-only

Compare schemas between two databases and return all differences.

ParametersJSON Schema
NameRequiredDescriptionDefault
schema_filterNoComma-separated schema names to compare. Defaults to all user schemas.
source_databaseYesSource database name.
target_databaseYesTarget database name.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that it returns all differences, but does not disclose what types of differences are included (e.g., tables, views, permissions) or any performance implications. Minimal additional behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, clearly stating the action and expected output. It is efficiently structured and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, full schema documentation, read-only annotations, and presence of an output schema, the description is adequate. It could be slightly more detailed about the scope of differences, but the schema_filter parameter already covers which schemas are compared, so there is no major gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for source_database, target_database, and schema_filter. The description does not mention parameters or add any insight 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'compare' with a clear resource ('schemas between two databases') and an explicit outcome ('return all differences'). This clearly distinguishes it from sibling tools like capture_schema_snapshot or generate_migration_script.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, exclusions, or typical use cases, and there is no reference to sibling tools that could serve similar purposes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_handoffB
Idempotent

Create a durable, redacted cross-skill learning handoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
gapsYesKnown unresolved gaps.
case_idNo
objectiveYesRedacted handoff objective.
session_idNo
constraintsYesSafety and scope constraints.
source_skillYesMaintained skill creating the handoff.
target_skillYesMaintained skill expected to accept it.
database_nameNo
evidence_refsYesImmutable evidence identifiers.
idempotency_keyNo
acceptance_criteriaYesEvidence-backed completion criteria.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly=false, destructive=false, and idempotent=true. The description adds 'durable' and 'redacted' as behavioral traits, which is useful context beyond the annotations, but it does not detail side effects, error behavior, or return value characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word contributes to the core meaning, and the key verb 'Create' appears immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 11 parameters, 7 required, and nested objects, a one-sentence description is insufficient. While an output schema exists, the description does not clarify the role of a handoff in the broader workflow or how this tool relates to sibling tools like resolve_handoff and get_handoff.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-level meaning beyond what the schema provides. With only 64% schema description coverage, parameters like idempotency_key, session_id, and database_name remain under-explained, and the description does not compensate for these gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and the resource ('cross-skill learning handoff'), and adds distinguishing attributes ('durable, redacted'). It differentiates from sibling tools like get_handoff and resolve_handoff, though the exact nature of a 'handoff' is not elaborated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as resolve_handoff or get_handoff, nor any workflow context. The description only restates the tool's basic action without explaining prerequisites or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_parameter_sniffingA
Read-onlyIdempotent

Detect parameter sniffing: queries with multiple plans where MAX(avg_duration) / MIN(avg_duration) exceeds threshold (default 10x).

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoMax number of results.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoQuery Store lookback window in minutes (default 24 hours).
variance_thresholdNoMin ratio of worst/best plan duration to flag (e.g., 10 = 10x worse).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only, idempotent, and non-destructive, so the description's lack of such details is acceptable. The description adds the detection algorithm (ratio threshold) but does not disclose dependencies (e.g., Query Store availability) or return format. This is adequate but not especially rich beyond the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that front-loads the core concept and detection logic. It avoids filler and is highly efficient for an agent scanning tool descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a clear algorithm, full schema coverage, and strong annotations, the description is nearly complete for a read-only diagnostic tool. It could note prerequisites like 'requires Query Store' but otherwise the agent has enough context to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters are described in the schema (100% coverage), so the description adds little beyond what is already available. The mention of 'default 10x' mirrors the schema's 'variance_threshold' description, providing no new semantic insight. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 detect parameter sniffing by identifying queries with multiple plans where the ratio of MAX to MIN average duration exceeds a threshold. This specific metric distinguishes it from sibling tools like 'detect_regressed_queries' or 'get_query_parameter_buckets', which focus on different aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when parameter sniffing is suspected, but it does not explicitly state when to prefer this tool over alternatives, nor does it mention any exclusions or prerequisites. The usage context is only weakly implied by the tool's name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_regressed_queriesA
Read-onlyIdempotent

Surface automatic tuning regression recommendations from sys.dm_db_tuning_recommendations with plan forcing scripts.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoQuery Store lookback window in minutes (default 24 hours).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering safety. The description adds value by naming the specific DMV (sys.dm_db_tuning_recommendations) and the nature of the output (plan forcing scripts), giving the agent a clearer picture of behavior beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that is under 20 words and directly states the action and resource. No filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and read-only annotations, the description covers the essential behavioral context: it surfaces recommendations from a specific DMV and provides scripts. It is complete enough for a simple diagnostic tool, though it could mention prerequisites like automatic tuning being enabled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both database_name and window_minutes have descriptions). The tool description adds no further parameter-specific context; it merely provides the overall purpose, so it meets the baseline but doesn't exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Surface' and clearly identifies the resource: automatic tuning regression recommendations from sys.dm_db_tuning_recommendations, including plan forcing scripts. This distinguishes it from siblings like get_top_queries or tune_query, though it doesn't explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus alternatives such as get_top_queries, plan_health_review, or detect_parameter_sniffing. The description states what it does but not the intended scenario or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dry_run_plan_actionB
Idempotent

Preview an exact reversible Query Store force/unforce action and record an audit entry without executing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes'force' or 'unforce'.
plan_idYesQuery Store plan_id.
query_idYesQuery Store query_id.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description states 'record an audit entry,' implying a non-idempotent side effect, directly contradicting the annotation idempotentHint=true. This creates an inconsistency between the described behavior and the structured metadata, so a score of 1 is warranted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the primary action, and every clause adds meaningful info (preview, reversibility, audit entry, non-execution). No redundancy or padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values are covered. However, the description lacks explicit when-to-use guidance and does not resolve the idempotency contradiction. For a dry-run tool among many related siblings, this is adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter already described in the schema. The description adds no additional meaning to parameters (e.g., what 'force' or 'unforce' values do in the preview context), 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Preview') and clearly names the resource and action ('Query Store force/unforce action'), and differentiates from siblings by stating 'without executing it.' It also notes the audit entry recording, which separates it from other preview or analysis tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage as a non-executing preview, but does not explicitly state when to use it over alternatives like prepare_plan_action or execute_sql. No exclusions or alternative tool references are provided, so guidance remains implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_sqlA
Read-only

Execute statically validated, row-capped read-only SQL. The query may be preceded by DECLARE @var and SET @var = ... statements, followed by exactly one SELECT. DML, DDL, dynamic SQL, and stored procedure execution are always rejected.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesRead-only SQL to execute.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (which already indicate read-only and non-destructive), the description adds significant behavioral details: statically validated, row-capped, allowed DECLARE/SET prefixes, exactly one SELECT, and rejection of non-read-only constructs. This enriches the agent's understanding of invocation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise—two sentences—and front-loaded with the primary action, followed by critical constraints. Every sentence contributes valuable information without redundancy, achieving an optimal length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (SQL execution with validation and constraints), the description is complete for an agent to understand its capabilities and limitations. It covers allowed SQL forms, rejected operations, and row capping. Since an output schema exists, return values do not need elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the schema already describes both parameters (sql and database_name), the description adds semantic nuance about the sql parameter by specifying the accepted query structure (optional DECLARE/SET followed by exactly one SELECT). This goes beyond the schema's 'Read-only SQL to execute' and aids correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Execute statically validated, row-capped read-only SQL', specifying the verb 'execute' and the resource 'SQL' with explicit constraints. It distinguishes itself from sibling tools by emphasizing read-only, row-capped execution, which is unique among the listed tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that this tool is for read-only SQL execution and explicitly lists what is rejected (DML, DDL, dynamic SQL, stored procedures). However, it does not name alternative tools or offer explicit 'when to use vs. alternatives' guidance, though the exclusions imply when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_queryA
Read-only

Generate an estimated or actual execution plan for a read-only SQL query.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesRead-only SQL query to explain.
analyzeNoWhen true, executes the query and returns an actual plan.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
include_raw_xmlNoWhen true, includes raw SHOWPLAN XML inline. Defaults to False; use raw_xml_resource_uri for token-safe retrieval.
parameter_typesNoOptional declared SQL types keyed by parameter name, for example {'CustomerId': 'bigint'}. Supply exact types for faithful compilation.
auto_bind_paramsNoWhen true, automatically detects @param placeholders and binds them using column statistics or type-based fallback values.
parameter_valuesNoOptional JSON parameter values keyed by name (for example {'CustomerId': 42}). Values are passed as driver parameters and are not returned in the response.
hypothetical_indexesNoReserved for future use. Hypothetical index analysis is disabled on this read-only tool for safety.

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the 'estimated or actual' execution plan mode, which is useful, but it does not mention that analyze=true will actually execute the query or any other side effects beyond safety. This is a minor addition over what annotations and the schema already convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence without redundant words. It front-loads the verb and resource and is appropriately sized for the tool's simplicity at a high level.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema (100% coverage), clear annotations, and presence of an output schema, the description suffices to orient an agent toward the tool's core purpose. It does not summarize advanced parameters like parameter binding or raw XML, but these are fully documented in the schema, so the description does not need to carry that burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%—every parameter has a detailed description. The main description does not add parameter-specific meaning beyond the 'read-only' qualifier, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Generate') and resource ('execution plan') with a clear scope ('for a read-only SQL query'). It distinguishes the tool from siblings like execute_sql (which executes queries) and plan cache tools that retrieve existing plans.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for read-only queries and plan analysis, but it does not explicitly state when to use this tool vs alternatives such as execute_sql or get_plan_cache_analysis. There are no exclusions or alternative tool references, only the 'read-only' qualifier as a soft usage signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

finalize_tuning_sessionB
Read-onlyIdempotent

Finalize a tuning session with the winning candidate, complete leaderboard, rejected experiments, and explicit stopping reason.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesTuning session identifier.
decision_idNo
database_nameNo
idempotency_keyNo
selection_scopeNoSelect proven finalists by default. performance_only is an explicit opt-in and never asserts semantic equivalence.proven
stopping_reasonYesWhy the optimizer stopped.
selected_candidate_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes

TDQS

B3.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotation contradiction: the description says 'Finalize a tuning session,' implying a state-changing write operation, while annotations declare readOnlyHint=true and idempotentHint=true. This is a direct contradiction. The description also fails to disclose any side effects, such as marking the session as complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every phrase adds meaningful content about the finalization process.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema and annotations, the description is incomplete due to the annotation contradiction and the lack of explanation for several parameters. The tool uses decision_id and idempotency_key, but the description does not clarify when they are required or how they affect the finalization.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 43%, with 4 of 7 parameters lacking descriptions. The description hints at 'winning candidate' and 'stopping reason' but does not clarify decision_id, database_name, idempotency_key, or the meaning of 'complete leaderboard.' The idempotency_key parameter is never mentioned despite the idempotentHint annotation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with the specific verb 'Finalize' and identifies the resource as a tuning session. It lists key elements (winning candidate, leaderboard, rejected experiments, stopping reason), which distinguishes it from sibling tools like start_tuning_session or add_tuning_candidate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the concluding step in a tuning workflow, but it does not explicitly state when to use it, what prerequisites exist, or how to choose between this and related tools. There are no alternative suggestions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_migration_scriptA
Read-only

Generate a T-SQL migration script to transform source schema to match target.

ParametersJSON Schema
NameRequiredDescriptionDefault
schema_filterNoComma-separated schema names to compare. Defaults to all user schemas.
source_databaseYesSource database name.
target_databaseYesTarget database name.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that it generates a script (not executes it) and includes the T-SQL language, which is useful context. However, it does not disclose details such as how schema_filter affects behavior or whether the script is returned as text. It does not contradict annotations, and the added value is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly worded sentence that conveys the core functionality in under 15 words. There is no redundant phrasing or filler. Every word contributes to the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple (3 parameters, one optional) and has an output schema. However, the description does not clarify what kind of output to expect (e.g., a script string, file path) or how the optional schema_filter narrows the generated script. While not critical, this missing context prevents a higher score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema coverage is 100%, with each parameter having a basic description. The tool description adds no extra meaning beyond the schema; it only reiterates the overall transformation goal. This matches the baseline of 3 where the schema carries the parameter documentation weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific action verb ('Generate') with a concrete resource ('T-SQL migration script') and a clear goal ('transform source schema to match target'). This unambiguously distinguishes it from sibling tools like compare_schemas, which only compares schemas without generating scripts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., need to run compare_schemas first) or situations where it should be avoided. The intended usage is only implied by the name and generic purpose, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_active_sessionsA
Read-only

List active sessions and running queries, including blocking information.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum sessions to return (longest-running first, max 1000).
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds minimal behavioral context (e.g., includes blocking information) but does not disclose ordering, pagination, snapshot semantics, or performance implications. This is acceptable given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 11 words, front-loaded with the action and resource. There is zero waste and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, full parameter schema coverage, and existing annotations, the description is largely sufficient. The lack of usage guidance is a minor gap but does not significantly impair selection or invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters having descriptions in the schema. The tool description adds no parameter-level detail beyond what the schema provides, so the baseline score is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and identifies a clear resource ('active sessions and running queries') with a useful qualifier ('including blocking information'). It distinguishes from sibling tools like get_wait_stats or get_lock_details by focusing on sessions and queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions, prerequisites, or alternative tool suggestions, which is a notable gap given the large set of sibling monitoring tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cached_routine_statsA
Read-onlyIdempotent

Get cached stored procedure and UDF execution statistics. Returns bounded routine metrics and missing-index flags without raw plan XML.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum routines per section.
sort_byNoSort by execution_count, total_worker_time, avg_worker_time, total_elapsed_time, avg_elapsed_time, total_logical_reads, total_physical_reads, or total_logical_writes.total_worker_time
routine_typeNoRoutine type: all, procedure, or function.all
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, but the description adds useful behavioral context: results are 'bounded' (limiting output size) and include 'missing-index flags' while excluding raw plan XML. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence that front-loads the core purpose and immediately follows with key differentiators. No filler or redundancies; every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema available and comprehensive annotations, the description fully covers the essential purpose, scope (cached routines), and notable constraints (bounded results, no raw plan XML). It is sufficiently complete for a read-only stats tool of this simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage for all parameters, including defaults and allowed sort values. The description itself does not add parameter-specific meaning beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool 'Get cached stored procedure and UDF execution statistics', identifying both the action (get) and the resource (cached routine stats). The additional clause 'Returns bounded routine metrics and missing-index flags without raw plan XML' differentiates it from sibling tools that return raw plan XML or focus on other cache aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implied usage: the description indicates this tool is for routine-level execution metrics and missing-index flags, with the phrase 'without raw plan XML' hinting at a distinction from plan-returning tools. However, it does not explicitly name alternatives or state when to prefer this tool over siblings like get_top_cached_queries or get_plan_cache_analysis.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_connection_diagnosticsA
Read-only

Get connection diagnostics: connection counts by client IP, session summary, and optional bounded input-buffer text for current database sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows per detail section.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
include_input_bufferNoInclude sys.dm_exec_input_buffer details when available. This can expose sensitive SQL text and literals, so it is disabled by default.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds meaningful behavioral context: it specifies a 'bounded' input-buffer (limit), scopes to 'current database sessions,' and notes the optional nature of sensitive input-buffer data. This goes beyond basic annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the tool's purpose ('Get connection diagnostics') and then lists the key deliverable components in a compact list. Every word earns its place, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a read-only diagnostic with no required parameters, and the description covers the main output areas. An output schema exists, so return-value documentation is not needed here. However, the description does not mention the default limit or the database_name default, which are minor context omissions that do not prevent effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter already having a detailed description (e.g., 'Include sys.dm_exec_input_buffer details...'). The tool description adds minimal parameter-specific meaning beyond that, so a baseline of 3 is appropriate. It does not compensate for any schema gaps because there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('connection diagnostics'), then enumerates specific output components: connection counts by client IP, session summary, and optional bounded input-buffer text. This level of detail distinguishes it from sibling tools like get_active_sessions or get_connection_pool_stats, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a use case by detailing what diagnostics are returned (connection counts, session summary, input-buffer text), but it does not explicitly state when to use this tool over siblings or mention exclusions/alternatives. The context is enough to infer usage, but explicit guidance is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_connection_pool_statsA
Read-only

Get MCP server connection pool statistics: per-database acquire/release/discard counts, peak utilization, and possible connection leaks. Diagnoses MCP-side slowness without touching the database.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable context beyond annotations: it specifically scopes the operation to MCP-side (not touching the database) and mentions leak detection. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Exactly two compact sentences. The first sentence packs the core purpose and key metrics; the second adds the use case and safety guarantee. No filler or redundancy – every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter diagnostic tool with an output schema, the description is complete: it states what it does, what metrics it reports, and when it should be used. The output schema handles return value detail, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description appropriately does not attempt to document nonexistent parameters and instead focuses on output semantics, which is correct for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a specific verb+resource ('Get MCP server connection pool statistics') and enumerates exact metrics (per-database acquire/release/discard counts, peak utilization, possible leaks), clearly distinguishing it from database-side diagnostic tools. The scope is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Diagnoses MCP-side slowness without touching the database' provides clear context for when to use this tool (MCP-side performance issues) and a safety consideration, but it does not explicitly name alternatives or exclusion criteria. This fits the 'clear context, no exclusions' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_currently_waiting_tasksA
Read-only

Get currently waiting tasks right now — real-time view of what is blocked from sys.dm_os_waiting_tasks with SQL text and wait category.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true and destructiveHint=false, safety is already covered. The description adds context by specifying the DMV source and the result contents (SQL text, wait category), and clarifies the real-time nature, providing value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that effectively communicates action, source, and key output. No information is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and an output schema, the description adequately conveys the purpose and data source. It doesn't need to explain return values because an output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the single optional database_name parameter with its default value, so the description does not need to add parameter details. The description also does not mention parameters, but the schema coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: getting currently waiting tasks in real time, sourced from sys.dm_os_waiting_tasks, with SQL text and wait category. This is specific enough to distinguish from historical wait stats tools like get_wait_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'right now — real-time view' implies this tool is for immediate, current wait information, but the description does not explicitly state when to prefer it over siblings like get_wait_stats or get_query_wait_stats, nor does it mention alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_database_configurationA
Read-onlyIdempotent

Get Azure SQL database configuration inventory: version, read-only instance settings, database properties, scoped configurations, Query Store, automatic tuning, geo-replication links, and Azure DB properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the tool's safety profile is known. The description adds a detailed scope of what the inventory covers (Query Store, automatic tuning, geo-replication links, etc.), which provides useful context beyond the annotations. However, it does not disclose any additional behavioral traits such as permission requirements, potential result size, or execution cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that opens with the primary action and resource, then efficiently enumerates the specific configuration categories. It is front-loaded, free of repetition, and every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional parameter), rich annotations, and the presence of an output schema, the description adequately covers what the tool does by listing the exact configuration domains it retrieves. There is no need to explain return values or behavioral nuances beyond what the annotations and output schema already provide.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter database_name is fully described in the schema (optional, defaults to AZURE_SQL_DEFAULT_DATABASE). The tool description adds no extra parameter-related meaning, so the schema carries the full weight. With 100% schema_description_coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' with the resource 'Azure SQL database configuration inventory' and enumerates detailed sub-categories (version, read-only instance settings, database properties, etc.). This clearly distinguishes it from sibling tools like get_object_details (which focuses on objects) and check_runtime_status (which focuses on runtime health).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly communicates that this tool returns a database configuration inventory. While it does not explicitly state when not to use it or name alternatives, the context is unambiguous: it is the go-to tool for fetching configuration-related details. There are no exclusions or alternative mentions, but the usage intent is strongly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_deadlock_historyA
Read-onlyIdempotent

Get recent deadlock history from system_health extended events session. Parses deadlock XML to show victim, participants, resources, and SQL text.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_eventsNoMaximum number of deadlock events to return.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful context about the data source (system_health session) and output parsing, but does not disclose potential limitations such as session unavailability or permission requirements. Given the annotation coverage, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences and front-loaded with the main action ('Get recent deadlock history'). Every word adds value, with no redundancy or filler. This is an example of a well-structured, concise tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the existing output schema, and the strong annotation hints, the description provides enough context to select and invoke the tool correctly. It clearly identifies the data source and the information returned, making it complete for its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters (max_events and database_name), so the schema already explains their meaning. The description does not add parameter-specific semantics beyond what is already present, and the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves deadlock history from system_health extended events and parses XML to show victim, participants, resources, and SQL text. This specific verb+resource combination distinguishes it from other diagnostic siblings like get_wait_stats or get_active_sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when investigating deadlocks and provides clear context about the source and output. It does not explicitly list exclusions or alternatives, but the tool is unique enough among siblings that the context is sufficient without them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dependenciesA
Read-onlyIdempotent

Get dependency graph for a database object: what it references and what references it.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesObject name.
schema_nameYesSchema name.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, idempotent operation with no destructive side effects. The description adds the important behavioral detail that the dependency graph includes both inbound and outbound references, which clarifies the scope of the result beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence, front-loaded with the action and object. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a simple purpose, a complete parameter schema, an output schema, and robust annotations, the description fully covers the tool's intended use. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters are fully described in the schema (schema_name, object_name, database_name with default). The description adds no additional parameter semantics, but the schema coverage is 100%, so a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and identifies the resource as 'dependency graph for a database object,' then clarifies the bidirectional nature. This distinguishes it from sibling tools like get_object_details and list_objects, which likely retrieve different object metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear context: use this tool to retrieve dependency relationships. However, it does not explicitly mention alternatives or conditions when this tool should be preferred over similar 'get' tools, though the sibling list includes get_object_details which could overlap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_forced_plansB
Read-onlyIdempotent

List all forced plans with execution stats and staleness warnings. Identifies forced plans that haven't executed recently or have force failures.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoQuery Store lookback window in minutes (default 24 hours).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds context that the tool identifies recently unexecuted forced plans and force failures, which is helpful behavioral context about the output. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the primary action and immediately adding value about what is identified. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the main purpose and output focus (execution stats, staleness, failures). With read-only annotations and optional parameters, it is reasonably complete for a read-only list tool. However, it lacks any usage context relative to the many sibling plan analysis tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides descriptions for both optional parameters (database_name and window_minutes) with defaults and constraints, so schema coverage is 100%. The description does not add additional parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and identifies the resource as 'forced plans' with detail about execution stats and staleness warnings. It is clear but does not explicitly distinguish from sibling tools like plan_health_review or review_plan_enforcement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It only states what the tool does, leaving the agent to infer appropriate use from the sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_handoffA
Read-onlyIdempotent

Read one scoped durable cross-skill learning handoff.

ParametersJSON Schema
NameRequiredDescriptionDefault
handoff_idYesHandoff identifier.
database_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior, so the description adds limited behavioral context. It introduces the concepts of 'scoped', 'durable', and 'cross-skill learning', which describe the nature of the resource, but it does not disclose what happens on missing IDs, error handling, or the role of the optional database_name scope. The description adds some context beyond annotations but remains thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that front-loads the verb and resource. Every word adds meaning, particularly the qualifiers 'scoped', 'durable', and 'cross-skill'. There is no fluff or repetition of structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with an output schema and clear annotations, the description is mostly adequate. However, it lacks guidance on when to use it relative to siblings and does not elaborate on the meaning of 'scoped' or how database_name factors in. The minimalism leaves some gaps for a new agent, especially with a schema that has an undocumented parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (only handoff_id has a description). The tool description does not explain handoff_id beyond being an identifier or clarify what database_name does. The word 'scoped' vaguely hints at a scope concept, but it does not tie to the parameters. It fails to compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Read'), names the resource ('handoff'), and includes scope qualifiers ('one', 'scoped', 'durable', 'cross-skill learning'), clearly distinguishing this from sibling tools like create_handoff and resolve_handoff. It is unambiguous and focused.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: fetch a single handoff by identifier. However, it does not explicitly state when to use this tool versus alternatives (e.g., list_learning_candidates or resolve_handoff), nor does it provide exclusions or prerequisites. The 'Read one' phrasing gives minimal guidance but lacks explicit direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_io_statsA
Read-onlyIdempotent

Get per-file I/O stats: read/write latency, throughput, stall times. Warns when average latency exceeds 20ms threshold.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds behavioral context beyond these by specifying that it warns when average latency exceeds a 20ms threshold, which is useful for setting expectations. This additional detail justifies a score above the annotation-only baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, immediately states the core purpose, and includes only relevant detail (the warning threshold). There is no redundancy or filler, making it appropriately concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one optional parameter, rich annotations, and an output schema, so the description need not explain return values. It covers purpose and a key behavioral detail, making it adequately complete for an agent to select and invoke correctly. Slight gap: no mention of output granularity (per-file vs aggregated), but this is not critical given the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents the only parameter (database_name) with a description and default value, so the description adds no further parameter-specific information. Schema coverage is 100%, meeting the baseline for this dimension.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Get') and resource ('per-file I/O stats'), enumerating key metrics (read/write latency, throughput, stall times). This distinguishes it from sibling tools like get_wait_stats which focus on waits, and get_storage_diagnostics which focus on storage-level issues.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for investigating I/O performance by listing relevant metrics and mentioning a warning threshold, but it does not explicitly state when to prefer this tool over alternatives or provide exclusions. With many diagnostic siblings, clear guidance would be valuable, but the context is implicitly understood.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_lock_detailsA
Read-only

Get current lock details from sys.dm_tran_locks with owning session, lock mode (S, X, IX, IS, U, Sch-M), resource type, and SQL text.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum lock rows to return (waiting locks first, max 1000).
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint false, covering safety. The description adds that it queries a specific DMV and includes lock modes and SQL text, giving useful context, but does not mention ordering, pagination, or performance implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the purpose and lists the key output fields without unnecessary detail. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and complete parameter descriptions, the tool is largely self-explanatory. It could benefit from a brief usage note or alternative pointer, but it is sufficiently complete for a simple read-only diagnostic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters (limit, database_name) are fully described in the schema with defaults and semantics. The description does not add any parameter-specific meaning beyond what the schema provides, so it earns the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'get' and names the exact resource (lock details from sys.dm_tran_locks) along with the fields returned. This clearly distinguishes it from sibling diagnostics like wait stats or active sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as get_currently_waiting_tasks or get_wait_stats. The description only states what it does, leaving the agent to infer when it is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_memory_grantsA
Read-only

Get active and pending memory grants. Identifies queries waiting for memory (RESOURCE_SEMAPHORE) and queries likely spilling to tempdb.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral context: it specifically surfaces queries waiting on RESOURCE_SEMAPHORE and those likely spilling to tempdb. This goes beyond the schema and annotations by clarifying what the query results represent, though it does not discuss return formatting or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences that front-load the primary action and then add specific diagnostic value. There is no unnecessary verbosity or repetition; every clause adds relevant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description sufficiently covers the tool's purpose and key diagnostic dimensions (active/pending, RESOURCE_SEMAPHORE, tempdb spill). It does not explain concepts like 'pending' or how to interpret results, but the output schema and read-only nature make this reasonably complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage for the single optional parameter, including a default behavior description. The tool description adds no additional meaning about the parameter, so it relies on the schema, which is adequate. Baseline 3 is appropriate given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves memory grants, specifically active and pending ones. It also identifies the exact resource types (queries waiting on RESOURCE_SEMAPHORE and likely tempdb spills), making it distinct from sibling tools like get_wait_stats or get_tempdb_usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for diagnosing memory pressure by identifying waiters and tempdb spills, but it does not explicitly mention alternative tools or provide when-to-use versus when-not-to-use guidance. Context is present but indirect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_object_detailsB
Read-onlyIdempotent

Show detailed information about a schema object.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesObject name.
object_typeNoObject type: table, view, procedure, function, or index.table
schema_nameYesSchema name.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds no further behavioral context (e.g., access requirements, output format) but does not contradict the annotations, so a baseline score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single clear sentence with no unnecessary detail. It is appropriately sized and front-loaded, with every word contributing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's relatively low complexity, a one-line description plus a rich schema and annotations might suffice. However, it does not clarify the scope of 'detailed information' or how it relates to other inspection tools, leaving a gap in completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptive parameter definitions, so the schema already explains the parameters. The description adds no additional parameter semantics, which is acceptable given the comprehensive schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Show detailed information about a schema object' clearly indicates a read operation targeting a specific object. It implies a focused lookup, distinguishing it from list or search tools, but does not specify what 'details' include or how it differs from get_table_stats or get_dependencies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. With sibling tools like list_objects, search_objects, and get_table_stats, the absence of usage context leaves the agent to infer the appropriate scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_object_index_diagnosticsA
Read-onlyIdempotent

Get object and index diagnostics: write-heavy nonclustered indexes, read/write usage, buffer footprint, volatile stats, columnstore row groups, index lock waits, and resumable index rebuilds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows per detail section.
table_nameNoOptional table filter.
schema_nameNoOptional schema filter.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, which lowers the bar. The description adds valuable context about the tool's scope by detailing what diagnostics are included, going beyond a simple 'get diagnostics' statement. It does not contradict annotations, and while it omits performance or permission details, the read-only nature is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, efficiently listing the main diagnostic categories with a colon list. It front-loads the core purpose and avoids superfluous wording, though the list is dense. It earns a high score for being concise without losing substance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich output schema, clear annotations, and fully documented parameters, the description does not need to explain return values or parameter usage. It provides a thorough overview of the diagnostic categories, making the tool's function clear. It stops short of explicitly distinguishing from sibling tools, but the core context is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema descriptions cover all four optional parameters (limit, table_name, schema_name, database_name) at 100% coverage. The description does not add any parameter-specific meaning 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a clear action ('Get') and resource ('object and index diagnostics') and enumerates specific diagnostic categories (write-heavy nonclustered indexes, read/write usage, etc.), effectively distinguishing it from broader diagnostic tools. It tells the agent exactly what information to expect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use cases by listing the covered diagnostics, but provides no explicit guidance on when to choose this tool over siblings like analyze_index_recommendations or get_table_stats. No exclusions or alternative tool references are given, so the agent must infer applicability from the list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_open_transactionsA
Read-only

Get open transactions with duration, type (read/write, read-only), log bytes used, and warnings for long-running or idle-in-transaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum transactions to return (oldest first, max 1000).
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds useful context about returned fields and warnings for long-running/idle transactions, but doesn't disclose other behavioral traits such as pagination or rate limits. Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the key action and a concise list of returned information. No filler or repetition, every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing operation with full parameter schema coverage and an output schema present, the description provides sufficient context. The mention of duration, type, and warnings goes beyond minimal, making it complete for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters are fully documented in the input schema with descriptions for limit and database_name, so the description adds no additional parameter semantics. Baseline 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves open transactions and lists specific attributes (duration, type, log bytes used, warnings). The verb 'Get' and specific resource make it distinct among the many sibling diagnostic tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives like get_active_sessions or get_lock_details. It neither specifies intended use cases nor mentions alternative tools, leaving selection to inference from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_performance_caseA
Read-onlyIdempotent

Get a redacted performance case, its evidence envelopes, and event history.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesPerformance case identifier.
database_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable context by noting the case is 'redacted' and includes 'evidence envelopes' and 'event history', giving the agent a sense of the response structure and that sensitive data may be filtered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, succinct sentence that front-loads the main purpose and lists the key return components. No filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and annotations, the description is sufficient for a simple read operation. It covers the main resource and its parts, though it omits information about the database_name parameter and any usage nuances, which are minor gaps for this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 50% (only case_id has a description). The tool description does not add any parameter-level meaning, leaving database_name completely undocumented. Since coverage is not high and the description doesn't compensate, parameter semantics are weak.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the specific resource ('redacted performance case') plus its associated components ('evidence envelopes, and event history'). This distinguishes it from sibling tools like collect_performance_evidence or get_object_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. It does not mention any exclusions or name alternative tools (e.g., for querying a case, use this; for collecting evidence, use collect_performance_evidence). The description only states what it does, not the intended scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_plan_cache_analysisA
Read-onlyIdempotent

Analyze plan cache: plan type distribution, single-use plan bloat, top plans by size. Detects ad-hoc query pollution.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is clear. The description adds behavioral context by specifying what analysis dimensions it covers (distribution, bloat, top plans, ad-hoc pollution), which goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the primary action, and contains no redundant phrases. It packs the essential information (what it analyzes and what it detects) without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema and comprehensive annotations, the description is largely complete. It explains the tool's purpose and key diagnostic outputs. The only gap is explicit usage guidance relative to siblings, but overall it provides enough context for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, database_name, is fully described in the schema with a default and explanation. Schema coverage is 100%, so the description need not elaborate. The description adds no parameter-specific meaning beyond the schema, which is acceptable per the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Analyze') and resource ('plan cache') and enumerates concrete outputs: plan type distribution, single-use plan bloat, top plans by size, and ad-hoc query pollution detection. This clearly distinguishes it from sibling tools like get_top_cached_queries or plan_health_review.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for diagnosing plan cache health and detecting ad-hoc pollution, but it does not explicitly state when to prefer this tool over alternatives or provide exclusion criteria. Given many sibling tools, more explicit guidance would be valuable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_query_compilation_statsA
Read-onlyIdempotent

Identify excessively recompiled queries from sys.dm_exec_query_stats. Flags queries where recompile ratio exceeds 50%.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoNumber of top recompiled queries.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the read-only, non-destructive, idempotent nature. The description adds meaningful behavioral context by naming the DMV source and the 50% threshold, aligning with the expected read-only behavior without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise: two short sentences that immediately communicate the action, data source, and threshold. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only diagnostic tool with strong annotations, a full output schema, and well-documented parameters, the description covers the essential purpose and threshold. Mentioning the 50% ratio and sys.dm_exec_query_stats is sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters (top_n and database_name) have clear descriptions. The tool description adds no additional parameter-level detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool identifies excessively recompiled queries from sys.dm_exec_query_stats with a specific threshold (recompile ratio > 50%). This precise verb+resource combination distinguishes it from sibling diagnostic tools like get_top_queries or get_query_wait_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: if you need to find queries with high recompilation, this tool is appropriate. However, it does not explicitly mention when to use it versus alternatives, nor does it provide exclusions or comparisons to related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_query_parameter_bucketsA
Read-onlyIdempotent

Extract the compiled parameter values behind each Query Store plan for one query — the parameter buckets a tuning pass must test. Each distinct compiled set produced its own plan shape in production; pair with boundary/NULL/empty cases the history cannot show.

ParametersJSON Schema
NameRequiredDescriptionDefault
query_idYesQuery Store query_id.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds useful context: each distinct compiled set produced a plan shape in production, and the history cannot show edge cases. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the core purpose and adds a rationale/limitation note, earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and comprehensive annotations, the description adequately covers purpose, context, and limitations. It does not mention prerequisites like Query Store being enabled, but this is implied by the tool's context among sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters (query_id and database_name with default). The description adds no additional parameter-level detail, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Extract the compiled parameter values behind each Query Store plan for one query.' It clearly distinguishes itself from sibling tools by focusing on per-plan parameter buckets rather than sniffing or statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context for when to use the tool ('the parameter buckets a tuning pass must test') and advises pairing with boundary/NULL/empty cases. It does not explicitly name alternatives or exclusions, but the purpose is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_query_wait_statsA
Read-onlyIdempotent

Get per-query wait breakdown from Query Store wait stats. Ties waits to specific queries: 'this query is slow because of X'.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoNumber of top results.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoQuery Store lookback window in minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing the safe read-only nature. The description adds meaningful context by identifying the data source (Query Store wait stats) and explaining the output's per-query granularity. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose and immediately followed by a practical example. No wasted words; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only diagnostic tool with a rich output schema and comprehensive annotations, the description fully explains the tool's purpose and value. It distinguishes the tool from siblings and provides enough context for a agent to select it appropriately. The presence of an output schema means return-value details need not be repeated in the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description's reference to 'per-query wait breakdown' adds high-level context to interpret parameters like top_n and window_minutes, but it doesn't provide specific parameter syntax or format details beyond what the schema already documents. The description earns its place without repeating schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Get') and resource ('per-query wait breakdown from Query Store wait stats'). It explicitly differentiates from sibling tools like get_wait_stats by emphasizing 'per-query' and 'ties waits to specific queries', making the tool's unique purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool: to understand why a specific query is slow due to waits ('this query is slow because of X'). While it doesn't explicitly name alternatives or exclusions, the 'per-query' framing implicitly distinguishes it from aggregate wait-stats tools. This is clear guidance, though not as explicit as naming sibling alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_resource_limitsA
Read-onlyIdempotent

Get Azure resource governance limits: max CPU%, IOPS, log rate, memory, workers, and current service tier/objective.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns with that by using 'Get'. The description adds useful context by listing the specific limits returned, which goes beyond the annotations. No negative behavioral traits are disclosed, but none are needed for a read-only operation with an 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the verb and resource, and the list of returned attributes is concise and informative. No unnecessary words or repetition. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values are already defined. The optional parameter is fully documented in the schema. The description clearly states what the tool does, and annotations cover safety. For a simple read-only tool with one optional parameter, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the only parameter (database_name) has a clear description including its default value. The tool description does not mention the parameter, but the schema already fully documents it. Baseline 3 is appropriate since the description adds no additional parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and clearly identifies the resource ('Azure resource governance limits') followed by an explicit enumeration of what is returned (max CPU%, IOPS, log rate, memory, workers, service tier/objective). This distinguishes it from sibling tools like get_database_configuration or get_resource_stats_history, which target different aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when you need Azure resource governance limits. No explicit exclusions or alternatives are mentioned, but the purpose is unambiguous. Given the large sibling set, a note about when not to use it (e.g., for historical stats) would have been beneficial, but it's not a critical gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_resource_stats_historyA
Read-onlyIdempotent

Get resource utilization history (15-sec granularity) from sys.dm_db_resource_stats. Shows CPU, data I/O, log write, memory trends with sustained pressure warnings.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoHow far back to look, in minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context: it identifies the underlying system view (sys.dm_db_resource_stats), the 15-second granularity, the specific metrics shown, and the 'sustained pressure warnings' feature. It does not mention Azure-specific limitations, but the parameter default hint partially covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loading the action and resource, then succinctly listing what is shown. Every sentence provides useful information with no wasteful filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with an output schema and strong annotations, the description covers the essential points: source, granularity, metrics, and warnings. It omits Azure-specific constraints, but the schema's default database name hints at that. The tool is simple enough that this level of detail is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters have detailed descriptions in the schema (database_name and window_minutes), giving 100% coverage. The tool description does not add parameter-specific semantics beyond what the schema provides, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves resource utilization history with a specific verb ('Get') and resource ('sys.dm_db_resource_stats'), and lists the metrics it covers (CPU, data I/O, log write, memory). This specificity distinguishes it from sibling tools like get_io_stats or get_wait_stats, which address current or different aspects of resource usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through phrases like 'history' and '15-sec granularity', suggesting this is for historical trend analysis. However, it does not explicitly mention when not to use it, nor does it point to alternatives such as get_io_stats for current stats. The guidance is present but implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_storage_diagnosticsA
Read-onlyIdempotent

Get Azure SQL storage diagnostics: database/file size, log usage, VLF counts, last VLF status, and high-usage warnings.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds the specific diagnostic content but doesn't disclose additional behavioral traits such as required permissions, potential side effects, or how 'high-usage warnings' are computed. It adds some value but not rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with a front-loaded purpose, followed by a concise list of included metrics. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one optional parameter fully covered by schema), the presence of an output schema, and annotations that establish safety and idempotency, the description covers all necessary context. It tells the agent what the tool does, what data it returns, and the parameter is self-documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the only parameter, database_name, is fully described with its default). The tool description does not add extra parameter semantics beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Get'), resource ('Azure SQL storage diagnostics'), and enumerates the exact metrics returned (database/file size, log usage, VLF counts, last VLF status, high-usage warnings). This distinguishes it from sibling diagnostic tools focused on wait stats, IO, or tempdb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by listing the storage-related metrics, making it obvious when this tool is appropriate. However, it does not explicitly discuss alternatives or scenarios when sibling tools might be preferred; it stops short of providing explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_table_statsA
Read-onlyIdempotent

Get approximate row counts and storage sizes for tables.

ParametersJSON Schema
NameRequiredDescriptionDefault
schema_nameNoOptional schema filter. Omit for all schemas.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the agent knows this is a safe read. The description adds value by highlighting that the row counts are 'approximate,' which is important behavioral context beyond the annotations, and specifies the scope ('for tables').

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately communicates the tool's purpose. No filler or redundancy. It earns its place perfectly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple optional-filter nature, the schema covers parameters, annotations cover safety, and an output schema exists, the description is sufficient. The main missing element is usage alternatives, but that is addressed in the usage_guidelines dimension. It is complete enough for a basic statistics tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for both optional parameters (schema_name and database_name). The description does not add extra parameter details, but the schema already documents the parameters well. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get approximate row counts and storage sizes for tables.' This is a specific verb+resource combination that distinguishes it from sibling stats tools like get_object_details or get_storage_diagnostics, which focus on other aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. There are many sibling tools for retrieving statistics, but the description does not mention any conditions, exclusions, or preferred scenarios. It simply states what the tool does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tempdb_space_breakdownA
Read-onlyIdempotent

Get tempdb space breakdown: version store, user objects, internal objects, free space. Useful for diagnosing version store bloat under snapshot isolation.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context by specifying the breakdown categories (version store, user objects, internal objects, free space), which goes beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with the purpose front-loaded in the first sentence and a diagnostic use case in the second. Every word earns its place; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one optional parameter and an output schema that documents return values. The description covers the core functionality and a key diagnostic scenario, which is complete for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one optional parameter with complete description coverage (100%). The description adds no parameter-specific detail, which is acceptable since the schema already documents database_name and its default. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource: 'Get tempdb space breakdown' and lists the exact components (version store, user objects, internal objects, free space). This distinguishes it from sibling tools like get_tempdb_usage and other diagnostic tools, making the purpose immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a specific use case: 'Useful for diagnosing version store bloat under snapshot isolation.' This gives clear context for when to use the tool, but it does not explicitly mention when not to use it or compare to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tempdb_usageA
Read-only

Get per-session tempdb consumption: user/internal object allocations and net usage in MB.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum sessions to return (largest tempdb consumers first, max 1000).
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by explaining the output includes both user and internal object allocations and reports in MB, which goes beyond the annotations and helps the agent understand what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately states the purpose and key output details. It contains no filler words and every phrase adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only diagnostic tool with complete schema descriptions, readOnly annotations, and an output schema (as indicated in context), the description is fully sufficient. It explains the tool's scope and units without needing to detail return structures, which are covered elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; both parameters (limit and database_name) have clear descriptions in the schema. The tool description does not add parameter-specific information beyond what the schema already provides, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'per-session tempdb consumption', and specifies the exact data returned ('user/internal object allocations and net usage in MB'). This distinguishes it from sibling tools like get_tempdb_space_breakdown, which likely focuses on overall tempdb space rather than per-session metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (per-session analysis) but does not explicitly mention when to choose this over alternatives such as get_tempdb_space_breakdown or get_active_sessions. No exclusions or alternative names are given, so guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_top_cached_queriesA
Read-onlyIdempotent

Get top cached statements from sys.dm_exec_query_stats. Returns bounded text previews and plan-cache metrics without raw plan XML.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum cached queries to return.
sort_byNoSort by execution_count, total_worker_time, avg_worker_time, total_elapsed_time, avg_elapsed_time, total_logical_reads, total_physical_reads, or total_logical_writes.total_worker_time
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds valuable behavioral context by noting that it returns bounded text previews and omits raw plan XML, which clarifies output format and potential limitations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and contains no filler. Every word contributes to understanding the tool's purpose and output constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of a full output schema and annotations, the description adequately covers the tool's purpose and key behavioral traits. It misses context about typical use cases or relationship to siblings, but for a read-only query tool with good schema coverage, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all parameters with descriptions and defaults, so the baseline is 3. The description does not add further semantic detail about how parameters interact with the returned data, but the schema already provides sufficient guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches top cached statements from sys.dm_exec_query_stats, which is a specific verb-resource combination. It does not explicitly distinguish itself from sibling tools like get_top_queries or get_plan_cache_analysis, but the mention of the system view and output specifics provides clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives. It merely states what it does, leaving the agent to infer suitability. No exclusions, prerequisites, or conditional usage are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_top_queriesB
Read-only

List top queries from Query Store.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of rows to return.
sort_byNoSort by total_duration, avg_duration, cpu, executions, logical_io, physical_io, memory, or resource_blend.total_duration
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoHow far back to look in Query Store, in minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is transparent. The description adds no additional behavioral context, such as what data is returned or any side effects, but it doesn't contradict the annotations either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence without any unnecessary words. It efficiently communicates the core purpose and earns its place, even though it doesn't provide extensive detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 parameters, an output schema, and annotations, but the description lacks usage guidance and doesn't clarify what constitutes 'top queries' without referencing the schema. For a simple read tool, the provided information is minimally adequate, but more context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 4 parameters have schema descriptions with 100% coverage, detailing limit, sort_by, database_name, and window_minutes. The description itself adds no parameter semantics beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the verb 'List' with a specific resource 'top queries from Query Store', which clearly distinguishes it from similar sibling tools like get_top_cached_queries. However, it doesn't define what 'top' means, leaving that to the sort_by parameter, so it's not fully self-contained.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. There is no mention of exclusions, prerequisites, or comparisons to sibling tools such as get_top_cached_queries or get_plan_cache_analysis. The only context is the tool name and a one-line statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tuning_sessionA
Read-onlyIdempotent

Resume a durable tuning session with its complete redacted leaderboard, evidence, events, and remaining budgets. Raw SQL is never persisted.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYesTuning session identifier.
database_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already convey read-only, idempotent, non-destructive behavior. The description adds valuable context about the response containing redacted data and the guarantee that raw SQL is never persisted, which exceeds the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence plus a brief privacy note, both conveying essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and the tool's straightforward read-only nature, the description covers the return payload and key constraints. It does not mention prerequisites (e.g., session existence) but is otherwise sufficient for agent selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% — session_id has a basic description and database_name is undocumented. The tool description does not clarify either parameter's format, defaults, or relationship, failing to compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: resuming a durable tuning session and enumerates the returned data (redacted leaderboard, evidence, events, remaining budgets). The verb 'Resume' distinguishes it from sibling tools like start_tuning_session.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for existing tuning sessions via 'Resume', but does not explicitly state when to use it instead of alternatives like starting or finalizing sessions. There is no exclusionary guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_wait_statsA
Read-onlyIdempotent

Get top wait statistics from sys.dm_db_wait_stats with category mapping (CPU, I/O, Lock, Memory, Network, etc.), benign wait filtering, and root-cause recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoNumber of top waits to return.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe read-only operation, and the description adds meaningful behavioral context: it performs category mapping, filters benign waits, and provides root-cause recommendations. It also names the source DMV, helping the agent understand the data scope. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the main action, data source, and key features. Every clause adds useful information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, the description covers the data source, transformations, and outputs (recommendations). The presence of an output schema and comprehensive parameter schema reduces the need for return-value explanations. It slightly lacks explicit scope (database vs instance), but the DMV name clarifies this for most users.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with clear descriptions for both parameters: 'top_n' (number of waits) and 'database_name' (optional, with default). The tool description does not add additional parameter-level detail, but the schema already handles this, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a clear action ('Get top wait statistics') and resource ('sys.dm_db_wait_stats'), with detailed scope including category mapping and filtering. However, it does not differentiate from the sibling tool 'get_query_wait_stats', which likely offers a different granularity (query-level vs database-level), so it lacks explicit sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use case—diagnosing wait stats with category mapping and recommendations—but does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives like 'get_query_wait_stats' or 'get_currently_waiting_tasks'. Usage context is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_databasesA
Read-onlyIdempotent

List the configured Azure SQL databases available to this MCP server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds useful scoping context—'configured' and 'available to this MCP server'—which clarifies that this is not a list of all databases on the Azure SQL instance, but only those wired into the server.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence says everything needed without redundancy. The description is appropriately concise for a trivial listing operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter listing tool, the description is fully sufficient: it states the object (databases), the scope (configured and available), and the safety profile is covered by annotations. An output schema also exists, so return values are documented elsewhere.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema coverage is 100%, so the description need not elaborate on parameters. The baseline for zero-parameter tools is 4, and the description does not need to add anything.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('configured Azure SQL databases'), with a clear scope ('available to this MCP server'). It clearly distinguishes this from siblings like list_schemas and list_objects, which target database objects, not databases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (to see which databases are available) but does not explicitly state when to use it versus alternatives. There are no exclusions or when-not-to-use conditions, but for a simple zero-parameter list tool the context is reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_learning_candidatesB
Read-onlyIdempotent

List deterministic lesson candidates for maintainer review.

ParametersJSON Schema
NameRequiredDescriptionDefault
skillNo
learning_keyNo
database_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds 'deterministic' as a behavioral trait, which is useful context, and 'for maintainer review' clarifies the audience. However, it does not elaborate on filter behavior or what constitutes a candidate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words, front-loaded with the verb and object. It is concise and effective for a simple list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations are rich, the description is adequate for a simple list operation. However, it lacks context about the learning workflow, what 'deterministic lesson candidates' are, and how it fits with sibling tools, leaving moderate gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain any of the three optional parameters (skill, learning_key, database_name). The parameter names are somewhat self-explanatory, but the description adds no additional meaning, leaving the agent to infer how they filter results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' with a resource 'deterministic lesson candidates' and a purpose 'for maintainer review', clearly identifying its function. It distinguishes from siblings like propose_lesson or recall_lessons by focusing on listing candidates for review rather than creating or recalling lessons.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance or alternatives are mentioned. The phrase 'for maintainer review' implies a review step, but it does not explain when to prefer this tool over propose_lesson or recall_lessons, nor any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_objectsA
Read-onlyIdempotent

List objects in a schema. Supports table, view, procedure, function, and index.

ParametersJSON Schema
NameRequiredDescriptionDefault
object_typeNoObject type: table, view, procedure, function, or index.table
schema_nameYesSchema name.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations (readOnlyHint, idempotentHint, destructiveHint) already disclose the safety profile. The description adds little beyond the supported object types, which are also in the schema, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action, and every word contributes. It is concise without sacrificing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with an output schema and comprehensive annotations, the description is sufficient. It states the core purpose and supported types, and the return values are covered by the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All parameters have schema descriptions, so the baseline is 3. The description's mention of supported object types duplicates the object_type parameter description and adds no significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with the resource 'objects in a schema' and enumerates supported types (table, view, procedure, function, index). This clearly distinguishes it from sibling tools like list_schemas or search_objects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use the tool (listing objects in a schema), but does not explicitly mention alternatives or exclusions. The usage is clear and unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schemasA
Read-onlyIdempotent

List schemas in the selected Azure SQL database.

ParametersJSON Schema
NameRequiredDescriptionDefault
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds the scoping constraint 'in the selected Azure SQL database,' but this is also partially covered by the parameter description. No additional behavioral details (e.g., pagination, ordering) are provided, though annotations mitigate the need.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that is front-loaded and contains no redundant information. It earns its place efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with one optional parameter, an output schema, and comprehensive annotations, the description is complete. It clearly states the action and scope, and the output schema covers return value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter (database_name) is fully described in the schema with its default value and meaning. The tool description adds no extra parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('schemas') with a clear scope ('in the selected Azure SQL database'). This clearly distinguishes it from sibling tools like list_databases and list_objects, making the purpose immediately understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to list schemas) but does not explicitly contrast it with alternatives or state when not to use it. It lacks the kind of 'use this instead of X' guidance seen in higher-scoring examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

optimize_indexesA
Read-only

Run the index optimization engine: analyzes workload from Query Store, generates index candidates from execution plans and DMVs, estimates sizes, scores using Pareto optimization (read benefit vs size vs write overhead), and returns budget-constrained ranked recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
betaNoWrite penalty weight (higher = avoid indexes on write-heavy tables).
alphaNoSize penalty weight (higher = prefer smaller indexes).
top_nNoNumber of top queries to analyze.
budget_mbNoMax total index size in MB. None = unlimited.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoQuery Store lookback window in minutes.
min_improvement_pctNoMinimum impact percentage to include a candidate.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false, establishing a safe read-only profile. The description adds process context (Query Store, DMVs, Pareto optimization) but does not disclose additional behavioral traits such as execution time, resource consumption, or whether it applies changes (it says returns recommendations, implying no mutations). This is adequate but not rich beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that efficiently communicates the core algorithm and output. It is front-loaded with the verb phrase 'Run the index optimization engine'. While it could be split for readability, every clause adds useful information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, output schema present), the description covers the main algorithm (Pareto optimization), data sources (Query Store, DMVs), and output (ranked recommendations). It omits potential caveats like prerequisites or performance impact, but the output schema handles return details and the annotations cover safety. It is sufficiently complete for a well-structured tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with each parameter clearly explained (e.g., alpha for size penalty, beta for write penalty, budget_mb for max size). The description's mention of 'budget-constrained' and 'read benefit vs size vs write overhead' loosely maps to parameters but adds no new syntax detail. Baseline of 3 applies since the schema carries the full semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Run the index optimization engine') and details the full workflow: analyzing workload from Query Store, generating candidates, estimating sizes, scoring with Pareto optimization, and returning ranked recommendations. It distinguishes itself from sibling tools like analyze_workload_indexes by focusing on the complete optimization process rather than just analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention when it is appropriate to run the engine, prerequisites (e.g., Query Store enabled), or contrast with simpler analysis tools. The only implied usage is 'run the engine', which is tautological and offers no decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_enforcer_tickA
Read-onlyIdempotent

Preview one plan-enforcement cycle. This tool is permanently read-only; use the prepared plan-action workflow for reviewed mutations.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoCompatibility flag. False is rejected; preview is permanent.
max_actionsNoMaximum force/unforce actions to preview or apply.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoQuery Store lookback window in minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds the critical context that this read-only behavior is permanent ('This tool is permanently read-only'), which goes beyond the simple hint and clarifies that even attempting a mutation via parameters like dry_run=false will be rejected. This is a valuable behavioral disclosure not fully captured by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded. The first sentence states the core purpose, and the second sentence provides essential guidance on the tool's safety and alternatives. Every word earns its place; no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and the input schema fully documents parameters, the description is sufficient for an agent to understand the tool's role. It could be more explicit about how this differs from dry_run_plan_action, but overall it provides enough context for effective selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with descriptions for all parameters, so the baseline is a 3. The description itself doesn't add additional parameter semantics beyond what the schema already provides, which is acceptable given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's function: 'Preview one plan-enforcement cycle.' It uses a specific verb ('preview') and resource ('plan-enforcement cycle'), which distinguishes it from mutation-oriented siblings. It also reinforces the read-only nature, further separating it from tools that apply changes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use the tool for previewing and directs to 'the prepared plan-action workflow for reviewed mutations.' While it doesn't name a specific sibling tool, the guidance is clear enough to steer the agent away from using this for mutations. It provides clear context for when to use this tool versus the broader plan-action workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_health_reviewA
Read-onlyIdempotent

Review Query Store health, parameter sensitivity, regressions, forced-plan failures, and ranked force/unforce candidates.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoMaximum ranked findings to return.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoQuery Store lookback window in minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's 'Review' aligns with these. The description does not add extra behavioral context such as permission requirements, performance impact, or return format, so it neither contradicts nor significantly enhances the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the verb and lists the key review areas without any fluff. Every word contributes to conveying the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only review tool with a detailed output schema and full parameter documentation, the description sufficiently conveys the scope of what is covered. However, it could have been slightly more complete by explicitly noting that it aggregates multiple analysis areas or by providing a hint about when to use it, so a 4 rather than a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with top_n, database_name, and window_minutes each having clear descriptions. The tool description adds no additional parameter-specific information beyond what the schema provides, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Review' and clearly enumerates the covered areas: Query Store health, parameter sensitivity, regressions, forced-plan failures, and ranked force/unforce candidates. It is clear and specific, but it does not explicitly distinguish itself from sibling tools like detect_parameter_sniffing or detect_regressed_queries, hence not a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for a comprehensive Query Store health review, but it provides no explicit guidance on when to use this tool versus specialized alternatives, nor does it mention prerequisites or exclusions. The usage context is only implied by the scope of the review.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_plan_actionC
Read-onlyIdempotent

Capture exact Query Store control state and persist a reviewed, redacted plan-action intent. Automatic Tuning ownership is review-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonYesReviewed reason for the action.
plan_idNo
evidenceYesReviewed pre-change evidence window.
query_idYesQuery Store query_id.
operationYesforce_plan, unforce_plan, set_hints, or clear_hints.
session_idYesShared tuning session identifier.
query_hintsNo
reviewed_byYesHuman reviewer identifier.
candidate_idNo
database_nameNo
idempotency_keyYesUnique idempotency key.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true contradicts the description's 'persist' action, which implies writing state. Since the description explicitly says it captures and persists an intent, it is a side-effecting operation, clashing with the read-only hint. This is a critical inconsistency that misleads the agent about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at two sentences, with key information front-loaded. Every phrase adds value: capturing state, persisting intent, and clarifying review-only ownership. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 parameters, nested objects, output schema), the description is too sparse. It does not explain the workflow context, how the persisted intent is used, or how it relates to sibling tools like dry_run_plan_action or plan_enforcer_tick. Annotations and output schema help, but the description's brevity leaves major gaps for an AI agent to safely invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 64%, with several parameters (plan_id, query_hints, candidate_id, database_name) lacking descriptions. The tool description adds no parameter-level meaning, focusing only on the overall purpose. It fails to compensate for the undocumented parameters, leaving the agent uncertain about optional inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool captures Query Store control state and persists a reviewed, redacted plan-action intent, with a specific verb and resource. It also explains that Automatic Tuning ownership is review-only, which helps distinguish it from execution-focused tools, though it does not explicitly name competing alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage as a preparatory, review-only step ('Automatic Tuning ownership is review-only') but does not explicitly state when to use this tool versus related siblings like dry_run_plan_action or review_plan_enforcement. There are no clear exclusions or alternative recommendations, leaving the agent to infer timing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_view_changeA
Read-onlyIdempotent

Prepare and preview a reversible CREATE VIEW or ALTER VIEW change. Optimizer preparations are process-local previews; sandbox preparations become restart-safe only with explicit raw-SQL state opt-in.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationNoauto, create, or alterauto
view_nameYesTarget view.
definitionYesComplete SELECT-shaped view body, without CREATE/ALTER VIEW.
schema_nameYesTarget schema.
indexed_viewNo
schema_boundNo
database_nameNo
idempotency_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, but the description adds meaningful behavioral context: preparations are process-local, sandbox preparations are restart-safe only with explicit raw-SQL state opt-in. This goes beyond the annotations and helps the agent understand the transient vs. persistent nature of the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and every phrase adds value (e.g., 'reversible', 'process-local', 'restart-safe', 'raw-SQL state opt-in'). No filler or redundant restatement of the title or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 params, output schema present), the description covers the key novelty—reversibility and preview semantics—and differentiates preview types. It does not explain how to opt into raw-SQL state or what 'sandbox' refers to, but the presence of an output schema reduces the need to explain return values. Overall, it provides sufficient context for initial selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, and the description does not compensate by elaborating on any parameters. It mentions 'CREATE VIEW or ALTER VIEW' which hints at the 'operation' parameter, but fails to clarify the meaning of 'definition', 'schema_bound', 'indexed_view', 'database_name', or 'idempotency_key'. With half the params undocumented and no description-level guidance, the agent receives insufficient parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a clear verb ('Prepare and preview') and resource ('CREATE VIEW or ALTER VIEW change'), distinguishing it from siblings like execute_sql or explain_query. It immediately conveys that this tool handles view changes and provides a preview, which is a unique responsibility among the listed tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for previewing view changes but does not explicitly state when to use this vs. alternatives, nor does it mention exclusions (e.g., 'use this only for preparation, not for applying'). The reference to 'process-local previews' and 'sandbox preparations' gives some context but not a clear comparative guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_lessonB
Idempotent

Propose an inactive lesson from reviewed decisions.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
actionYesRedacted action summary.
triggerYesRedacted trigger summary.
review_idsYesSupporting review identifiers.
learning_keyYesStable decision-family key.
database_nameNo
preconditionsYesBounded preconditions for applying the lesson.
freshness_daysNo
counterexamplesYesKnown failures, limits, or bounded risks.
idempotency_keyNo
next_observationNoStructured redacted next observation to collect.
applicable_skillsYesSkills allowed to recall the lesson.
required_evidenceYesEvidence labels required before using the lesson.
supersedes_lesson_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, idempotent, and non-destructive. The description adds that the lesson is 'inactive,' implying a state where it won't be active until approved, which is useful. However, it does not explain what happens to the underlying reviewed decisions or any approval workflow. With annotations carrying the safety profile, a moderate score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the action, object, and source with no wasted words. It is appropriately sized for the purpose it conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the tool is complex with 14 parameters and 8 required fields, yet the description gives no context on the proposal workflow, how to construct the required fields, or what 'inactive' means in the lesson lifecycle. The description is too minimal to be fully usable for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides no parameter-level semantics. Schema coverage is 64%, leaving parameters like tags, database_name, freshness_days, idempotency_key, and supersedes_lesson_id without descriptions in either schema or tool description. Key fields like action and trigger are only described as 'Redacted' in the schema, which adds little meaning. The description fails to compensate for these gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Propose' with a clear resource 'inactive lesson' and source 'reviewed decisions,' distinguishing it from siblings like record_decision and recall_lessons. The term 'inactive' adds specificity, indicating the lesson is created in a non-active state. This is a clear, non-tautological statement of purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The phrase 'from reviewed decisions' implies a prerequisite (reviewed decisions exist) but does not state when to prefer this over list_learning_candidates or record_decision. No exclusions or alternative tool names are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recall_lessonsC
Read-onlyIdempotent

Recall at most three fresh, active, scoped lessons.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
skillYesMaintained skill requesting advisory lessons.
database_nameNo
skill_versionYesVersion of the requesting skill.
query_fingerprintNo
tool_schema_fingerprintYesTool-schema fingerprint returned by check_runtime_status.
sanitized_config_fingerprintYesSanitized-config fingerprint returned by check_runtime_status.
runtime_compatibility_fingerprintYesStable compatibility fingerprint returned by check_runtime_status.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, read-only, idempotent operation. The description adds useful constraints ('at most three', 'fresh, active, scoped') but does not explain what these terms mean operationally or how the tool behaves when no lessons match. This is acceptable given annotation coverage, but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundant words. However, given the tool's 8 parameters and 5 required fields, the extreme brevity borders on under-specification, though it is still appropriately concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema and annotations, the description omits crucial context: what the fingerprints are used for, what 'scoped' means, and when in the tuning workflow this tool should be invoked. For a tool with many required parameters, this is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description makes no reference to any of the 8 parameters. Schema coverage is only 63%, with tags, database_name, and query_fingerprint lacking descriptions. The description does not compensate for these gaps, leaving those parameters under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves lessons with specific constraints ('at most three fresh, active, scoped'). It uses a specific verb ('Recall') and resource ('lessons'), which distinguishes it from sibling tools that record or propose lessons, though it does not explicitly contrast with list_learning_candidates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like propose_lesson or list_learning_candidates. The description does not mention any workflow context, prerequisites, or conditions under which this tool should be preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

record_decisionA
Idempotent

Record a redacted skill decision backed by scoped evidence. Learning is advisory and cannot change database activity.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
skillYesMaintained skill that made the decision.
tacticYesConcise redacted tactic summary.
case_idNo
confidenceYes
session_idNo
uncertaintyYesStructured redacted uncertainty summary.
candidate_idNo
learning_keyYesStable decision-family key.
subject_kindYesRedacted decision subject kind.
database_nameNo
skill_versionYesSkill contract version.
expected_resultYesStructured redacted prediction summary.
idempotency_keyNo
query_fingerprintNo
applied_lesson_idsNo
based_on_review_idsNoPrior review identifiers supporting this decision.
runtime_fingerprintYesProcess runtime fingerprint returned by check_runtime_status.
subject_fingerprintYesRedacted fingerprint of the decision subject.
evaluator_fingerprintYesRedacted evaluator/model fingerprint.
consumed_evidence_refsYesImmutable evidence or terminal-link identifiers.
tool_schema_fingerprintYesTool-schema fingerprint returned by check_runtime_status.
sanitized_config_fingerprintYesSanitized-config fingerprint returned by check_runtime_status.
runtime_compatibility_fingerprintYesStable compatibility fingerprint returned by check_runtime_status.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that learning cannot change database activity, which is more specific than the annotation destructiveHint=false. It also mentions 'redacted' and 'scoped evidence', adding behavioral context beyond annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, second sentence clarifies side effects. Efficient and free of unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 24 parameters, the description captures the essence of the tool and its constraints. The output schema and parameter descriptions fill in operational details. However, it omits prerequisites like calling check_runtime_status for fingerprints, though those are noted in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-specific details, but schema coverage is 63% with useful descriptions on parameters like skill and fingerprints. Baseline 3 is appropriate since the description doesn't need to compensate fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb+resource: 'Record a redacted skill decision backed by scoped evidence.' This distinguishes it from sibling tools like review_decision and propose_lesson by focusing on persistence. The phrase 'redacted' and 'scoped evidence' adds useful constraints.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied but not explicit. The sentence 'Learning is advisory and cannot change database activity' provides safety context, suggesting when it's safe to call, but does not name alternatives or state when not to use this tool. No direct comparison to sibling tools like review_decision or propose_lesson.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_handoffA
Idempotent

Claim, resolve, reopen, or cancel a scoped learning handoff; successful resolutions can link a decision.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerNo
actionYesLifecycle action.
handoff_idYesHandoff identifier.
resolutionNo
decision_idNoOptional decision to link after a successful resolution.
database_nameNo
expected_versionYes
resolution_evidence_refsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint=true and destructiveHint=false, so the description only adds the note about linking a decision on resolution. It does not disclose side effects of claim/resolve/reopen/cancel, expected_version usage, or state transitions, but the annotation coverage lowers the burden. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the core verb and actions, and contains no filler. It efficiently conveys the tool's scope without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite annotations and an output schema, the tool has 8 parameters and 4 distinct lifecycle actions, but the description only hints at the resolution-link feature. It lacks crucial context about when each action is appropriate, what expected_version is for, or what resolution/evidence_refs represent, making the description incomplete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38% (3 of 8 parameters described), and the description only adds meaning for decision_id via 'link a decision' and enumerates the action values. The other parameters (expected_version, resolution, owner, database_name, resolution_evidence_refs) remain semantically empty beyond their titles, and the description does not compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Claim, resolve, reopen, or cancel') on a specific resource ('scoped learning handoff'), which unambiguously defines the tool's purpose. It also distinguishes it from sibling tools like create_handoff (creation) and get_handoff (viewing) by focusing on lifecycle management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for handoff lifecycle management but does not explicitly state when to use this tool versus alternatives like get_handoff or create_handoff. It lists the supported actions, which gives some context, but lacks explicit scenario guidance or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_decisionA
Idempotent

Review one decision using only MCP-created terminal-link evidence.

ParametersJSON Schema
NameRequiredDescriptionDefault
alignmentNounknown
correctionNo
decision_idYesRecorded decision identifier.
database_nameNo
safety_signalNounknown
cleanup_signalNounknown
causal_strengthNounknown
counterexamplesYesStructured redacted counterexamples or bounded risks.
idempotency_keyNo
observed_resultYesStructured redacted observed outcome.
unknown_outcomeNo
unresolved_gapsNo
next_observationYesStructured redacted next observation to collect.
prediction_errorYesStructured redacted prediction error.
equivalence_signalNounknown
explicit_correctionNo
terminal_evidence_refsYesMCP-created terminal-link-* identifiers.
material_regression_signalNounknown

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotency and safety signals (idempotentHint=true, destructiveHint=false, readOnlyHint=false), and the description does not contradict them. It adds the evidence-source constraint but does not disclose side effects or what happens to the decision record upon review, which is relevant given it is not marked read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no fluff. It states the action, the object, and the evidence constraint efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the tool has 18 parameters and 6 required inputs, indicating a complex workflow. The one-sentence description omits prerequisites (e.g., an existing recorded decision), the meaning of terminal-link evidence, and the effect of a review on the decision state, leaving a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter hint is 'terminal-link evidence', mapping to terminal_evidence_refs. With schema coverage at 33%, many optional parameters (e.g., alignment, causal_strength, safety_signal) are unexplained in both the description and the schema; the description does not compensate by explaining how the required parameters interrelate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states this tool reviews exactly one decision ('Review one decision') and scopes the evidence to MCP-created terminal-link evidence ('using only MCP-created terminal-link evidence'). This distinguishes it from sibling tools like record_decision or propose_lesson by making the subject and evidence type explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'using only MCP-created terminal-link evidence' provides a clear usage constraint: this tool should be invoked only when such evidence is available. However, it does not name alternatives or explicitly state when not to use it, leaving some ambiguity about the workflow context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

review_plan_enforcementA
Read-onlyIdempotent

Review Query Store regressions and forced-plan health, then rank read-only candidate plan force/unforce actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoMaximum ranked actions to return.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoQuery Store lookback window in minutes.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it ranks candidate actions, but this is more about purpose than behavioral nuance. It doesn't disclose potential performance impact, what 'health' entails, or how ranking works, though output schema may cover the return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that front-loads the primary action ('Review'), specifies the domain (Query Store regressions and forced-plan health), and concludes with the output behavior ('rank read-only candidate...'). Every word earns its place, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, non-destructive review tool with good annotations and a comprehensive input schema, the description is largely sufficient. It might benefit from explaining what 'ranked' means or the criteria for ranking, but output schema likely provides that. Overall, it provides enough context for an agent to understand the tool's role among many similar siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: all three parameters (top_n, database_name, window_minutes) have clear descriptions and defaults. The tool description adds no extra parameter detail, which is acceptable given the schema already documents them. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Review' and 'rank') applied to a distinct resource (Query Store regressions and forced-plan health) and ends with a concrete outcome (candidate force/unforce actions). This clearly differentiates it from sibling tools like plan_health_review or dry_run_plan_action by emphasizing the read-only ranking nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage: when you need to review regressions and forced-plan health to produce ranked candidate actions. It doesn't explicitly mention when not to use it or name alternatives, but the context is clear enough for an agent to select it over purely diagnostic tools (e.g., detect_regressed_queries) or enforcement tools (e.g., plan_enforcer_tick).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_objectsA
Read-onlyIdempotent

Search for database objects by name pattern across all schemas.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternYesSQL LIKE pattern, for example '%User%' or 'Order%'.
object_typeNoOptional filter: table, view, procedure, or function.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds 'across all schemas' as useful scope context beyond annotations, but does not mention return format or potential limits (though output schema may cover those).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and contains zero fluff. It communicates the essential purpose and scope efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the presence of an output schema, and strong annotations, the description is adequate. It could more explicitly mention SQL LIKE patterns or parameter filtering, but those are already documented in the schema. The 'across all schemas' scope is a useful contextual addition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides descriptions for all three parameters (pattern, object_type, database_name), covering 100% of the semantic load. The description itself does not add any parameter-level details, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool searches for database objects by name pattern across all schemas. The verb 'search' and resource 'database objects' are specific, and the 'across all schemas' scope distinguishes it from sibling tools like get_object_details or list_objects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when finding objects by name pattern, but it does not explicitly state when to use this tool versus alternatives like list_objects or get_object_details. It lacks explicit exclusions or alternative recommendations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_performance_caseC
Read-onlyIdempotent

Create a durable, redacted performance case. SQL is fingerprinted and is not written to the MCP state database.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesBaseline read-only SELECT-shaped SQL.
objectiveNoPrimary tuning objective: elapsed_time, cpu, logical_reads, or physical_reads.elapsed_time
database_nameNo
idempotency_keyNoOptional caller-generated idempotency key.
parameter_casesNoUp to four named parameter cases, for example common, rare, NULL, and boundary. Each has name, values, types, and positive weight. Values are fingerprinted, not persisted.
query_store_query_idNoOptional exact Query Store query_id. When supplied, evidence collection uses only this identity and never fuzzy matching.

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes

TDQS

C2.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description says 'Create a durable... performance case,' which implies a write/mutation operation, yet the annotations declare readOnlyHint=true. This is a direct annotation contradiction. The added detail about SQL fingerprinting and not writing to the MCP state database is useful, but the contradiction forces a score of 1.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise, front-loaded sentences with no filler. The first sentence states the purpose and the second adds critical redaction/storage behavior. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers durability and redaction, and the output schema plus rich input schema reduce the need to document return values. However, it lacks context around the case lifecycle, idempotency, parameter_case semantics, and how this relates to starting versus tuning sessions, leaving some gaps for a 6-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 83% of parameters with descriptions, so the schema carries most of the semantic load. The description adds the behavioral fact that SQL is fingerprinted, which relates to the sql parameter, but this is marginal and already partially echoed in parameter_cases. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb and resource: 'Create a durable, redacted performance case.' This clearly conveys the tool's core function. However, it does not explicitly distinguish itself from sibling tools like start_tuning_session or get_performance_case, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus siblings such as start_tuning_session, collect_performance_evidence, or get_performance_case. There are no exclusions, prerequisites, or alternative tool references, leaving the agent to infer usage from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_tuning_sessionB
Read-onlyIdempotent

Start a durable iterative tuning session. Defaults are 10 candidates, 80 executions, and 20 minutes; explicit multi-hour budgets are accepted when the local database policy permits them.

ParametersJSON Schema
NameRequiredDescriptionDefault
case_idYesPerformance case identifier.
database_nameNo
max_candidatesNoMaximum candidate experiments for this session.
execution_limitNoMaximum measured query executions across the session.
idempotency_keyNo
time_limit_minutesNoWall-clock session budget in minutes; may span hours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
headlineYes

TDQS

B3.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotation Contradiction: The description says 'Start a durable iterative tuning session,' implying a state-changing action, while annotations declare readOnlyHint=true. This is a serious inconsistency. The description also does not explain side effects, persistence, or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that contains no filler and efficiently conveys the core purpose, defaults, and a policy constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists, the description is too thin for a 6-parameter tool that starts a durable workflow. It omits guidance on idempotency_key usage, prerequisites, and how this relates to finalize_tuning_session; the annotation contradiction further undermines completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% with descriptions for case_id, max_candidates, execution_limit, and time_limit_minutes. The description adds slight nuance by noting defaults and that explicit multi-hour budgets are accepted conditionally, but it does not explain idempotency_key or database_name. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Start') and resource ('durable iterative tuning session') and includes key defaults. It clearly distinguishes this tool from sibling tools like get_tuning_session and finalize_tuning_session.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for beginning an iterative tuning session and notes budget constraints, but it does not explicitly state when to prefer this over alternatives or when not to use it. No sibling tools are named as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tune_queryA
Read-only

Compatibility initializer only: open a performance case/session and collect evidence. It does not generate or benchmark a rewrite and must not be treated as a completed optimization. Named optimizer profiles use the explicit case/session workflow instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesRead-only SQL query to tune.
analyzeNoWhen true, execute the query to capture an actual plan.
database_nameNoOptional database name. Defaults to AZURE_SQL_DEFAULT_DATABASE.
window_minutesNoQuery Store lookback window for history evidence.
include_raw_xmlNoInclude raw SHOWPLAN XML inline. Defaults to token-safe artifact URI only.
parameter_typesNoOptional exact SQL types for the supplied parameter values.
auto_bind_paramsNoBind @param placeholders from column statistics where possible.
parameter_valuesNoExplicit parameter values for representative execution; prefer this over heuristic statistics/type fallback binding.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only and non-destructive behavior. The description goes beyond by revealing that the tool only initializes a case/session and collects evidence, does not rewrite or benchmark, and must not be considered a final optimization. This adds meaningful behavioral context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, followed by a critical limitation and an alternative. Every sentence earns its place without redundancy, making the description compact and effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters) and the presence of an output schema, the description adequately explains what the tool does and what it doesn't do. It also provides the essential warning about being an initializer only. Minor gap: it doesn't detail what 'collect evidence' entails, but the sibling tools and output schema cover that context sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for all 8 parameters with individual descriptions. The tool description adds no parameter-specific information, but the schema already handles parameter semantics fully, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'open a performance case/session and collect evidence' and explicitly distinguishes it from siblings by noting it does not generate or benchmark a rewrite. This specific verb+resource+scope makes the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool (as a compatibility initializer) and warns against treating it as a completed optimization. It also names an alternative for named optimizer profiles ('use the explicit case/session workflow instead'), offering exclusionary guidance.

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. Dates show when Glama detected each change.

  1. 76 tool updatesv2.2.1
    • First observedadd_tuning_candidate
    • First observedanalyze_db_health
    • First observedanalyze_index_recommendations
    • First observedanalyze_query_indexes
    • First observedanalyze_workload_indexes
    • First observedbenchmark_index_candidate
    • First observedbenchmark_query_rewrite
    • First observedbenchmark_tuning_candidate
    • First observedcapture_schema_snapshot
    • First observedcheck_capabilities
    • First observedcheck_equivalence_preflight
    • First observedcheck_runtime_status
    • First observedcheck_statistics_health
    • First observedcollect_performance_evidence
    • First observedcompare_plan_summaries
    • First observedcompare_query_plans
    • First observedcompare_query_results
    • First observedcompare_schemas
    • First observedcreate_handoff
    • First observeddetect_parameter_sniffing
    • First observeddetect_regressed_queries
    • First observeddry_run_plan_action
    • First observedexecute_sql
    • First observedexplain_query
    • First observedfinalize_tuning_session
    • First observedgenerate_migration_script
    • First observedget_active_sessions
    • First observedget_cached_routine_stats
    • First observedget_connection_diagnostics
    • First observedget_connection_pool_stats
    • First observedget_currently_waiting_tasks
    • First observedget_database_configuration
    • First observedget_deadlock_history
    • First observedget_dependencies
    • First observedget_forced_plans
    • First observedget_handoff
    • First observedget_io_stats
    • First observedget_lock_details
    • First observedget_memory_grants
    • First observedget_object_details
    • First observedget_object_index_diagnostics
    • First observedget_open_transactions
    • First observedget_performance_case
    • First observedget_plan_cache_analysis
    • First observedget_query_compilation_stats
    • First observedget_query_parameter_buckets
    • First observedget_query_wait_stats
    • First observedget_resource_limits
    • First observedget_resource_stats_history
    • First observedget_storage_diagnostics
    • First observedget_table_stats
    • First observedget_tempdb_space_breakdown
    • First observedget_tempdb_usage
    • First observedget_top_cached_queries
    • First observedget_top_queries
    • First observedget_tuning_session
    • First observedget_wait_stats
    • First observedlist_databases
    • First observedlist_learning_candidates
    • First observedlist_objects
    • First observedlist_schemas
    • First observedoptimize_indexes
    • First observedplan_enforcer_tick
    • First observedplan_health_review
    • First observedprepare_plan_action
    • First observedprepare_view_change
    • First observedpropose_lesson
    • First observedrecall_lessons
    • First observedrecord_decision
    • First observedresolve_handoff
    • First observedreview_decision
    • First observedreview_plan_enforcement
    • First observedsearch_objects
    • First observedstart_performance_case
    • First observedstart_tuning_session
    • First observedtune_query

TDQS

B3.4/5.0
Disambiguation2/5

Many tools have overlapping purposes, such as get_wait_stats vs get_query_wait_stats vs get_currently_waiting_tasks, and analyze_query_indexes vs analyze_workload_indexes vs optimize_indexes. This makes it difficult for agents to select the correct tool for a given task despite detailed descriptions.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (e.g., get_, list_, analyze_, compare_, start_), with no mixed conventions or ambiguous naming styles. The verbs vary but are semantically appropriate.

Tool Count1/5

76 tools is far beyond the typical well-scoped MCP server and represents an extreme number that overwhelms agents and complicates tool selection. Even for a comprehensive Azure SQL server, this count is excessive.

Completeness5/5

The tool set covers the full lifecycle for Azure SQL management: schema exploration, query execution, performance tuning, index optimization, plan management, schema comparison/migration, and operational diagnostics. It also includes learning and handoff tools, filling potential gaps. No obvious missing capabilities exist for the domain.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides database interaction and business intelligence capabilities, enabling users to run SQL queries, analyze business data, and automatically generate business insight memos for Microsoft SQL Server databases.
    39
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables secure database operations on SQL Server instances through a three-tier safety system, supporting schema exploration, query execution, performance analysis, and data export with configurable security levels from read-only to full development access.
    16
    898
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Microsoft SQL Server databases through a virtual filesystem interface, comprehensive stored procedure management with draft-test-deploy workflows, safe write operations with transaction control, and performance analysis capabilities.
    3,338
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides tools for querying and managing Microsoft SQL Server databases, including stored procedures and SQL Server Agent jobs as code with version control integration.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/akaalholdings/azure-sql-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server