mcpField
M
Metabase MCP (headless)

Metabase MCP (headless)

本地服务
serdnaley.github.io数据与分析01 天前更新

关于 Metabase MCP (headless)

Metabase MCP (headless) 使用 API 密钥或邮箱与密码,将 Metabase 接入 AI Agent、应用和自动化任务。可选工具集覆盖查询、内容管理和管理操作,并支持本地 stdio 或令牌保护的 HTTP 部署。

主要功能

  1. 01涵盖 Metabase 多个领域的 178 种工具
  2. 02选择工具集并启用或禁用工具
  3. 03支持 stdio 和令牌认证的 HTTP 模式
  4. 04只读模式与工具安全注释
  5. 05紧凑、限量且可分页的查询结果
  6. 06提供常见工作流的资源和提示词

适用场景

  1. 01探索数据表并查询分析数据
  2. 02创建或整理仪表板与卡片
  3. 03在 CI 中自动执行 Metabase 管理
  4. 04通过 HTTP 提供选定的 Metabase 工具

MCP 相关

它是 MCP 服务,向客户端提供 Metabase 工具、资源和提示词。MCP 客户端可通过 stdio 或 Streamable HTTP 连接,服务端使用 API 密钥或邮箱与密码向 Metabase 进行身份验证。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"serdnaley-metabase": {
"command": "npx",
"args": [
"-y",
"@serdnaley/metabase-mcp"
],
"env": {
"METABASE_URL": "<METABASE_URL>",
"METABASE_API_KEY": "<METABASE_API_KEY>",
"METABASE_EMAIL": "<METABASE_EMAIL>",
"METABASE_PASSWORD": "<METABASE_PASSWORD>",
"METABASE_READ_ONLY_MODE": "<METABASE_READ_ONLY_MODE>",
"METABASE_TOOLSETS": "<METABASE_TOOLSETS>",
"METABASE_TOOLS_ENABLE": "<METABASE_TOOLS_ENABLE>",
"METABASE_TOOLS_DISABLE": "<METABASE_TOOLS_DISABLE>",
"METABASE_CUSTOM_HEADERS": "<METABASE_CUSTOM_HEADERS>"
}
}
}
}
启动命令npx -y @serdnaley/metabase-mcp
需要配置的环境变量
METABASE_URLMetabase base URL, e.g. https://metabase.example.com
METABASE_API_KEY密钥Metabase API key (or set METABASE_EMAIL + METABASE_PASSWORD)
METABASE_EMAILLogin email (alternative to an API key)
METABASE_PASSWORD密钥Login password (alternative to an API key)
METABASE_READ_ONLY_MODEtrue hides all write tools
METABASE_TOOLSETSComma list of toolsets or presets (all, query, content, admin)
METABASE_TOOLS_ENABLEExtra tools to enable (names or globs)
METABASE_TOOLS_DISABLETools to disable (names or globs); always wins
METABASE_CUSTOM_HEADERS密钥Extra headers for every Metabase request (e.g. Cloudflare Access)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@serdnaley/metabase-mcp0.4.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

@serdnaley/metabase-mcp

npm version License: MIT Tests Metabase MCP Glama score

**专为 Metabase 打造的无头 MCP 服务。**只需普通的 API key,即可将 Metabase 接入任何 AI Agent、应用、CI 任务或服务器:无需 OAuth 流程、无需浏览器,也无需启用管理员开关。

  • **无头身份验证。**只需 Metabase API key(或邮箱/密码)即可运行。它适用于无法交互式 OAuth 登录的场景:服务器、CI、容器、自有应用或 Agent。Metabase 内置的 MCP 文档说明其仅支持 OAuth,且需要管理员在 0.60+ 版本中启用。
  • **可在本地运行,也可作为服务运行。**桌面客户端使用 stdio,共享部署和服务器部署则使用带 bearer token 的 Streamable HTTP。Metabase 凭据保留在服务器上。
  • **全面覆盖。**提供 178 个工具,用于查询和操作 Metabase:仪表板、问题、集合、用户、群组、权限、数据库、设置、提醒、转换、导出等。
  • **只启用所需工具。**通过工具集以及逐个工具启用/禁用功能,控制模型上下文大小。每个工具都带有只读/破坏性提示,因此客户端可以自动批准读取操作。
  • **适用于任何 Metabase。**兼容 Metabase OSS(免费版)和付费版本,并已针对 0.59 和 0.64 进行测试。仅限付费版的功能(缓存、模型持久化、审核)可在实例支持时使用;CI 测试覆盖免费版。

