Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Headless Metabase MCP: API-key auth, no OAuth. 178 tools, toolsets, stdio or HTTP, all tiers.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
METABASE_URL, METABASE_API_KEY, METABASE_EMAIL, METABASE_PASSWORD, METABASE_READ_ONLY_MODE, METABASE_TOOLSETS, METABASE_TOOLS_ENABLE, METABASE_TOOLS_DISABLE, METABASE_CUSTOM_HEADERSค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"metabase": {
"command": "npx",
"args": [
"-y",
"@serdnaley/metabase-mcp"
],
"env": {
"METABASE_URL": "ใส่ค่าของคุณ",
"METABASE_API_KEY": "ใส่ค่าของคุณ",
"METABASE_EMAIL": "ใส่ค่าของคุณ",
"METABASE_PASSWORD": "ใส่ค่าของคุณ",
"METABASE_READ_ONLY_MODE": "ใส่ค่าของคุณ",
"METABASE_TOOLSETS": "ใส่ค่าของคุณ",
"METABASE_TOOLS_ENABLE": "ใส่ค่าของคุณ",
"METABASE_TOOLS_DISABLE": "ใส่ค่าของคุณ",
"METABASE_CUSTOM_HEADERS": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add metabase --env METABASE_URL='ใส่ค่าของคุณ' --env METABASE_API_KEY='ใส่ค่าของคุณ' --env METABASE_EMAIL='ใส่ค่าของคุณ' --env METABASE_PASSWORD='ใส่ค่าของคุณ' --env METABASE_READ_ONLY_MODE='ใส่ค่าของคุณ' --env METABASE_TOOLSETS='ใส่ค่าของคุณ' --env METABASE_TOOLS_ENABLE='ใส่ค่าของคุณ' --env METABASE_TOOLS_DISABLE='ใส่ค่าของคุณ' --env METABASE_CUSTOM_HEADERS='ใส่ค่าของคุณ' -- npx -y @serdnaley/metabase-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"metabase": {
"command": "npx",
"args": [
"-y",
"@serdnaley/metabase-mcp"
],
"env": {
"METABASE_URL": "ใส่ค่าของคุณ",
"METABASE_API_KEY": "ใส่ค่าของคุณ",
"METABASE_EMAIL": "ใส่ค่าของคุณ",
"METABASE_PASSWORD": "ใส่ค่าของคุณ",
"METABASE_READ_ONLY_MODE": "ใส่ค่าของคุณ",
"METABASE_TOOLSETS": "ใส่ค่าของคุณ",
"METABASE_TOOLS_ENABLE": "ใส่ค่าของคุณ",
"METABASE_TOOLS_DISABLE": "ใส่ค่าของคุณ",
"METABASE_CUSTOM_HEADERS": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"metabase": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@serdnaley/metabase-mcp"
],
"env": {
"METABASE_URL": "ใส่ค่าของคุณ",
"METABASE_API_KEY": "ใส่ค่าของคุณ",
"METABASE_EMAIL": "ใส่ค่าของคุณ",
"METABASE_PASSWORD": "ใส่ค่าของคุณ",
"METABASE_READ_ONLY_MODE": "ใส่ค่าของคุณ",
"METABASE_TOOLSETS": "ใส่ค่าของคุณ",
"METABASE_TOOLS_ENABLE": "ใส่ค่าของคุณ",
"METABASE_TOOLS_DISABLE": "ใส่ค่าของคุณ",
"METABASE_CUSTOM_HEADERS": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
METABASE_EMAIL envMETABASE_READ_ONLY_MODE envMETABASE_TOOLSETS envMETABASE_TOOLS_ENABLE envMETABASE_TOOLS_DISABLE envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub Serdnaley ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: METABASE_URL, METABASE_API_KEY, METABASE_PASSWORD, METABASE_CUSTOM_HEADERS
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.5.0) เข้า registry 3 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, zanadir
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Find what a repository's CI is missing, and which security checks cannot fail the build.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
The headless MCP server for Metabase. Plug Metabase into any AI agent, app, CI job or server with a plain API key: no OAuth flow, no browser, no admin switch to flip.
How it compares with Metabase's built-in MCP and other Metabase MCP servers: docs/comparison.md. Full tool catalog: serdnaley.github.io/metabase-mcp.
METABASE_TOOLSETS=query), add or drop single tools with globsreadOnlyHint / destructiveHint / idempotentHint on every toolnpx, no installation neededClaude Desktop (one-click bundle)
Download metabase-mcp-X.Y.Z.mcpb from the latest release and open it: Claude Desktop shows a form for the Metabase URL and API key. No Node.js setup or JSON editing.
Claude Desktop (JSON config)
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": { "metabase": { "command": "npx", "args": ["-y", "@serdnaley/metabase-mcp"], "env": { "METABASE_URL": "https://your-metabase.example.com", "METABASE_API_KEY": "mb_xxx" } } } }
Restart Claude Desktop after saving.
Claude Code (CLI)
claude mcp add metabase \
--env METABASE_URL=https://your-metabase.example.com \ --env METABASE_API_KEY=mb_xxx \ -- npx -y @serdnaley/metabase-mcp
Or add to .claude/mcp.json:
{
"mcpServers": { "metabase": { "type": "stdio", "command": "npx", "args": ["-y", "@serdnaley/metabase-mcp"], "env": { "METABASE_URL": "https://your-metabase.example.com", "METABASE_API_KEY": "mb_xxx" } } } }
Cursor
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": { "metabase": { "command": "npx", "args": ["-y", "@serdnaley/metabase-mcp"], "env": { "METABASE_URL": "https://your-metabase.example.com", "METABASE_API_KEY": "mb_xxx" } } } }
Restart Cursor after saving.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": { "metabase": { "command": "npx", "args": ["-y", "@serdnaley/metabase-mcp"], "env": { "METABASE_URL": "https://your-metabase.example.com", "METABASE_API_KEY": "mb_xxx" } } } }
Cline (VS Code)
Add to your Cline MCP settings (accessible via the MCP Servers icon):
{
"mcpServers": { "metabase": { "command": "npx", "args": ["-y", "@serdnaley/metabase-mcp"], "env": { "METABASE_URL": "https://your-metabase.example.com", "METABASE_API_KEY": "mb_xxx" } } } }
Continue (VS Code)
Add to .continue/config.yaml:
mcpServers:
Zed
Add to your Zed settings.json:
{
"context_servers": { "metabase": { "command": "npx", "args": ["-y", "@serdnaley/metabase-mcp"], "env": { "METABASE_URL": "https://your-metabase.example.com", "METABASE_API_KEY": "mb_xxx" } } } }
Remote / HTTP (any client that speaks Streamable HTTP)
Run the server once in HTTP mode (see HTTP mode), then point clients at it. Claude Code:
claude mcp add --transport http metabase https://mcp.example.com/mcp \
--header "Authorization: Bearer $MCP_HTTP_TOKEN"
Generic JSON config (Cursor, VS Code and others):
{
"mcpServers": { "metabase": { "url": "https://mcp.example.com/mcp", "headers": { "Authorization": "Bearer " } } } }
| Variable | Required | Description |
|---|---|---|
METABASE_URL | Yes | Base URL of your Metabase instance |
METABASE_API_KEY | No* | API key for authentication |
METABASE_EMAIL | No* | Email for session-based auth |
METABASE_PASSWORD | No* | Password for session-based auth |
METABASE_READ_ONLY_MODE | No | Set to true to disable write tools |
METABASE_CUSTOM_HEADERS | No | Extra HTTP headers sent on every request, including the session login (see below) |
METABASE_TOOLSETS | No | Comma list of toolsets or presets to load (default: all). See Toolsets |
METABASE_TOOLS_ENABLE | No | Extra tools to load on top of the toolsets (names or globs, e.g. get_card,export_*) |
METABASE_TOOLS_DISABLE | No | Tools never to load (names or globs); always wins over enable |
METABASE_MAX_ROWS | No | Row cap for query tools (default 500); see Large results |
METABASE_MAX_RESPONSE_CHARS | No | Size cap for any tool response (default 100000) |
MCP_TRANSPORT | No | stdio (default) or http. --http on the command line does the same |
MCP_HTTP_HOST / MCP_HTTP_PORT | No | HTTP bind address, default 127.0.0.1:3333 (PORT also works) |
MCP_HTTP_TOKEN | HTTP mode | Bearer token clients must send (min. 16 chars) |
MCP_HTTP_ALLOW_NO_AUTH | No | true runs HTTP without a token, only on a loopback host |
*Either METABASE_API_KEY or both METABASE_EMAIL + METABASE_PASSWORD must be provided. API key is recommended.
Use METABASE_CUSTOM_HEADERS when Metabase sits behind a proxy that needs its own headers, such as Cloudflare Access service tokens. Give it a JSON object:
METABASE_CUSTOM_HEADERS='{"CF-Access-Client-Id": "xxx.access", "CF-Access-Client-Secret": "yyy"}'
or Name: value pairs separated by newlines or ;:
METABASE_CUSTOM_HEADERS='CF-Access-Client-Id: xxx.access; CF-Access-Client-Secret: yyy'
The auth headers (X-API-Key, X-Metabase-Session) always win over a custom header with the same name. A malformed value stops the server at startup.
Each tool domain is a toolset (dashboards, users, transforms, ...; the full list is in Tools). Presets bundle them:
| Preset | For |
|---|---|
all | everything (default) |
query | exploring and querying data: search, databases, tables, dataset, cards, metrics, measures, segments, exports, activity, x-rays, explorations |
content | building and organising content: collections, cards, dashboards, documents, snippets, timelines, alerts, ... |
admin | running the instance: users, permissions, settings, databases, tables, cache, uploads, transforms, actions, ... |
METABASE_TOOLSETS=query,dashboards # analyst assistant
METABASE_TOOLS_ENABLE=create_card # plus one write tool METABASE_TOOLS_DISABLE='delete_*' # never delete anything
Precedence, strongest first: read-only mode > `METABASE_TOOLS_DISABLE` > `METABASE_TOOLS_ENABLE` > `METABASE_TOOLSETS`. An unknown toolset stops the server at startup; an enable/disable pattern that matches nothing logs a warning. The startup log (stderr) shows how many tools are enabled.
Query tools (execute_query, execute_card_query, run_metric) return a compact view: columns (name, type) and rows, without Metabase's column internals, results_metadata and insights. Pass verbose: true for the raw response. Results are capped at METABASE_MAX_ROWS rows (per call: max_rows, never above the cap) and paged with offset; a note says how to get the rest. Every tool response is compact JSON capped at METABASE_MAX_RESPONSE_CHARS. For a 10 / 100 / 500-row SELECT * FROM ORDERS this is 94% / 76% / 60% smaller than the raw pretty-printed response. For full result sets use the export tools with output_path.
Besides tools the server offers MCP resources for browsing (compact JSON): metabase://databases, metabase://database/{id}/schema, metabase://card/{id}, metabase://dashboard/{id}, metabase://collection/{id} (root for the root collection), and prompts for common workflows: explore-database, build-dashboard, explain-card, audit-permissions. Both follow the tool selection: a resource needs its toolset, a prompt needs every tool it uses (so build-dashboard disappears in read-only mode).
METABASE_URL=https://metabase.example.com \
METABASE_API_KEY=mb_xxx \ MCP_TRANSPORT=http MCP_HTTP_HOST=0.0.0.0 MCP_HTTP_PORT=3333 \ MCP_HTTP_TOKEN="$(openssl rand -hex 32)" \ npx -y @serdnaley/metabase-mcp
Clients connect t
ตัดมาแค่ช่วงต้น อ่านต่อใน repo