ต้นแบบ · รุ่นทดลอง: มีทุก server ในทะเบียนทางการ อัปเดตทุก 30 นาที รีวิวและบัญชีผู้ใช้จะมาในขั้นถัดไป
PopNx MCPที่รวม MCP สำหรับคนใช้ AI · อธิบายเป็นภาษาคน

Warehouse MCP

โดย kalehdooรุ่น 0.4.2i★ –iรันบนเครื่อง
ชื่อใน registryio.github.kalehdoo/warehouse-mcp

ติดตั้ง

ภาพรวม

คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)

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

สามเสาของ PopNx MCP

สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน

ใช้ทำอะไรได้

ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry

  • การเชื่อมต่อ: รันบนเครื่อง
  • ช่องทาง (transport): 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": "ใส่ค่าของคุณ",
        "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": "ใส่ค่าของคุณ"
      }
    }
  }
}

พิมพ์คำสั่งนี้ใน Terminal

claude mcp add warehouse --env MCP_TRANSPORT='ใส่ค่าของคุณ' --env WAREHOUSE_TYPE='ใส่ค่าของคุณ' --env MCP_API_KEYS='ใส่ค่าของคุณ' --env DUCKDB_PATH='ใส่ค่าของคุณ' --env MOTHERDUCK_TOKEN='ใส่ค่าของคุณ' --env PG_HOST='ใส่ค่าของคุณ' --env PG_DATABASE='ใส่ค่าของคุณ' --env PG_USER='ใส่ค่าของคุณ' --env PG_PASSWORD='ใส่ค่าของคุณ' --env ORACLE_USER='ใส่ค่าของคุณ' --env ORACLE_PASSWORD='ใส่ค่าของคุณ' --env ORACLE_CONNECT_STRING='ใส่ค่าของคุณ' --env SNOWFLAKE_ACCOUNT='ใส่ค่าของคุณ' --env SNOWFLAKE_USER='ใส่ค่าของคุณ' --env SNOWFLAKE_PRIVATE_KEY_PATH='ใส่ค่าของคุณ' --env BIGQUERY_PROJECT='ใส่ค่าของคุณ' --env GOOGLE_APPLICATION_CREDENTIALS='ใส่ค่าของคุณ' --env GUARDRAIL_PII_MASK='ใส่ค่าของคุณ' --env MCP_RATE_LIMIT_RPM='ใส่ค่าของคุณ' -- npx -y warehouse-mcp

เติมค่าที่เว้นว่างไว้ก่อนรัน

เปิดใน Cursor

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json

{
  "mcpServers": {
    "warehouse": {
      "command": "npx",
      "args": [
        "-y",
        "warehouse-mcp"
      ],
      "env": {
        "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": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

เปิดใน VS Code

หรือคัดลอกค่าตั้งเอง

วางในไฟล์ .vscode/mcp.json ของโปรเจกต์

{
  "servers": {
    "warehouse": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "warehouse-mcp"
      ],
      "env": {
        "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": "ใส่ค่าของคุณ"
      }
    }
  }
}

เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง

ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น

ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี

ค่าที่ต้องใส่เอง

  • 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.

ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README

ทำอะไรได้บ้าง

รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง

ผลตรวจเบื้องต้นi

เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569

  • ✓ ผ่าน

    ตัวตนผู้ทำตรงกับ repo

    ชื่อใน registry ยืนยันด้วยบัญชี GitHub kalehdoo ซึ่งเป็นเจ้าของ repo

  • … ยังไม่ตรวจ

    ยังมีคนดูแล

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • … ยังไม่ตรวจ

    มีสัญญาอนุญาต (license)

    ยังไม่ได้อ่านข้อมูล repo จาก GitHub

  • – ไม่เกี่ยว

    endpoint ตอบ

    ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต

  • – ไม่เกี่ยว

    ล็อกอินแบบ OAuth

    ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน

  • … ยังไม่ตรวจ

    คำอธิบายเครื่องมือไม่มีคำสั่งแอบแฝง

    รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต

เทียบกับตัวอื่นในหมวด ฐานข้อมูลและชุดข้อมูลi

  • ดาวมากกว่า 0% ของอีก 955 ตัวในหมวดนี้
  • ส่งรุ่นใหม่เข้า registry ล่าสุดกว่า 11% ของอีก 955 ตัวในหมวดนี้
  • ผลตรวจเบื้องต้นดีกว่าหรือเท่ากับ 100% ของอีก 955 ตัวในหมวดนี้

เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo

คำถามที่พบบ่อย

Warehouse MCP ปลอดภัยไหม?

จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น

ต้องใช้กุญแจหรือรหัสอะไรบ้าง?

ต้องใส่ค่าเหล่านี้: WAREHOUSE_TYPE, MCP_API_KEYS, MOTHERDUCK_TOKEN, PG_PASSWORD, ORACLE_PASSWORD

ตัวนี้รันบนเครื่องหรือบนคลาวด์?

รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)

ยังมีคนดูแลอยู่ไหม?

repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.4.2) เข้า registry 6 เดือนที่ผ่านมา

ใช้กับโปรแกรมไหนได้บ้าง?

โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย

มีตัวไหนใช้แทนได้บ้าง?

ในหมวดเดียวกันมี Supabase, MongoDB MCP Server, Elasticsearch MCP Server

ตัวที่ใช้แทนได้

server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว

อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi

Supabase

โดย supabase

server ทางการของ Supabase ให้ AI สร้างตาราง ถามข้อมูล และดูการตั้งค่าโปรเจกต์ในฐานข้อมูล Supabase ของคุณ

บนเครื่องหรือคลาวด์★ 2,993Apache-2.0อัปเดต เมื่อวาน
ติดตั้ง

MongoDB MCP Server

โดย mongodb-js

MongoDB Model Context Protocol Server

รันบนเครื่อง★ 1,157Apache-2.0อัปเดต 3 วันที่ผ่านมา
ติดตั้ง

Elasticsearch MCP Server

โดย cr7258

MCP server for interacting with Elasticsearch

รันบนเครื่อง★ 315Apache-2.0อัปเดต 14 เดือนที่ผ่านมา
ติดตั้ง

README จากผู้ทำ

เปิดอ่าน README

ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ 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

ตัดมาแค่ช่วงต้น อ่านต่อใน repo

ถาม PopNx