Prototipo · Versión preliminar: todos los servidores del registro oficial, sincronizados cada 30 minutos. Las reseñas y las cuentas llegarán en una etapa posterior.
PopNx MCPServidores MCP para quienes usan IA · explicados con palabras sencillas

sql-steward

de Pawansingh3889versión 0.4.0i★ –iSe ejecuta en tu computadora
Nombre en el registroio.github.Pawansingh3889/sql-steward

Instalar

Resumen

Descripción del creador (original en inglés)

The agent never writes SQL: queries compile from a semantic layer you control, PII refused first.

Los tres pilares de PopNx MCP

Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.

Qué puedes hacer con él

Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.

  • Conexión: Se ejecuta en tu computadora
  • Transporte: stdio
  • Categoría: Bases de datos y conjuntos de datos
  • Debes completar: SQL_STEWARD_DB_URL

Instalación

Elige la app de IA que usas y copia la configuración.

Antes de instalar

Los valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.

Necesitas

  • PyPIuv de Python instalado (para el comando uvx)

¿Qué app usas?

Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.

Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json

{
  "mcpServers": {
    "sql-steward": {
      "command": "uvx",
      "args": [
        "sql-steward"
      ],
      "env": {
        "SQL_STEWARD_DB_URL": "your-value",
        "SQL_STEWARD_LAYER": "your-value"
      }
    }
  }
}

Ejecuta esto en tu terminal

claude mcp add sql-steward --env SQL_STEWARD_DB_URL=your-value --env SQL_STEWARD_LAYER=your-value -- uvx sql-steward

Completa los valores vacíos antes de ejecutarlo.

Abrir en Cursor

O copia la configuración tú

Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json

