原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Warehouse MCP

作者:kalehdoo版本 0.4.2i★ –i在你的电脑上运行
注册名称io.github.kalehdoo/warehouse-mcp

安装

概览

作者提供的说明(英文原文)

Production MCP server for Postgres, Oracle, Snowflake, BigQuery, Redshift, DuckDB, MotherDuck.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 数据库与数据集
  • 你需要填写:WAREHOUSE_TYPE, MCP_API_KEYS, MOTHERDUCK_TOKEN, PG_PASSWORD, ORACLE_PASSWORD

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: MCP_TRANSPORT, WAREHOUSE_TYPE, MCP_API_KEYS, DUCKDB_PATH, MOTHERDUCK_TOKEN, PG_HOST, PG_DATABASE, PG_USER, PG_PASSWORD, ORACLE_USER, ORACLE_PASSWORD, ORACLE_CONNECT_STRING, SNOWFLAKE_ACCOUNT, SNOWFLAKE_USER, SNOWFLAKE_PRIVATE_KEY_PATH, BIGQUERY_PROJECT, GOOGLE_APPLICATION_CREDENTIALS, GUARDRAIL_PII_MASK, MCP_RATE_LIMIT_RPM

标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。

你需要

  • npm已安装 Node.js(用于 npx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "warehouse": {
      "command": "npx",
      "args": [
        "-y",
        "warehouse-mcp"
      ],
      "env": {
        "MCP_TRANSPORT": "your-value",
        "WAREHOUSE_TYPE": "your-value",
        "MCP_API_KEYS": "your-value",
        "DUCKDB_PATH": "your-value",
        "MOTHERDUCK_TOKEN": "your-value",
        "PG_HOST": "your-value",
        "PG_DATABASE": "your-value",
        "PG_USER": "your-value",
        "PG_PASSWORD": "your-value",
        "ORACLE_USER": "your-value",
        "ORACLE_PASSWORD": "your-value",
        "ORACLE_CONNECT_STRING": "your-value",
        "SNOWFLAKE_ACCOUNT": "your-value",
        "SNOWFLAKE_USER": "your-value",
        "SNOWFLAKE_PRIVATE_KEY_PATH": "your-value",
        "BIGQUERY_PROJECT": "your-value",
        "GOOGLE_APPLICATION_CREDENTIALS": "your-value",
        "GUARDRAIL_PII_MASK": "your-value",
        "MCP_RATE_LIMIT_RPM": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add warehouse --env MCP_TRANSPORT=your-value --env WAREHOUSE_TYPE=your-value --env MCP_API_KEYS=your-value --env DUCKDB_PATH=your-value --env MOTHERDUCK_TOKEN=your-value --env PG_HOST=your-value --env PG_DATABASE=your-value --env PG_USER=your-value --env PG_PASSWORD=your-value --env ORACLE_USER=your-value --env ORACLE_PASSWORD=your-value --env ORACLE_CONNECT_STRING=your-value --env SNOWFLAKE_ACCOUNT=your-value --env SNOWFLAKE_USER=your-value --env SNOWFLAKE_PRIVATE_KEY_PATH=your-value --env BIGQUERY_PROJECT=your-value --env GOOGLE_APPLICATION_CREDENTIALS=your-value --env GUARDRAIL_PII_MASK=your-value --env MCP_RATE_LIMIT_RPM=your-value -- npx -y warehouse-mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "warehouse": {
      "command": "npx",
      "args": [
        "-y",
        "warehouse-mcp"
      ],
      "env": {
        "MCP_TRANSPORT": "your-value",
        "WAREHOUSE_TYPE": "your-value",
        "MCP_API_KEYS": "your-value",
        "DUCKDB_PATH": "your-value",
        "MOTHERDUCK_TOKEN": "your-value",
        "PG_HOST": "your-value",
        "PG_DATABASE": "your-value",
        "PG_USER": "your-value",
        "PG_PASSWORD": "your-value",
        "ORACLE_USER": "your-value",
        "ORACLE_PASSWORD": "your-value",
        "ORACLE_CONNECT_STRING": "your-value",
        "SNOWFLAKE_ACCOUNT": "your-value",
        "SNOWFLAKE_USER": "your-value",
        "SNOWFLAKE_PRIVATE_KEY_PATH": "your-value",
        "BIGQUERY_PROJECT": "your-value",
        "GOOGLE_APPLICATION_CREDENTIALS": "your-value",
        "GUARDRAIL_PII_MASK": "your-value",
        "MCP_RATE_LIMIT_RPM": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "warehouse": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "warehouse-mcp"
      ],
      "env": {
        "MCP_TRANSPORT": "your-value",
        "WAREHOUSE_TYPE": "your-value",
        "MCP_API_KEYS": "your-value",
        "DUCKDB_PATH": "your-value",
        "MOTHERDUCK_TOKEN": "your-value",
        "PG_HOST": "your-value",
        "PG_DATABASE": "your-value",
        "PG_USER": "your-value",
        "PG_PASSWORD": "your-value",
        "ORACLE_USER": "your-value",
        "ORACLE_PASSWORD": "your-value",
        "ORACLE_CONNECT_STRING": "your-value",
        "SNOWFLAKE_ACCOUNT": "your-value",
        "SNOWFLAKE_USER": "your-value",
        "SNOWFLAKE_PRIVATE_KEY_PATH": "your-value",
        "BIGQUERY_PROJECT": "your-value",
        "GOOGLE_APPLICATION_CREDENTIALS": "your-value",
        "GUARDRAIL_PII_MASK": "your-value",
        "MCP_RATE_LIMIT_RPM": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • MCP_TRANSPORT env
    Set to 'stdio' for desktop AI clients (Claude Desktop, Cursor). Defaults to 'http'.
  • WAREHOUSE_TYPE 必填 env
    Which warehouse to connect to. One of: postgres, oracle, redshift, snowflake, bigquery, duckdb. (DuckDB also handles MotherDuck via DUCKDB_PATH=md: .)
  • MCP_API_KEYS 机密 env
    Comma-separated bearer keys with role and optional warehouse-role impersonation: 'key1:reader,key2:admin', 'key3:reader:set_role=alice'. Leave empty for stdio (OS process boundary is the trust bounda…
  • DUCKDB_PATH env
    DuckDB file path, ':memory:', or 'md: ' for MotherDuck. Required when WAREHOUSE_TYPE=duckdb.
  • MOTHERDUCK_TOKEN 机密 env
    MotherDuck service token. Required when DUCKDB_PATH starts with 'md:'.
  • PG_HOST env
    Postgres host. Required when WAREHOUSE_TYPE=postgres. (Use REDSHIFT_HOST for Redshift.)
  • PG_DATABASE env
    Postgres database name.
  • PG_USER env
    Postgres user.
  • PG_PASSWORD 机密 env
    Postgres password.
  • ORACLE_USER env
    Oracle user. Required when WAREHOUSE_TYPE=oracle.
  • ORACLE_PASSWORD 机密 env
    Oracle password.
  • ORACLE_CONNECT_STRING env
    Oracle Easy Connect (e.g. host:1521/SERVICE), TNS descriptor, or alias.
  • SNOWFLAKE_ACCOUNT env
    Snowflake account identifier (e.g. xy12345.us-east-1). Required when WAREHOUSE_TYPE=snowflake.
  • SNOWFLAKE_USER env
    Snowflake username.
  • SNOWFLAKE_PRIVATE_KEY_PATH env
    Path to PKCS8 private key (.p8). Snowflake auth is key-pair only; password auth is not supported.
  • BIGQUERY_PROJECT env
    GCP project id. Required when WAREHOUSE_TYPE=bigquery.
  • GOOGLE_APPLICATION_CREDENTIALS env
    Path to BigQuery service-account JSON. Omit on GKE / Cloud Run with workload identity.
  • GUARDRAIL_PII_MASK env
    Set to 'on' to enable role-aware PII masking on result rows (emails, SSNs, phones, IPs, Luhn-validated CCs). Off by default.
  • MCP_RATE_LIMIT_RPM env
    Per-principal token-bucket rate limit on tool invocations. 0 = disabled. Recommend 60 for production.

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 kalehdoo 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“数据库与数据集”中的其他服务器比较i

  • 星标数多于此分类中其他 1142 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 1142 个服务器的 11% 更新
  • 基础检查结果等于或优于此分类中其他 1142 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Warehouse MCP 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

你需要填写:WAREHOUSE_TYPE, MCP_API_KEYS, MOTHERDUCK_TOKEN, PG_PASSWORD, ORACLE_PASSWORD

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.4.2)于6个月前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。

有什么可以替代它?

同一分类中有:Supabase, MongoDB MCP Server, Elasticsearch MCP Server

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Supabase

作者:supabase

MCP server for interacting with the Supabase platform

电脑或云端★ 2,993Apache-2.0昨天更新
安装

MongoDB MCP Server

作者:mongodb-js

MongoDB Model Context Protocol Server

在你的电脑上运行★ 1,157Apache-2.03天前更新
安装

MCP server for interacting with Elasticsearch

在你的电脑上运行★ 315Apache-2.014个月前更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

warehouse-mcp

Production MCP (Model Context Protocol) server for your data warehouse. Read-only enforcement, five-tier role-based access, optional warehouse-role impersonation (for native RLS / CLS), JSONL audit log, optional output PII masking, optional semantic-metadata layer (glossary + table docs) with per-session toggle. Self-host the Docker image, install via npx, or wait for the upcoming managed cloud variant.

Status: v0.4.x — production-ready for the v1 warehouse list. See CHANGELOG for what shipped in each release.

Demo Videos

Warehouse MCP in action using Cursor

Supported warehouses

WarehouseAdapter docs
Postgres 12+docs/adapters/postgres.md
Oracle 12c+ (Thin mode, no Instant Client)docs/adapters/oracle.md
Amazon Redshift (cluster + Serverless)docs/adapters/redshift.md
Snowflake (key-pair auth)docs/adapters/snowflake.md
Google BigQuerydocs/adapters/bigquery.md
DuckDB (local file or :memory:)docs/adapters/duckdb.md
MotherDuck (cloud-hosted DuckDB, md: paths)docs/adapters/duckdb.md

Databricks SQL is a fast-follow.

Tools exposed (16, all read-only)

ToolPurpose
queryExecute a SELECT (validator-enforced read-only, dialect-aware)
list_schemas, list_tables, describe_tableBrowse the catalog
find_columnsSearch column names across the warehouse with a LIKE pattern
get_foreign_keysDiscover declared FK relationships for safe joins
get_view_definitionRead the SQL body of a view (where business logic lives)
sample_table, count_rowsPeek at data, check size before scanning
column_stats, top_valuesProfile a single column
time_seriesBucket by hour/day/week/month/quarter/year — dialect-correct everywhere
search_valueFind a literal across a table's text columns
glossary_lookupRead business-glossary terms from the semantic layer (in-memory, no warehouse I/O)
schema_lookupRead schema-level docs — purpose, owner, refresh, table list
table_lookupRead full semantic doc for one table — description + column metadata

Roles (five tiers)

RoleTools allowed
semantic_onlyOnly the three semantic-lookup tools — zero warehouse access; pair with semantic=on for a docs-viewer persona
metadata_onlyCatalog discovery + semantic lookups — never reads row data
reader_restrictedAggregates / samples / time series — no arbitrary SELECT
readerAdds query and search_value (the general analyst tier)
adminEverything; future write tools when ENABLE_WRITE_TOOLS ships

Per-key role assigned via MCP_API_KEYS=key:role:set_role=warehouse_role. The optional set_role= directive issues SET ROLE on Postgres/Redshift so the warehouse's own RLS / CLS / masking policies enforce per-key access — no policy duplication in MCP. The optional semantic=on|off directive overrides SEMANTIC_DEFAULT for that one key, controlling whether the session sees the warehouse://semantic/* resources (see docs/semantic-metadata.md).

For deployments with multiple existing DB roles (finance, hr, payroll, etc.) and many human users, see docs/multi-role-deployment.md — walks through mapping ~10 DB roles to MCP keys, the recommended / _restricted pattern, and when to graduate from static keys to OIDC.

Sample mcp connection json(change based on your role):

{ "mcpServers": { "warehouse-admin-semanticon": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "http://localhost:3001/mcp", "--header", "Authorization: Bearer admin-key-change-me" ] }, "warehouse-admin-semanticoff": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "http://localhost:3001/mcp", "--header", "Authorization: Bearer admin-key-nosemantic" ] }, "warehouse-reader-semanticon": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "http://localhost:3001/mcp", "--header", "Authorization: Bearer reader-key-change-me" ] }, "warehouse-reader-semanticoff": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "http://localhost:3001/mcp", "--header", "Authorization: Bearer reader-key-nosemantic" ] }, "warehouse-reader-restricted-semanticon": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "http://localhost:3001/mcp", "--header", "Authorization: Bearer restricted-key-change-me" ] }, "warehouse-reader-restricted-semanticoff": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "http://localhost:3001/mcp", "--header", "Authorization: Bearer restricted-key-nosemantic" ] }, "warehouse-metadata-only-semanticon": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "http://localhost:3001/mcp", "--header", "Authorization: Bearer metadata-only-key-change-me" ] }, "warehouse-metadata-only-semanticoff": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "http://localhost:3001/mcp", "--header", "Authorization: Bearer metadata-only-key-nosemantic" ] }, "warehouse-docs-viewer-only": { "command": "npx", "args": [ "-y", "mcp-remote@latest", "http://localhost:3001/mcp", "--header", "Authorization: Bearer docs_viewer_key_change_me" ] } } }

