plugins/metabase/skills/setup-metabase-mcp/SKILL.md
Read these instructions before using Metabase MCP tools. Setup is needed to connect to Metabase instances through the Metabase app-backed connector.
npx skillsauth add openai/plugins setup-metabase-mcpInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Read this entire skill file end-to-end before taking any action. Do not skim, do not stop at the first matching step, and do not act on the summary alone. The gates, failure modes, prohibitions, and post-setup rules are scattered through the document.
Follow these instructions exactly as written. Do not make assumptions, do not silently substitute "equivalent" actions, and do not bypass the app-backed connector flow. If a step says stop, stop.
Configure the Metabase Codex plugin so the user can connect to a ready Metabase instance through the Metabase app-backed connector. This skill assumes the instance itself is already set up and has the MCP feature enabled - that is the job of the setup-metabase-instance skill, not this one.
The plugin is app-backed. ../../.app.json is a static app mapping, not a per-user runtime config file. Do not rewrite .app.json with the user's Metabase URL, and do not create or restore .mcp.json as a workaround.
http://localhost:3000https://yourcompany.metabaseapp.comhttps://metabase.yourcompany.comRead ../../.app.json (relative to this SKILL.md - two directories up, the plugin root). It must contain a Metabase app entry with a non-empty app or connector ID.
Expected shape:
{
"apps": {
"metabase": {
"id": "templated_apps_6a044bbd332881919b553bdfc2240952"
}
}
}
If apps is empty or there is no metabase entry, stop and tell the user:
This Metabase plugin is missing its Codex app mapping. Ask the plugin maintainer to add the Metabase app or connector ID to
.app.json, reinstall the plugin, and start a new chat.
Do not continue, do not edit .app.json, and do not run codex mcp login.
Stop all other exploration. Ask the user: "Do you have a Metabase instance URL, or would you like to set up a local instance?"
setup-metabase-instance skill. That skill spins up Metabase, walks the user through first-run setup, and returns with a ready URL (typically http://localhost:3000). Continue here with that URL.Sanity-check that the URL points at a ready-to-use Metabase instance. Run all three probes:
curl -s <INSTANCE_URL>/api/session/properties | grep -o '"tag":"[^"]*"'
curl -s <INSTANCE_URL>/api/session/properties | grep -o '"has-user-setup":[a-z]*'
curl -s -o /dev/null -w "%{http_code}\n" <INSTANCE_URL>/api/mcp
All three must pass:
"has-user-setup":true - instance has an admin account and is past the first-run wizard./api/mcp response code is 401 - endpoint live, OAuth required.If any fails, stop. Do not run OAuth and do not modify plugin files. Failure modes:
has-user-setup:false - the instance is running but has never been initialized. If this is the local instance launched through this workflow, forward to the setup-metabase-instance skill so its Gate 1 walks the user through the first-run wizard. If this is a user-supplied Cloud or self-hosted URL, tell the user to open <INSTANCE_URL> in their browser, complete the first-run wizard there, and then come back so you can re-run step 3 here./api/mcp returns 404 - MCP is on by default in 60+ and has no toggle, so this usually means the version is older than reported or the URL is wrong. Ask the user to confirm.Never call POST /api/setup, POST /api/session, or any other authenticated Metabase REST endpoint. Those bypass the OAuth flow this skill depends on. If the user asks you to, refuse.
Hand the user to the app-backed connection flow. Tell them:
Your Metabase instance is ready. Connect the Metabase app in Codex using this URL:
<INSTANCE_URL>. Complete the OAuth approval in Metabase, then start a new chat so the app tools are available.
Do not run codex mcp login. This plugin no longer registers a local .mcp.json MCP server; authentication belongs to the Codex app connector.
Tell the user to start a new chat so the app config and token take effect:
/newConfirm setup is complete and stop. The Metabase tools become available in the new thread.
Once the app connector is configured, the only way to read data from Metabase is through the Metabase app/MCP tools. Do not, under any circumstances:
metabase.db, metabase.db.mv.db, metabase.db.h2.db, etc.). Even read-only inspection or working from a copy is forbidden.sqlite, duckdb, h2, JDBC, JDBC tools, Python sqlalchemy/h2/jaydebeapi, or any other client to talk to Metabase's storage./api/card, /api/dashboard, /api/database, /api/session, etc.) to answer the user's question while the new chat is pending.If the running chat does not yet expose Metabase tools, the correct response is only to remind the user to start a new chat and stop. Do not offer to inspect internals.
tools
Top-level workflow skill for USD performance diagnosis and optimization. Use for slow loading, high memory, low FPS, or 'optimize my scene' requests; delegates auth/runtime setup to Phase 0 owners.
data-ai
Use when the user mentions MagicPath, designs, UI components, themes, canvas selections, or repo-to-canvas UI work; run magicpath-ai to search, inspect, install, or author components.
documentation
Use as the top-level router for Omniverse Realtime Viewer USD app requests and focused viewer reference documents.
tools
Turn Notion specs into implementation plans, tasks, and progress tracking; use when implementing PRDs/feature specs and creating Notion plans + tasks from them.