与 Metabase 内置 MCP 及其他 Metabase MCP 服务的对比:docs/comparison.md。完整工具目录:serdnaley.github.io/metabase-mcp。

功能

  • 178 个 MCP 工具,涵盖 33 个工具集:搜索、数据库、表、集合、卡片、仪表板、操作、数据集、用户、群组、权限、细分、修订、设置、提醒、订阅、术语表、文档、时间线、书签、审核、代码片段、X-ray、缓存、持久化、上传、指标、度量、转换、导出、API key、嵌入、任务与日志
  • 工具集:仅加载所需内容(METABASE_TOOLSETS=query),还可通过 glob 模式添加或移除单个工具
  • 工具注解:每个工具都带有 readOnlyHint / destructiveHint / idempotentHint
  • stdio 或 HTTP:共享部署可使用带 bearer 身份验证的 Streamable HTTP
  • 只读模式:通过一个环境变量隐藏所有写入工具
  • 大结果安全保障:精简查询结果,限制行数和响应大小,并支持分页
  • 资源与提示词:浏览数据库、卡片、仪表板和集合;提供现成工作流
  • 管理自动化:用户、群组、权限、设置、数据库连接、转换
  • 类型安全:HTTP 客户端由 Metabase 的 OpenAPI 规范生成
  • 零配置:通过 npx 运行,无需安装

安装

Claude Desktop(单击安装包)

从最新版本下载 metabase-mcp-X.Y.Z.mcpb 并打开:Claude Desktop 会显示一个表单,供你填写 Metabase URL 和 API 密钥。无需配置 Node.js 或编辑 JSON。

Claude Desktop(JSON 配置)

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %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"
      }
    }
  }
}

保存后重启 Claude Desktop。

Claude Code(命令行)
claude mcp add metabase \
  --env METABASE_URL=https://your-metabase.example.com \
  --env METABASE_API_KEY=mb_xxx \
  -- npx -y @serdnaley/metabase-mcp

也可以添加到 .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

添加到 ~/.cursor/mcp.json(全局)或 .cursor/mcp.json(项目):

{
  "mcpServers": {
    "metabase": {
      "command": "npx",
      "args": ["-y", "@serdnaley/metabase-mcp"],
      "env": {
        "METABASE_URL": "https://your-metabase.example.com",
        "METABASE_API_KEY": "mb_xxx"
      }
    }
  }
}

保存后重启 Cursor。

Windsurf

添加到 ~/.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)

添加到 Cline 的 MCP 设置中(可通过 MCP Servers 图标访问):

{
  "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)

添加到 .continue/config.yaml:

mcpServers:
  - name: metabase
    command: npx
    args:
      - "-y"
      - "@serdnaley/metabase-mcp"
    env:
      METABASE_URL: "https://your-metabase.example.com"
      METABASE_API_KEY: "mb_xxx"
Zed

添加到 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"
      }
    }
  }
}
远程 / HTTP(任何支持 Streamable HTTP 的客户端)

以 HTTP 模式运行一次服务(参见 HTTP 模式),然后让客户端连接到该服务。Claude Code:

claude mcp add --transport http metabase https://mcp.example.com/mcp \
  --header "Authorization: Bearer $MCP_HTTP_TOKEN"

通用 JSON 配置(Cursor、VS Code 等):