Quick start

Option A — Docker compose (5-minute demo with seeded Postgres)
git clone https://github.com/kalehdoo/warehouse-mcp.git

cd warehouse-mcp docker compose up

server on http://localhost:3001, seeded ecommerce data in Postgres

Option B — Docker against your own warehouse

The same image bundles every adapter; pick one with WAREHOUSE_TYPE plus the matching credentials. For credentials, prefer --env-file (or your secrets manager) over inline -e flags so passwords don't end up in shell history.

# Postgres (REDSHIFT_* env vars for Redshift; same driver under the hood)

docker run -d -p 3001:3001 \ -e WAREHOUSE_TYPE=postgres \ -e PG_HOST=db -e PG_DATABASE=analytics -e PG_USER=mcp_reader -e PG_PASSWORD=... \ -e MCP_API_KEYS="$(openssl rand -hex 24):reader" \ ghcr.io/kalehdoo/warehouse-mcp:latest

Oracle (Thin mode, no Instant Client)

docker run -d -p 3001:3001 \ -e WAREHOUSE_TYPE=oracle \ -e ORACLE_USER=MCP_READER -e ORACLE_PASSWORD=... \ -e ORACLE_CONNECT_STRING="db.host:1521/SERVICE" \ ghcr.io/kalehdoo/warehouse-mcp:latest

