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

Warehouse MCP

de tantn89versión 0.1.0i★ –iSe ejecuta en tu computadora
Nombre en el registroio.github.tantn89/warehouse-mcp

Instalar

Resumen

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

Governed read-only warehouse access for agents: SQL guard, row policies, PII pseudonyms, audit log.

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: WAREHOUSE_MCP_POSTGRES_DSN, WAREHOUSE_MCP_PII_SALT

Instalación

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

Antes de instalar

  • Revisiones básicas: 1 de 1 superadas
  • Se ejecuta en tu computadora con los permisos de tu usuario (archivos, red, apps).
  • Debes completar tú: WAREHOUSE_MCP_POSTGRES_DSN, WAREHOUSE_MCP_PII_SALT, WAREHOUSE_MCP_AUDIT_LOG

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": {
    "warehouse": {
      "command": "uvx",
      "args": [
        "warehouse-mcp"
      ],
      "env": {
        "WAREHOUSE_MCP_POSTGRES_DSN": "your-value",
        "WAREHOUSE_MCP_PII_SALT": "your-value",
        "WAREHOUSE_MCP_AUDIT_LOG": "your-value"
      }
    }
  }
}

Ejecuta esto en tu terminal

claude mcp add warehouse --env WAREHOUSE_MCP_POSTGRES_DSN=your-value --env WAREHOUSE_MCP_PII_SALT=your-value --env WAREHOUSE_MCP_AUDIT_LOG=your-value -- uvx warehouse-mcp

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": {
    "warehouse": {
      "command": "uvx",
      "args": [
        "warehouse-mcp"
      ],
      "env": {
        "WAREHOUSE_MCP_POSTGRES_DSN": "your-value",
        "WAREHOUSE_MCP_PII_SALT": "your-value",
        "WAREHOUSE_MCP_AUDIT_LOG": "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": {
    "warehouse": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "warehouse-mcp"
      ],
      "env": {
        "WAREHOUSE_MCP_POSTGRES_DSN": "your-value",
        "WAREHOUSE_MCP_PII_SALT": "your-value",
        "WAREHOUSE_MCP_AUDIT_LOG": "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

  • WAREHOUSE_MCP_POSTGRES_DSN secreto env
    Postgres connection string of a read-only role (Postgres configs only).
  • WAREHOUSE_MCP_PII_SALT secreto env
    Fixed salt for stable pseudonyms across restarts (16-128 letters or digits).
  • WAREHOUSE_MCP_AUDIT_LOG env
    Path of the JSONL audit log; stderr when unset.

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 8 nov 2026

  • ✓ Superada

    El creador coincide con el repo

    El nombre en el registro se verificó con la cuenta de GitHub tantn89, 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 1139 servidores de esta categoría
  • Publicado en el registro más recientemente que el 84% de los otros 1139 servidores de esta categoría
  • Revisiones básicas iguales o mejores que el 100% de los otros 1139 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 Warehouse MCP?

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: WAREHOUSE_MCP_POSTGRES_DSN, WAREHOUSE_MCP_PII_SALT

¿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.1.0) llegó al registro hace 6 días.

¿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 ayer
Instalar

MongoDB MCP Server

de mongodb-js

MongoDB Model Context Protocol Server

Se ejecuta en tu computadora★ 1157Apache-2.0Actualizado hace 3 días
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.

warehouse-mcp

Give AI agents your warehouse without giving them your warehouse.

An MCP server that lets Claude, Cursor or any MCP client query DuckDB, Postgres or BigQuery through a governed, read-only layer:

  • a semantic model, so agents ask in business terms;
  • a SQL guard that an agent cannot talk into writing, reading files or leaving its lane;
  • per-role row policies;
  • pseudonymized personal data;
  • an audit log;
  • a cost cap.

Every claim below is backed by a test or a measured run.

Write-up: An alias that walked past my SQL guard: red-teaming an MCP server for warehouse access

What was checkedResultEvidence
104 bypass attempts (exfiltration, row-filter escapes, PII probes, file and system access, statement smuggling, resource abuse)0 leaks on DuckDB and on Postgrestests/test_red_team.py, run in CI
Same 15 queries on three enginesIdentical results on DuckDB, Postgres and BigQueryparity tests, BigQuery run
Writes with the SQL guard bypassedRefused by the engine itself: read-only transaction, then grantstest_postgres_parity.py
A careless agent query on a multi-terabyte tableRefused before billing: *"would scan 4.65 GB, above the 1.00 GB cap"*BigQuery run
A Claude Haiku 5.5 agent answering over MCP, graded against SQL ground truth (26 cases, 3 trials each)78/78 correct, including 6 governance cases, at $0.0016 per question, p95 6.3 s. Gated by regressgateevals/cases.jsonl

Try it in one line

The bundled demo serves about 100k live Wikipedia edits, captured by realtime-lakehouse, from a local DuckDB file. No keys are needed.

{

"mcpServers": { "warehouse": { "command": "uvx", "args": ["warehouse-mcp", "--demo"] } } }

Put that in Claude Desktop's config, or run claude mcp add warehouse -- uvx warehouse-mcp --demo. Then ask *"Which wikis had the most bot activity, and how many distinct editors did each have?"*

What the agent sees, taken from real tool calls on the demo:

warehouse_query_metrics(dataset="edits", metrics=["edits","editors","bot_share"], dimensions=["wiki"])

wiki edits editors bot_share enwiktionary 41594 46 0.994 commonswiki 16053 224 0.849 enwiki 9576 1401 0.489

warehouse_run_sql("SELECT editor, count(*) AS edits FROM edits GROUP BY editor ORDER BY edits DESC") pii_6b19c4a15ccf 41335 <- a pseudonym: counts and joins are exact, the name never leaves pii_6a8d5fd6c44b 9638

warehouse_run_sql("SELECT * FROM edits; DROP TABLE edits") Error: Send exactly one statement; multiple statements are not allowed. warehouse_run_sql("SELECT pg_read_file('/etc/passwd') FROM edits") Error: Function pg_read_file() is not allowed. Use standard SQL functions (...)

How it works

flowchart LR

A[Agent] -->|MCP: stdio, or HTTP + bearer key| T[4 read-only tools] T --> R[Role from the key] R --> G[SQL guard sqlglot, backend dialect] G -->|rewrite each dataset into| P[Policy subquery declared columns only salted pseudonyms role row filter] P --> B[(Backend safeguards DuckDB: read-only, no file access Postgres: read-only txn + grants BigQuery: dry run + byte cap)] B --> X[Cell cap + email/phone redaction] X --> L[Audit log no values, no salt] L --> A

Pseudonymize at the source, not in the output. The guard rewrites every dataset reference into a subquery that replaces personal columns with a salted hash, inside the warehouse. As a result:

  • count(DISTINCT editor) stays exact;
  • joins on pseudonyms work across datasets;
  • a probe like WHERE editor = 'Alice' matches nothing, because the comparison runs against the hash;
  • names never cross the wire.

Masking the output after lineage analysis can be bypassed with aliases, expressions or functions. Here the raw column is simply not reachable.

Each layer is designed to hold if the layer before it fails. The guard is the first layer:

  • single statements only;
  • SELECT only;
  • declared datasets only;
  • function allowlist;
  • CTE references resolved by scope, so WITH t AS (SELECT * FROM t) cannot reach the real table t;
  • capped LIMIT.

Behind it, each engine is locked down on its own, and the tests prove it with the guard bypassed.

The tools:

ToolUse
warehouse_list_datasetsWhat the caller's role may query, with each dataset's grain and metrics
warehouse_describe_datasetColumns, which are pseudonymized, row policy, and 3 sample rows
warehouse_query_metricsPreferred path. Named metrics by dimensions and time buckets. The SQL is built as a syntax tree, so filter values are never SQL
warehouse_run_sqlOne guarded SELECT, for questions metrics cannot express

What the red team found

The adversarial suite found three real gaps outside the SQL guard. All three are fixed and kept as regression tests:

  1. ReDoS after the timeout. The email-redaction regex backtracked quadratically, and a 1 MB string from repeat('x', 1000000) would have held the server for about 12 minutes. It ran *after* the warehouse timeout, so nothing stopped it. The fix bounds the regex repeats and cuts cells before redaction.
  2. A single huge row skipped the result cap. The fix halves the longest text cells until the row fits.
  3. Pseudonyms could be linked back to names. An edit to one's own User: page pairs a pseudonym with a title that contains the name. That re-identified 5.7% of editors in the snapshot where it was found. The fix adds conditional PII (pii_when: "namespace IN (2, 3)") for user-page titles and pseudonymizes edit summaries.

An independent review by a second model then found a gap the suite had missed, this time *in* the guard:

  1. An alias could disguise a real table as a CTE. In WITH x AS (...) SELECT * FROM edits_raw x, x, the guard matched CTE references by alias, so the physical table skipped the policy rewrite. CTE references are now resolved by table name within each scope, and aliasing a real table to a visible CTE name is refused.
  2. Engine errors quoted data. A message such as Could not convert string ' ' bypassed result redaction and reached both the agent and the audit log. Error messages now lose their quoted values and are redacted and capped.

Running the parity cases on BigQuery found one more problem, a correctness bug rather than a leak: time literals were cast to DATETIME against TIMESTAMP columns. It is fixed.

Configure your own warehouse

extends: demo:wikipedia            # or write datasets/roles from scratch

connection: {kind: postgres, dsn_env: WAREHOUSE_MCP_POSTGRES_DSN}

roles:

  • {name: analyst, datasets: "*", api_key_env: KEY_ANALYST}
  • name: enwiki_partner # an external partner sees one wiki only datasets: [edits, edits_per_minute] row_filters: {edits: "wiki = 'enwiki'", edits_per_minute: "wiki = 'enwiki'"} api_key_env: KEY_PARTNER
  • {name: trust_and_safety, datasets: "*", pii_clearance: true, api_key_env: KEY_TS}

Datasets declare their columns, which ones are pii or pii_when, which are free_text, and named metrics. Undeclared columns do not exist for the agent. Over HTTP (warehouse-mcp --config my.yaml --transport http) each bearer key selects a role. Keys come from environment variables; the config holds no secrets.

Setup for each backend, Claude Desktop snippets and the eval workflow are in docs/deployment-guide.md. For rolling this out at a company (discovery, access model, staged rollout, success metrics, incident runbook), see docs/deployment-playbook.md.

Development

pip install -e ".[dev]"

pytest # DuckDB; Postgres/BigQuery suites skip without a DSN docker compose up -d && python scripts/load_snapshot.py --target postgres WAREHOUSE_MCP_POSTGRES_DSN=postgresql://mcp_reader:local-only-reader-password@127.0.0.1:55432/warehouse pytest

Architecture and threat model · codebase map · roadmap

Limits

  • Phone-number redaction applies to columns tagged free_text. An alias such as comment AS c loses the phone pass; it keeps email redaction, which applies everywhere.
  • HTTP uses static bearer keys and plain HTTP. Put TLS in front of it. OAuth resource-server mode is on the roadmap.
  • Snowflake is on the roadmap.

Data

The demo data comes from Wikimedia's public recent-changes stream, licensed CC BY-SA 4.0. Code is MIT.

Pregunta a PopNx