{
  "mcpServers": {
    "metabase": {
      "url": "https://mcp.example.com/mcp",
      "headers": { "Authorization": "Bearer <MCP_HTTP_TOKEN>" }
    }
  }
}

配置

变量必需描述
METABASE_URL是Metabase 实例的基础 URL
METABASE_API_KEY否*用于身份验证的 API 密钥
METABASE_EMAIL否*用于基于会话的身份验证的电子邮件
METABASE_PASSWORD否*用于基于会话的身份验证的密码
METABASE_READ_ONLY_MODE否设置为 true 以禁用写入工具
METABASE_CUSTOM_HEADERS否每次请求(包括会话登录请求)都会发送的额外 HTTP 标头(见下文)
METABASE_TOOLSETS否要加载的工具集或预设的逗号分隔列表(默认:全部)。参见工具集
METABASE_TOOLS_ENABLE否在工具集之外额外加载的工具(名称或 glob 模式,例如 get_card,export_*)
METABASE_TOOLS_DISABLE否不加载的工具(名称或 glob 模式);优先级始终高于启用设置
METABASE_MAX_ROWS否查询工具的行数上限(默认 500);参见大型结果
METABASE_MAX_RESPONSE_CHARS否任意工具响应的字符数上限(默认 100000)
MCP_TRANSPORT否stdio(默认)或 http。在命令行中使用 --http 效果相同
MCP_HTTP_HOST / MCP_HTTP_PORT否HTTP 绑定地址,默认 127.0.0.1:3333(也支持 PORT)
MCP_HTTP_TOKENHTTP 模式客户端必须发送的 Bearer 令牌(至少 16 个字符)
MCP_HTTP_ALLOW_NO_AUTH否设为 true 可在 HTTP 中不使用令牌,但仅限环回主机

*必须提供 METABASE_API_KEY,或同时提供 METABASE_EMAIL 和 METABASE_PASSWORD。建议使用 API 密钥。

自定义标头

当 Metabase 位于需要自身标头的代理之后时(例如 Cloudflare Access 服务令牌),请使用 METABASE_CUSTOM_HEADERS。将其设置为 JSON 对象:

METABASE_CUSTOM_HEADERS='{"CF-Access-Client-Id": "xxx.access", "CF-Access-Client-Secret": "yyy"}'

也可以使用以换行符或 ; 分隔的 名称: 值 对:

METABASE_CUSTOM_HEADERS='CF-Access-Client-Id: xxx.access; CF-Access-Client-Secret: yyy'

身份验证标头(X-API-Key、X-Metabase-Session)始终优先于同名的自定义标头。值格式错误会导致服务在启动时停止。

工具集

每个工具域都是一个工具集(dashboards、users、transforms 等;完整列表见 工具)。预设会将它们组合在一起:

预设用途
all全部工具(默认)
query探索和查询数据:搜索、数据库、表、数据集、卡片、指标、度量、分群、导出、活动、X 射线分析
content创建和整理内容:集合、卡片、仪表板、文档、片段、时间线、警报等
admin管理实例:用户、权限、设置、数据库、表、缓存、上传、转换、操作等
METABASE_TOOLSETS=query,dashboards      # analyst assistant
METABASE_TOOLS_ENABLE=create_card       # plus one write tool
METABASE_TOOLS_DISABLE='delete_*'       # never delete anything

优先级从高到低:只读模式 > METABASE_TOOLS_DISABLE > METABASE_TOOLS_ENABLE > METABASE_TOOLSETS。未知工具集会导致服务在启动时停止;如果启用或禁用模式未匹配任何内容,则会记录警告。启动日志(stderr)会显示已启用的工具数量。

大型结果