Snowflake (key-pair, mount the .p8)

docker run -d -p 3001:3001 \ -e WAREHOUSE_TYPE=snowflake \ -e SNOWFLAKE_ACCOUNT=xy12345.us-east-1 -e SNOWFLAKE_USER=MCP_READER \ -e SNOWFLAKE_PRIVATE_KEY_PATH=/keys/snowflake.p8 \ -e SNOWFLAKE_WAREHOUSE=COMPUTE_WH -e SNOWFLAKE_DATABASE=ANALYTICS \ -v /opt/keys:/keys:ro \ ghcr.io/kalehdoo/warehouse-mcp:latest

BigQuery (mount the service-account JSON)

docker run -d -p 3001:3001 \ -e WAREHOUSE_TYPE=bigquery \ -e GOOGLE_APPLICATION_CREDENTIALS=/keys/bq-sa.json \ -e BIGQUERY_PROJECT=my-gcp-project \ -v /opt/keys:/keys:ro \ ghcr.io/kalehdoo/warehouse-mcp:latest

DuckDB (file or in-memory)

docker run -d -p 3001:3001 \ -e WAREHOUSE_TYPE=duckdb -e DUCKDB_PATH=:memory: \ ghcr.io/kalehdoo/warehouse-mcp:latest

MotherDuck (hosted DuckDB)