{
  "mcpServers": {
    "sql-steward": {
      "command": "uvx",
      "args": [
        "sql-steward"
      ],
      "env": {
        "SQL_STEWARD_DB_URL": "your-value",
        "SQL_STEWARD_LAYER": "your-value"
      }
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Abrir en VS Code

O copia la configuración tú

Pégalo en .vscode/mcp.json de tu proyecto

{
  "servers": {
    "sql-steward": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "sql-steward"
      ],
      "env": {
        "SQL_STEWARD_DB_URL": "your-value",
        "SQL_STEWARD_LAYER": "your-value"
      }
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.

Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.

Valores que debes completar

  • SQL_STEWARD_DB_URL secreto obligatorio env
    SQLAlchemy URL of the database to read (read-only account recommended)
  • SQL_STEWARD_LAYER env
    Path to the semantic layer YAML (default: semantic.yaml)

Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.

Qué puede hacer

Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.

Revisiones básicasi

Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026

  • ✓ Superada

    El creador coincide con el repo

    El nombre en el registro se verificó con la cuenta de GitHub Pawansingh3889, dueña del repo

  • … Aún sin revisar

    Sigue en mantenimiento

    Todavía no hemos leído este repo en GitHub

  • … Aún sin revisar

    Tiene licencia

    Todavía no hemos leído este repo en GitHub

  • – No aplica

    El endpoint responde

    Este se ejecuta en tu computadora; no hay endpoint en internet

  • – No aplica

    Inicio de sesión con OAuth

    Se ejecuta en tu computadora y usa ajustes locales en su lugar

  • … Aún sin revisar

    Sin instrucciones ocultas en las descripciones de herramientas

    Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet

Comparado con otros en Bases de datos y conjuntos de datosi

  • Más estrellas que el 0% de los otros 954 servidores de esta categoría
  • Publicado en el registro más recientemente que el 20% de los otros 954 servidores de esta categoría
  • Revisiones básicas iguales o mejores que el 100% de los otros 954 servidores de esta categoría

Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.

Preguntas frecuentes

¿Es seguro sql-steward?

Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.

¿Qué claves o códigos necesita?

Debes completar: SQL_STEWARD_DB_URL

¿Se ejecuta en mi computadora o en la nube?

Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).

¿Sigue en mantenimiento?

El repo de GitHub cambió por última vez –, y la última versión (0.4.0) llegó al registro hace 4 meses.

¿Qué apps pueden usarlo?

Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.

¿Qué puedo usar en su lugar?

En la misma categoría: Supabase, MongoDB MCP Server, Elasticsearch MCP Server

Alternativas

Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.

Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi

Supabase

de supabase

MCP server for interacting with the Supabase platform

Computadora o nube★ 2993Apache-2.0Actualizado hoy
Instalar

MongoDB MCP Server

de mongodb-js

MongoDB Model Context Protocol Server

Se ejecuta en tu computadora★ 1157Apache-2.0Actualizado anteayer
Instalar

MCP server for interacting with Elasticsearch

Se ejecuta en tu computadora★ 315Apache-2.0Actualizado hace 14 meses
Instalar

README del creador

Abrir el README

Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.

[!IMPORTANT]

This repository has moved into the [Governed Agent Stack](https://github.com/Pawansingh3889/governed-agent-stack) monorepo.

Active development is now at packages/sql-steward/.

This repo is archived and read-only. Its full commit history is preserved here;

new work, issues and releases happen in the monorepo.


sql-steward

Part of the Governed Agent Stack: free, on-prem building blocks for an AI agent you can point at a real database and audit.

A governed SQL gateway for AI agents, exposed over the Model Context Protocol. The agent never gets a connection string and never writes SQL. It calls typed tools; sql-steward compiles every query from a semantic layer you control, refuses blocked PII before the query runs, and returns rows. Same tools across SQL Server, Postgres and SQLite.

Most SQL MCP servers hand the model a run_sql tool and try to catch the bad queries on the way out. sql-steward removes the tool. There is no path from a prompt to raw SQL at your database, because the only thing the agent can do is name an entity or a metric and pick from allow-lists you wrote.

See it defend a database live. The governed vs ungoverned demo runs the same request through a naive run_sql agent, which leaks customer PII and empties a table, and through sql-steward, which refuses it at compile time.

Three guarantees

  1. Read-only by construction. There is no run_sql, query, or execute tool. The compiler can only ever build a SELECT, so a write isn't blocked, it's unrepresentable.
  2. PII refused before retrieval. Every field can carry a PII tag. If a request touches a category your policy blocks, sql-steward refuses with a structured reason before any SQL is compiled or run.
  3. Auditable. Every call, refusal and error can be recorded in a tamper-evident, hash-chained log via agent-blackbox, with audit-verify to prove nothing was rewritten.

See it in 10 seconds

pip install sql-steward      # or: pipx install sql-steward

sql-steward demo # zero config, no API key, no agent, SQLite

  1. get_metric('mrr_total', dimensions=['plan']) -> safe aggregate compiled: SELECT subscriptions.plan, SUM(subscriptions.mrr) AS mrr_total FROM subscriptions GROUP BY subscriptions.plan LIMIT 1000 {'plan': 'pro', 'mrr_total': 297.0} {'plan': 'team', 'mrr_total': 598.0}
  1. get_metric('mrr_total', dimensions=['customers.country']) -> auto-join compiled: ... INNER JOIN customers ON subscriptions.customer_id = customers.id ...
  1. get_records('customers', fields=['id','email']) -> PII refusal refused: {"kind": "pii_blocked", "detail": "Field 'customers.email' is tagged EMAIL_ADDRESS, which this policy refuses."}

The semantic layer

This YAML is the entire contract between the agent and your database. Review it like code.

dialect: postgres

entities: customers: table: customers fields: id: {type: int} name: {type: text, pii: PERSON} email: {type: text, pii: EMAIL_ADDRESS} country: {type: text} subscriptions: table: subscriptions fields: customer_id: {type: int} plan: {type: text} mrr: {type: numeric}

joins: # nothing reachable that isn't listed here

  • left: subscriptions right: customers on: subscriptions.customer_id = customers.id

metrics: mrr_total: # the aggregation is fixed; the agent only entity: subscriptions # chooses dimensions/filters from the lists aggregate: sum field: mrr dimensions_allowed: [plan, status, customers.country] filters_allowed: [status, customers.country]

policy: block_pii: [EMAIL_ADDRESS, CREDIT_CARD] max_rows: 1000

Ask for a join that isn't defined and you get unreachable_entity, not an invented relationship. Ask to group a metric by a dimension that isn't listed and you get dimension_not_allowed. Misspell a metric or field and the error lists what does exist, with the closest spellings, so an agent corrects itself in one turn instead of making a second discovery call.

Tools exposed to the agent

ToolPurpose
list_entities()What can be read, plus the available metrics
describe_entity(entity)Fields, types and PII tags (blocked ones flagged)
list_metrics()Metrics and the dimensions/filters each allows
get_records(entity, fields, filters, order_by, limit)Read rows from one entity
get_metric(metric, dimensions, filters, limit)Compute a pre-approved aggregate
semantic_search(entity, query, k, filters)pgvector nearest-neighbour search over an entity's embedding column
audit_verify()Verify the tamper-evident audit chain

Filters are {field, op, value}; operators are =, !=, <, <=, >, >=, like, in, not in, is null, is not null. Values are always bound parameters, never inlined.

Wire it into an MCP client

The semantic layer YAML lives wherever you point SQL_STEWARD_LAYER. Claude Desktop (claude_desktop_config.json):

{

"mcpServers": { "sql-steward": { "command": "sql-steward", "env": { "SQL_STEWARD_LAYER": "/full/path/to/semantic.yaml", "SQL_STEWARD_DB_URL": "postgresql+psycopg://readonly@db.internal/warehouse" } } } }

SQL_STEWARD_DB_URL is a SQLAlchemy URL, so the same server reads SQL Server (mssql+pyodbc://...), Postgres (postgresql+psycopg://...) or SQLite (sqlite:///path.db). Install the matching driver with the extras: pip install "sql-steward[postgres]" or "[mssql]".

Optional: the rest of the stack

The semantic layer is the primary control. These are extra layers, all opt-in, and no-ops if the library isn't installed:

pip install "sql-steward[rbac,mask,audit]"

export SQL_STEWARD_POLICY=/path/to/policy.yaml # query-warden second-pass role check export SQL_STEWARD_ROLE=analyst export SQL_STEWARD_MASK=1 # pii-veil masks anything left in results export SQL_STEWARD_AUDIT_DB=logs/steward.db # agent-blackbox audit chain (on if installed) export SQL_STEWARD_QUERY_BUDGET=200 # persistent per-role query cap (SQLite-backed) export SQL_STEWARD_BUDGET_WINDOW=3600 # optional: make the cap a sliding window, in seconds export SQL_STEWARD_EMBED_URL=http://localhost:11434/api/embeddings # local embeddings for semantic_search export SQL_STEWARD_EMBED_MODEL=nomic-embed-text

Semantic search (pgvector)

Give an entity a search block pointing at a pgvector column and the agent gets a semantic_search tool, governed exactly like everything else (PII refused, results masked, calls audited):

entities:

documents: table: documents fields: id: {type: int} title: {type: text} embedding: {type: vector} search: vector_column: embedding dim: 768 returns: [id, title]

The query text is embedded locally (set SQL_STEWARD_EMBED_URL to a local Ollama endpoint, so nothing leaves the building), and matched with pgvector's <=> operator. PostgreSQL only. The embedding column is never returned.

  • query-warden re-checks the compiled SQL against a role policy.
  • pii-veil masks any PII that survives into result rows.
  • agent-blackbox records every call in a hash-chained ledger; sql-steward audit-verify checks it.

Security model

sql-steward governs the path from the model to your database. It assumes the process that calls its tools is trusted. That boundary is the difference between deploying it safely and exposing it, so it is worth stating plainly.

What it enforces, whatever the model asks. Every call runs the same gate: read-only by construction, blocked PII refused before retrieval, an optional role check via query-warden, results masked by pii-veil, and a hash-chained audit of the call. A jailbroken model still cannot write, cannot read a blocked column, and cannot reach an entity the layer does not define. These hold by construction, not by trusting the model to behave.

What it does not do. sql-steward is an enforcement plane, not a front door.

  • It does not authenticate the caller. SQL_STEWARD_ROLE is configuration, not a verified identity; sql-steward trusts that the role it is handed is the correct one.
  • It does not resolve per-user permissions. If different users should see different data, the caller maps the user to a role and sets it before invoking. The role check enforces a policy, it does not decide who you are.
  • It does not secure transport. Run it over stdio to a local host, or place it behind something that terminates TLS.
  • It does not manage secrets. SQL_STEWARD_DB_URL and the audit key AGENT_BLACKBOX_KEY are read from the environment; supply them from a secret store, not a checked-in file.

What you provide. sql-steward is built to sit behind a trusted caller, whether that is an MCP host on the same machine or a gateway that has already authenticated the user.

  • Invoke it from a trusted process: a subprocess of an MCP host you control (stdio), or a service behind a gateway that authenticates the request and maps the verified identity to a role before the call.
  • Give it a least-privilege, read-only database account. Writes are unrepresentable in the compiler, but a read-only grant is defense in depth and the right blast radius if a dependency is ever wrong.
  • Keep the database and any local embedding endpoint on a private network. Do not expose the server to untrusted callers.
  • Treat the connection string and the audit key as secrets.

The threat it is built for. The design assumes a capable, possibly compromised model and a trusted operator. It bounds what the agent can do with your database. It does not replace your identity provider and is not meant to face an untrusted network alone. Point it at a real database from behind a host or gateway you trust, and the three guarantees are what the model is left with.

How this is different

A typical SQL MCP validates arbitrary SQL the model wrote (a blocklist: catch what's bad). sql-steward compiles SQL from definitions you wrote (an allow-list: only what's described exists). The read-only and PII guarantees hold by construction rather than by inspection, and the query surface is the same across three engines.

Versus a semantic layer (Cube, dbt Semantic Layer, Cortex Analyst, Genie)

The nearest tools are not other MCP servers, they are semantic layers. Cube and the dbt Semantic Layer already expose compiled, metric-only access, and Snowflake Cortex Analyst and Databricks Genie both answer natural-language questions over a governed model. If you run on their platform, use them. This project exists for the case they do not cover:

  • On-prem and air-gappable. sql-steward is a pip install that talks to SQL Server, Postgres or SQLite with no account, no warehouse, and no data leaving the building. Cortex Analyst is Snowflake, Genie i

Solo se muestra el principio; lee el resto en el repo

Pregunta a PopNx