查询工具(execute_query、execute_card_query、run_metric)会返回精简视图:columns (名称、类型)和 rows,不包含 Metabase 的列内部信息、results_metadata 和分析结果。传入 verbose: true 可获取原始响应。结果最多返回 METABASE_MAX_ROWS 行(每次调用可通过 max_rows 设置,且不能超过上限),并使用 offset 分页;note 会说明如何获取剩余结果。每个工具 响应都是精简 JSON,最大为 METABASE_MAX_RESPONSE_CHARS。对于 SELECT * FROM ORDERS 查询,返回 10 / 100 / 500 行时, 相比原始美化格式的响应,体积分别缩小 94% / 76% / 60%。如需完整结果集,请使用带有 output_path 的导出工具。

资源和提示词

除工具外,服务还提供用于浏览的 MCP 资源(精简 JSON): metabase://databases、metabase://database/{id}/schema、metabase://card/{id}、 metabase://dashboard/{id}、metabase://collection/{id}(根集合使用 root),以及用于常见工作流的 提示词:explore-database、build-dashboard、explain-card、 audit-permissions。二者都遵循工具选择规则:资源需要对应的工具集,提示词需要其使用的所有工具(因此在只读模式下,build-dashboard 不会显示)。

HTTP 模式(共享 / 服务端部署)
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

客户端使用 Authorization: Bearer <MCP_HTTP_TOKEN> 连接到 http://<host>:3333/mcp。GET /health 无需身份验证即可响应,且不会泄露任何信息。该端点是无状态的(无会话),因此可水平扩展。离开 localhost 后,请将其置于 TLS(反向代理)之后。持有令牌的所有人都会以 Metabase API 密钥所属用户的身份操作,因此请为每个受众分别提供密钥、令牌和工具集。

也可以将其作为容器运行(ghcr.io/serdnaley/metabase-mcp,amd64 + arm64,默认使用 HTTP 模式):

docker run -p 3333:3333 \
  -e METABASE_URL=https://metabase.example.com -e METABASE_API_KEY=mb_xxx \
  -e MCP_HTTP_TOKEN="$(openssl rand -hex 32)" \
  ghcr.io/serdnaley/metabase-mcp
获取 Metabase API 密钥
  1. 前往你的 Metabase 实例
  2. 点击齿轮图标 > 管理设置 > 身份验证 > API 密钥
  3. 点击“创建 API 密钥”
  4. 为其命名并选择合适的群组(例如,管理员)
  5. 复制密钥——它以 mb_ 开头

示例

“创建一个展示订单趋势的仪表板”

AI 助手将:

  1. 使用 search 和 get_database_metadata 查找你的数据
  2. 使用 create_card 创建问题(例如,按月统计订单、按产品统计收入)
  3. 使用 create_dashboard 创建仪表板
  4. 使用 update_dashboard_cards 按布局排列卡片
“将所有第 4 季度报告移至 Archive 集合”

AI 助手将:

  1. 使用 search 查找第 4 季度报告卡片
  2. 如有需要,使用 create_collection 创建 Archive 集合
  3. 对每张卡片使用 update_card,将其移至新集合
“分析数据库中有哪些表?”

AI 助手将:

  1. 使用 list_databases 查找数据库
  2. 使用 get_database_metadata 列出所有表、字段和关系

工具

包含参数的完整目录:请参阅工具目录网站(由代码生成)。