docker run -d -p 3001:3001 \ -e WAREHOUSE_TYPE=duckdb -e DUCKDB_PATH=md:my_database \ -e MOTHERDUCK_TOKEN=... \ ghcr.io/kalehdoo/warehouse-mcp:latest

Option C — npx (no container)
npx warehouse-mcp@latest init     # interactive setup; writes .env, prints Claude Desktop snippet

npx warehouse-mcp doctor # verify the connection without booting the server npx warehouse-mcp start # bind the MCP server to MCP_SERVER_PORT (default 3001)

Then point an AI client at it. Drop-in configs:

For a step-by-step walkthrough from "I have a warehouse" to "Claude is querying it", see the onboarding guide. For common errors, see troubleshooting.

Local development

nvm use            # Node 20

npm install npm test # unit tests, sub-second npm run lint cp .env.example .env

For testcontainers integration tests against real Postgres: npm run test:integration (Docker required).

env setup

  1. MCP_API_KEYS
  2. WAREHOUSE_TYPE
  3. SEMANTIC_DIR

Optional: Semantic metadata (v0.4+)

Teach the AI agent what your warehouse means, not just what's in it. Drop YAML files describing your business glossary and table semantics into a directory, point SEMANTIC_DIR at it, and the agent gets two access channels into the same in-memory index:

  • MCP resources at warehouse://semantic/* — what tool-aware clients (Cursor, MCP Inspector) read proactively before issuing queries.
  • MCP tools glossary_lookup, schema_lookup, table_lookup — same data via the tool channel, for clients (Claude Desktop) whose UI is tool-centric and may suppress resource-only servers. Pure in-memory Map.gets — no warehouse I/O, no audit cost beyond a normal tool log line.

Format follows dbt's schema.yml v2 with one extension (meta.schema: per model). Customers using dbt can point SEMANTIC_DIR at their existing models/ directory and reuse most of what they have. See docs/semantic-metadata.md and the starter docs/semantic-templates/.

Per-session toggle

Whether a session sees the semantic layer is independent of whether the YAMLs are loaded — SEMANTIC_DIR controls loading; SEMANTIC_DEFAULT=on|off and the per-key semantic=on|off option (or include_semantic JWT claim) control per-session visibility. The YAMLs are always loaded and validated at boot so you can flip a kill-switch without restarting. Three precedence layers, high

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx