Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

sqlglass

PYPI · SQLGLASS · SCANNED SEP 23

SQL Server / Azure SQL for agents: real schema, lint, read-only runs, plans, write previews.

Available components

65 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 1 of 31 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
Schema Quality & AI Usability75
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 3079 tokens (~106/item across 29 items; 29 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage67
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 0% of tool parameters carry a description.Fail
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Install

How do I install the sqlglass MCP server?

sqlglass runs locally as a PyPI package, launched with uvx sqlglass. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · sqlglass

# add to Claude Code
claude mcp add s-curvelabs-sqlglass -- uvx sqlglass
// .cursor/mcp.json
{
  "mcpServers": {
    "s-curvelabs-sqlglass": {
      "command": "uvx",
      "args": [
        "sqlglass"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "s-curvelabs-sqlglass": {
      "command": "uvx",
      "args": [
        "sqlglass"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add s-curvelabs-sqlglass -- uvx sqlglass
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "s-curvelabs-sqlglass": {
      "type": "local",
      "command": [
        "uvx",
        "sqlglass"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add s-curvelabs-sqlglass --command uvx --arg sqlglass
# ~/.hermes/config.yaml
mcp_servers:
  s-curvelabs-sqlglass:
    command: "uvx"
    args: ["sqlglass"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "s-curvelabs-sqlglass": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "sqlglass"
      ]
    }
  }
}
# add to Vellum
assistant mcp add s-curvelabs-sqlglass -t stdio -c uvx -a sqlglass
// mcp.json
{
  "mcpServers": {
    "s-curvelabs-sqlglass": {
      "command": "uvx",
      "args": [
        "sqlglass"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 23 Sept 26 +15
    • Malware scan: unverified → pass security
  • 22 Sept 26 50

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 23 Sept 2026 · Analysed pypi/sqlglass@0.1.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 31 packages
Packages resolved 31
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 29 exposed · ~2,706 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
analyze_sql ~37

What a query touches: tables/views, columns per table, CTEs, parameters and its output columns.

NameTypeReqDescription
sqlstringyes

No output schema declared.

No examples provided.

build_create_table ~295

Generate a CREATE TABLE script (TEXT ONLY -- this server never runs DDL; the user reviews and runs it). Checked against the cached schema: the name must be free, foreign keys must point at a real primary/unique key with the same column types, FK columns get an index, constraints get conventional names, and the script is wrapped in IF OBJECT_ID(...) IS NULL so it can be re-run. Returns sql + undo_sql + notes. name: "dbo.VendorScore" columns: [{"name": "VendorScoreId", "type": "int", "identity": true}, {"name": "VendorId", "type": "int", "nullable": false}, {"name": "Score", "type": "decimal(5,2)", "nullable": false, "default": "0", "description": "0-100"}] primary_key: ["VendorScoreId"] foreign_keys: [{"columns": ["VendorId"], "references": "dbo.Vendor"}] (ref_columns default to the parent's primary key) indexes: [{"columns": ["ScoredOn"], "include": ["Score"], "unique": false}]

NameTypeReqDescription
columnsarrayyes
connectionstring
descriptionstring
foreign_keys
indexes
namestringyes
primary_key

No output schema declared.

No examples provided.

build_procedure ~153

Generate a CREATE OR ALTER PROCEDURE script (TEXT ONLY -- never executed here) around a query. Give inline 'sql', or a library 'query' -- then its header params (name, type, default) become the procedure's parameters automatically. Every @variable in the body must be a typed parameter. params: [{"name": "@StartDate", "type": "date", "default": "'2026-01-01'", "description": "first order date"}] Returns sql + undo_sql + notes (including an EXEC example).

NameTypeReqDescription
descriptionstring
namestringyes
params
querystring
sqlstring

No output schema declared.

No examples provided.

build_select ~242

Generate a SELECT from the cached schema: names validated, joins inferred from foreign keys (bridge tables added automatically), aliases assigned, GROUP BY derived. Returns SQL text only; nothing is executed. tables: ["dbo.PoHeader", "dbo.Vendor"] (first = FROM; the rest are joined) columns: ["Vendor.Name", "PoHeader.OrderDate"] (Table.Column, or a bare Column when unambiguous) aggregates: [{"fn": "SUM", "column": "PoLine.Amount", "alias": "Total"}] fn: SUM COUNT COUNT_DISTINCT AVG MIN MAX filters: ["PoHeader.OrderDate >= @Start", "Vendor.Country = 'US'"] (ANDed; use @params for values) order_by: ["Total DESC"] top: 50 join_type: INNER | LEFT

NameTypeReqDescription
aggregates
columns
connectionstring
distinctboolean
filters
join_typestring
order_by
tablesarrayyes
top

No output schema declared.

No examples provided.

build_view ~77

Generate a CREATE OR ALTER VIEW script (TEXT ONLY -- never executed here) from a SELECT or a library query. Refuses what a view cannot contain: parameters, DECLARE, ORDER BY without TOP.

NameTypeReqDescription
descriptionstring
namestringyes
querystring
sqlstring

No output schema declared.

No examples provided.

delete_query ~45

Remove a query from the library. Its text is kept in a snapshot, so restore_snapshot brings it back.

NameTypeReqDescription
dry_runboolean
querystringyes

No output schema declared.

No examples provided.

describe_table ~63

Columns (type, nullability, identity/computed), primary key, indexes, foreign keys in both directions and row count of one table or view. Always do this before writing SQL against a table.

NameTypeReqDescription
connectionstring
tablestringyes

No output schema declared.

No examples provided.

explain_query ~92

Estimated execution plan, summarised: the expensive operators, scans on big tables, key lookups, sorts, implicit conversions, optimizer warnings and missing-index suggestions. The query is compiled, NOT executed, so this is safe on heavy queries. (SQL Server login needs the SHOWPLAN permission.)

NameTypeReqDescription
connectionstring
params
querystring
sqlstring

No output schema declared.

No examples provided.

extract_parameter ~95

Turn a hard-coded value in a saved query into a parameter: every occurrence of the literal ('2026-01-01', 100) becomes @param, and a '-- param:' header line is added with the old value as its default.

NameTypeReqDescription
descriptionstring
dry_runboolean
literalstringyes
paramstringyes
querystringyes

No output schema declared.

No examples provided.

find_join_path ~54

How two tables relate: the shortest chain of declared foreign keys between them, as ready-to-use JOIN lines.

NameTypeReqDescription
connectionstring
from_tablestringyes
to_tablestringyes

No output schema declared.

No examples provided.

find_usage ~56

Impact analysis: which saved queries read a given table/view (and optionally a given column of it). Ask this before a table or column is changed, renamed or retired.

NameTypeReqDescription
columnstring
tablestringyes

No output schema declared.

No examples provided.

format_sql ~62

Pretty-print T-SQL in one canonical style. Normalises cosmetics (adds AS to aliases, rewrites '[x] = expr' aliases to 'expr AS [x]'); meaning is unchanged. Comments inside expressions may move.

NameTypeReqDescription
sqlstringyes

No output schema declared.

No examples provided.

get_query ~36

One saved query: header fields, parameters, the SQL, what tables it touches, and lint findings.

NameTypeReqDescription
querystringyes

No output schema declared.

No examples provided.

lint_library ~49

Lint every saved query (against each query's cached connection schema when available). Catches queries broken by a schema change: run it after refresh_schema.

NameTypeReqDescription
min_severitystring

No output schema declared.

No examples provided.

lint_sql ~89

Check a query for correctness traps (NOT IN + NULLs, LEFT JOIN turned INNER by WHERE, join without ON, TOP without ORDER BY), performance problems (functions on filtered columns, SELECT *, NOLOCK, leading-wildcard LIKE) and style. With a connection whose schema is cached, also verifies every table and column exists.

NameTypeReqDescription
connectionstring
sqlstringyes

No output schema declared.

No examples provided.

list_connections ~41

List the configured database connections (from sqlglass.toml), which is the default, where the query library lives, and whether each connection has a cached schema.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_queries ~49

Browse the saved-query library. 'search' matches id, name, description and the SQL text; 'tag' filters by tag.

NameTypeReqDescription
searchstring
tagstring

No output schema declared.

No examples provided.

list_snapshots ~22

Before-images taken automatically ahead of every library write, newest first.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_tables ~68

List tables and views with row counts and descriptions. Filter by schema name and/or a name pattern ('*invoice*'). For a big database prefer search_schema.

NameTypeReqDescription
connectionstring
limitinteger
patternstring
schemastring

No output schema declared.

No examples provided.

preview_write ~197

Dry-run a write WITHOUT writing: converts one UPDATE / DELETE / INSERT into the read-only SELECT that shows what it would do, plus a COUNT(*) of affected rows. The write statement itself is never sent to the database. UPDATE -> key columns + each SET column as '[col (current)]' / '[col (new)]' (changed_only=true hides no-op rows) DELETE -> the rows that would be removed (and which child tables reference them) INSERT -> the rows that would be added, under the target's column names run=true also executes the preview (read-only, row-capped) and returns the affected-row count and first rows. This server cannot apply the write; hand the reviewed statement to the user to run themselves.

NameTypeReqDescription
changed_onlyboolean
connectionstring
params
runboolean
sqlstringyes

No output schema declared.

No examples provided.

profile_table ~73

Per-column row count, NULLs, distinct values, min and max, in one aggregate query. Use it to learn a column's grain and range before filtering or joining on it. Up to 15 columns per call.

NameTypeReqDescription
columns
connectionstring
tablestringyes

No output schema declared.

No examples provided.

refresh_schema ~55

Re-read tables, views, columns, keys, indexes and foreign keys from the database into the local cache. Run this when a table or column seems to be missing, or after the database changed.

NameTypeReqDescription
connectionstring

No output schema declared.

No examples provided.

rename_in_library ~139

Follow a database rename through every saved query, token-aware (strings and comments untouched). kind='table': old='dbo.Vendor', new='dbo.Supplier' kind='column': table='dbo.Vendor', old='Name', new='VendorName' (alias-qualified references, and bare ones in single-table queries; ambiguous bare references are reported, not changed). dry_run defaults to TRUE: review the diff, then call again with dry_run=false.

NameTypeReqDescription
dry_runboolean
kindstringyes
newstringyes
oldstringyes
tablestring

No output schema declared.

No examples provided.

restore_snapshot ~62

Put the queries in a snapshot back to how they were before that write ('latest' = undo the last write). The restore is itself snapshotted, so it can be undone too.

NameTypeReqDescription
dry_runboolean
snapshot_idstring

No output schema declared.

No examples provided.

run_query ~132

Run a read-only query and return the first rows. Give either inline 'sql' or a library 'query' (id or name). params: {"@Start": "2026-01-01"}; library queries fall back to their header defaults. Anything but SELECT/WITH is refused before reaching the database. Rows are capped at the connection's max_rows (lower it with max_rows=); to look at big data, aggregate in SQL.

NameTypeReqDescription
connectionstring
max_rows
params
querystring
sqlstring

No output schema declared.

No examples provided.

sample_table ~52

A few rows of a table or view, to see what the values actually look like.

NameTypeReqDescription
columns
connectionstring
rowsinteger
tablestringyes

No output schema declared.

No examples provided.

save_query ~223

Save a query to the library as <id>.sql (id may contain folders: 'purchasing/open-pos-by-vendor'). sql is the body only -- do not DECLARE the parameters in it; describe them in params: [{"name": "@Start", "type": "date", "default": "'2026-01-01'", "description": "first order date"}] Updating an existing query needs overwrite=true; header fields left empty keep their current value. kind='script' stores DDL text from build_create_table / build_procedure / build_view (e.g. id 'ddl/usp_open_pos'): kept and versioned with the queries, but never linted as a query and never executed.

NameTypeReqDescription
connectionstring
descriptionstring
dry_runboolean
idstringyes
kindstring
namestring
overwriteboolean
params
sqlstringyes
tags

No output schema declared.

No examples provided.

search_schema ~58

Find tables and columns whose name contains the text (or matches a * ? wildcard pattern), plus tables whose description mentions it. The way to locate data in an unfamiliar database.

NameTypeReqDescription
connectionstring
patternstringyes

No output schema declared.

No examples provided.

translate_sql ~90

Translate a query between dialects (tsql, postgres, mysql, sqlite, snowflake, bigquery, databricks, oracle, duckdb, redshift): TOP<->LIMIT, ISNULL/COALESCE, GETDATE, DATEADD, string functions, quoting.

NameTypeReqDescription
from_dialectstring
sqlstringyes
to_dialectstringyes

No output schema declared.

No examples provided.

Common questions

What is the sqlglass MCP server?

sqlglass is an MCP server listed in the public MCP registry as io.github.S-CurveLabs/sqlglass. SQL Server / Azure SQL for agents: real schema, lint, read-only runs, plans, write previews. This page covers its PyPI package (sqlglass).

Is the sqlglass MCP server safe to use?

sqlglass scores 65 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the sqlglass MCP server expose?

sqlglass exposes 29 tools: list_connections, refresh_schema, list_tables, describe_table, search_schema, and 24 more. Their descriptions and schemas cost roughly 2,706 tokens of context every time the server is loaded.

Is the sqlglass MCP server still maintained?

sqlglass is still listed as active in the MCP registry. We last reached this channel on 23 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.