Read tools (79, always available)
ToolsetTools
Search (search)search
Databases (databases)list_databases, get_database, get_database_metadata, list_database_schemas, get_database_schema
Tables & Fields (tables)get_table, get_table_query_metadata, get_field, get_field_values
Collections (collections)get_collection_tree, list_collections, get_collection, list_collection_items
Cards (cards)list_cards, get_card, execute_card_query
Dashboards (dashboards)list_dashboards, get_dashboard
Actions (actions)list_actions, get_action
Dataset (ad-hoc queries) (dataset)execute_query
Users & Groups (users)list_users, get_user, get_current_user, list_groups, get_group
Permissions (permissions)get_permissions_graph, get_collection_permissions
Segments (segments)list_segments, get_segment
Revisions (revisions)list_revisions
Settings (settings)list_settings, get_setting
Alerts & Subscriptions (notifications)list_alerts, get_alert, list_dashboard_subscriptions, list_notifications
X-Rays (xrays)generate_xray
Activity & Tasks (activity)get_activity, get_recent_items, get_popular_items
Snippets (snippets)list_snippets, get_snippet
Glossary (glossary)list_glossary_terms, get_glossary_term
Documents (documents)list_documents, get_document
Timelines (timelines)list_timelines, get_timeline
Bookmarks (bookmarks)list_bookmarks
EID Translation (eid-translation)translate_entity_ids
Metrics (metrics)list_metrics, get_metric, run_metric, list_metric_dimensions, get_metric_dimension_values
Measures (measures)list_measures, get_measure
Transforms (transforms)list_transforms, get_transform, list_transform_runs, get_transform_run, list_transform_jobs, list_transform_tags
Exports (exports)export_card_query, export_query, export_dashboard_pdf
API Keys (api-keys)list_api_keys
Embedding (embedding)get_embedding_status, create_embed_url
Tasks & Logs (diagnostics)list_tasks, get_task, list_task_types, list_task_runs, get_scheduler_info, get_server_logs, list_log_presets, get_premium_token_status
写入工具(99 个,在只读模式下隐藏)
工具集工具
数据库(databases)create_database、update_database、delete_database、validate_database、sync_database_schema
表和字段(tables)update_table、update_field、rescan_field_values、discard_field_values、reorder_fields
集合(collections)create_collection、update_collection
卡片(cards)create_card、update_card、delete_card、copy_card、create_card_public_link、delete_card_public_link
仪表板(dashboards)create_dashboard、update_dashboard、delete_dashboard、copy_dashboard、update_dashboard_cards、create_dashboard_public_link、delete_dashboard_public_link
操作(actions)create_action、update_action、delete_action、execute_action、create_action_public_link、delete_action_public_link
用户和群组(users)create_user、update_user、deactivate_user、reactivate_user、create_group、update_group、delete_group、add_group_member、remove_group_member
权限(permissions)update_permissions_graph、update_collection_permissions
分段(segments)create_segment、update_segment、delete_segment
修订版本(revisions)revert_revision
设置(settings)update_setting
提醒和订阅(notifications)send_notification、create_alert、update_alert、delete_alert、create_dashboard_subscription、update_dashboard_subscription、delete_dashboard_subscription
缓存(cache)invalidate_cache、update_cache_config
模型持久化(persistence)persist_model、unpersist_model、refresh_persisted_model
上传(upload)upload_csv
代码片段(snippets)create_snippet、update_snippet、delete_snippet
术语表(glossary)create_glossary_term、update_glossary_term、delete_glossary_term
文档(documents)create_document、update_document、delete_document
时间线(timelines)create_timeline、update_timeline、delete_timeline、create_timeline_event、update_timeline_event、delete_timeline_event
书签(bookmarks)create_bookmark、delete_bookmark
审核(moderation)create_moderation_review
指标(metrics)create_metric、update_metric
度量值(measures)create_measure、update_measure
转换(transforms)create_transform、update_transform、delete_transform、run_transform、cancel_transform_run、create_transform_job、run_transform_job、delete_transform_job、create_transform_tag
API 密钥(api-keys)create_api_key、update_api_key、regenerate_api_key、delete_api_key
嵌入(embedding)set_static_embedding、set_resource_embedding
任务和日志(diagnostics)set_log_levels、reset_log_levels

METABASE_TOOLSETS 的预设:all(全部);query(search、databases、tables、dataset、cards、metrics、measures、segments、exports、activity、xrays);content(search、collections、cards、dashboards、documents、snippets、timelines、bookmarks、glossary、revisions、moderation、notifications、exports);admin(users、permissions、settings、databases、tables、cache、persistence、upload、transforms、actions、activity、eid-translation、api-keys、embedding、diagnostics)。

安全

即使在只读模式下,execute_query 也可用。 它可以对配置的 Metabase 账号有权访问的任何数据库执行任意 SQL。Metabase 会执行自己的权限模型,但此工具不会添加额外限制。

要阻止写入操作,请确保 Metabase API 密钥或账号在 Metabase 中本身具有只读数据库权限。

导出可以写入本地文件。 export_card_query、export_query 和 export_dashboard_pdf 在只读模式下仍可用(它们只会从 Metabase 读取数据),并且在提供 output_path 时,会将文件写入运行 MCP 服务的机器上的该绝对路径。除非传入 overwrite: true,否则它们绝不会覆盖已有文件。Metabase 对导出执行的访问检查与运行查询时相同;单独的“下载结果”权限仅适用于 Pro/Enterprise。

只读模式不是安全边界。 METABASE_READ_ONLY_MODE 只会隐藏写入工具。密钥的实际权限由 Metabase 设置:API 密钥会获得其所属组以及 All Users 的权限。对于只读助手,请将密钥放入一个仅具有集合查看权限、且“创建查询”设为仅查询构建器(或不允许)的组中,并将 All Users 的权限限制在不超过该范围。请参阅 docs/read-only-and-permissions.md,了解探测结果和设置检查清单。

HTTP 模式需要 bearer token。 MCP_TRANSPORT=http 在未提供 MCP_HTTP_TOKEN 时会拒绝启动(以恒定时间进行比较);但在环回主机上设置 MCP_HTTP_ALLOW_NO_AUTH=true 时例外,此时 Host 标头检查会阻止 DNS 重绑定。该令牌拥有配置的 Metabase 密钥所能执行的所有权限,因此请像保护该密钥一样保护它,并在 localhost 以外通过 TLS 提供端点服务。

原始 SQL 可一键执行。 只读工具均标记为 readOnlyHint: true,包括 execute_query 和 export_query,因此客户端可以自动批准它们。⚠️ 这些工具会原样发送 SQL:此服务不会阻止 INSERT/UPDATE/DELETE/DDL,且两个工具的说明都明确提到了这一点。如果 SQL 不能写入,请使用所属组无法运行原生查询的 Metabase API 密钥(或具有只读授权的数据库用户)——请参阅 docs/read-only-and-permissions.md。

操作类型受到限制。 create_action 工具仅允许 query 和 implicit 操作类型。HTTP 操作(可能会发出任意出站请求)会被阻止。

开发

bun install
bun run dev                    # Start the MCP server
bun run build                  # Build for npm
bun run generate-types         # Regenerate types from Metabase OpenAPI spec

测试

测试通过 Docker 对真实的 Metabase 实例运行:

docker compose up -d             # Start Metabase (pinned version, see docker-compose.yml)
./tests/ci/wait-for-metabase.sh  # Wait for ready (~15s)
bun test                         # 276 tests
docker compose down              # Stop Metabase

已在 Metabase v0.64.3.4(CI 固定版本)和 v0.59.6 上验证。尝试其他版本: MB_IMAGE=metabase/metabase:latest docker compose up -d。CI 还会每周在 metabase:latest 上以非阻塞任务运行测试套件,因此上游 API 的变化会在固定版本升级前显现。

操作、转换和 CSV 上传会针对 docker-compose.yml 中的 Postgres“Test Warehouse”运行。 需要付费计划或缺少服务的功能(审核、缓存失效、模型持久化或数据仓库本身)会明确跳过,并记录 SKIP … (environment) 日志行;其他任何 API 错误都会导致测试失败。

工作原理

AI Client (Claude, Cursor, etc.)
  ↓ MCP protocol (stdio)
MCP Tool (zod schema + handler)
  ↓
Service function (business logic)
  ↓
openapi-fetch (type-safe HTTP client)
  ↓
Metabase REST API

该服务会根据 Metabase 的 OpenAPI 规范生成 TypeScript 类型,并使用 openapi-fetch 进行类型安全的 API 调用。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。