Table of Contents

MCP 服务器

Tabular Editor 3 可以充当 MCP(Model Context Protocol)服务器。支持 MCP 的代理(例如 Claude Code、GitHub Copilot、VS Code 代理模式、Codex 或 Cursor)可连接到正在运行的实例,读取、查询并分析你当前打开的语义模型;如果你授予写入权限,还可以修改它。首先,选择 工具 > MCP 服务器... 并注册你的代理。

MCP 服务器不会使用你在 Tabular Editor 中配置的 AI 提供程序或 API 密钥;你的代理会使用它自己的提供程序和订阅。

代理处理的是 Tabular Editor 当前打开的模型,包括尚未保存的更改。它可以是 Power BI Desktop 模型、PBIP 项目、TMDL (Tabular Model Definition Language) 文件夹、.bim 文件、Workspace 数据库,或到 Analysis Services、Azure Analysis Services 或 Fabric 的实时连接。无论模型处于已连接还是脱机状态,代理使用的工具都是相同的,但需要实时连接的工具(例如 DAX 查询)除外。

代理的更改会通过 Tabular Object Model (TOM) 包装器 和 C# Script 脚本引擎应用,并与手动编辑一样,经过相同的验证、公式自动修正和撤销堆栈处理。这些更改会显示为未保存的更改,并在 TOM Explorer 和属性视图 中标记;在你保存之前,不会将任何内容写回源文件。

开始之前

  • Tabular Editor 3.27.0 或更高版本,任何版本均可。
  • 已安装 AI 功能 组件。从 3.27.0 开始,它已包含在默认安装中。如果你以集中方式部署 Tabular Editor,请参阅 @installation-activation-basic;如果管理员已关闭 AI 功能,请参阅 @policies。
  • 支持通过可流式传输的 HTTP 使用 MCP 的代理。

启动服务器

  1. 选择 工具 > MCP 服务器...。
  2. 检查权限设置。见 设置代理权限。
  3. 点击 启动服务器。

该对话框会显示服务器侦听的地址:http://127.0.0.1:42100/,除非你已更改端口。状态栏指示器会从 MCP 已停止 变为 MCP 已启动,其工具提示中会显示该地址。

MCP 服务器对话框,显示服务器 URL、已掩码的访问令牌,以及设置为非默认级别的五行代理权限

MCP 状态栏指示器显示 MCP Started,其工具提示显示 "MCP 服务器正在侦听 http://127.0.0.1:42100/。点击以打开连接对话框。"

无论是否打开模型,服务器都可以运行。如果没有打开模型,工具结果会明确说明;而且你可以随时打开模型,无需重启服务器。

右键单击状态栏指示器可启动或停止服务器、复制注册配置,或打开 MCP 服务器偏好设置。左键单击它可打开对话框,而不会启动或停止服务器。

MCP 状态栏指示器及其已打开的右键菜单,菜单项包括“MCP 服务器详细信息...”、“停止 MCP 服务器”、“复制 MCP 配置”和“MCP 服务器偏好...”,其中“复制 MCP 配置”子菜单已展开,列出 Claude Code、VS Code、Copilot CLI、Codex 和 Cursor

MCP 偏好

打开 工具 > 偏好 > AI 功能 > MCP 服务器,设置服务器的启动、身份验证和端口选项。

MCP 服务器偏好,显示“启用 MCP 服务器”“自动启动 MCP 服务器”“需要访问令牌”和端口

偏好 默认值 作用
启用 MCP 服务器 开 取消勾选后,会停止正在运行的服务器,并移除菜单项和状态栏指示器
自动启动 MCP 服务器 关 在 Tabular Editor 启动时启动服务器
需要访问令牌 关 代理必须提供服务器对话框中显示的访问令牌。参见 在共享计算机上运行
端口 42100 服务器侦听的回环端口,范围为 1024 到 49151。更改后会使现有的代理注册失效

注册代理

在服务器对话框中,从 导出配置 中选择你的代理,然后将复制的配置粘贴到你的代理中。每个代理只需注册一次,该配置会以 tabular-editor 这个名称注册服务器。

导出配置下拉菜单已展开,其中列出了 Claude Code、VS Code、Copilot CLI、Codex 和 Cursor

Claude Code:在终端中运行复制的命令:

claude mcp add --transport http tabular-editor http://127.0.0.1:42100/

VS Code:添加到你的 MCP 配置中:

{
  "servers": {
    "tabular-editor": {
      "type": "http",
      "url": "http://127.0.0.1:42100/"
    }
  }
}

Copilot CLI:将以下内容添加到 ~/.copilot/mcp-config.json:

{
  "mcpServers": {
    "tabular-editor": {
      "type": "http",
      "url": "http://127.0.0.1:42100/"
    }
  }
}

Codex:将以下内容添加到 ~/.codex/config.toml:

[mcp_servers.tabular-editor]
url = "http://127.0.0.1:42100/"

Cursor:将以下内容添加到 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "tabular-editor": {
      "url": "http://127.0.0.1:42100/"
    }
  }
}

启用 需要访问令牌 后,导出的配置会按各客户端的格式包含令牌。从对话框中复制配置,不要手动编写。

任何其他 MCP 客户端都可通过 streamable HTTP 连接到 http://127.0.0.1:42100/。启用 需要访问令牌 后,请在 Authorization: Bearer <token> 标头中携带令牌。

检查是否成功

向你的代理提问:

我在 Tabular Editor 中连接到了哪个模型?

代理会回答模型名称、模型的加载方式、是否有未保存的更改及其兼容级别;或者会发送一条 Report,说明当前未打开任何模型。 Tabular Editor 中不会出现任何提示。

设置代理权限

权限决定代理可以使用哪些工具,而 AI Assistant 也使用同一套权限。可在 工具 > MCP 服务器... 对话框中设置,也可在 工具 > 偏好 > AI 功能 > 权限 下设置;两者编辑的是同一项设置。

AI 功能权限页面:每个资源各有一个下拉菜单,均处于默认级别

将鼠标悬停在某项权限的标签或下拉列表上,即可查看各个级别允许的操作。如果管理员已通过策略为某项资源设置了上限,下拉列表会变为只读,并显示该策略。

每项资源都有一个访问级别:

资源 默认值 代理获得的内容
模型元数据 读取 读取:表、列、度量值、表达式、描述、关系,以及 VertiPaq分析器统计信息。写入:能够通过 C# Script 脚本更改模型
模型数据 禁止 读取:DAX 查询结果(来自你的模型的数据值)。需要实时连接
Best Practice Analyzer 读取 读取:规则集和分析结果。写入:添加和修改规则
文档 写入 读取:你打开的 DAX 查询、C# Script 和 DAX 脚本的内容。写入:修改这些内容,并创建 C# Script 和 DAX 查询
宏 写入 读取:你的宏库,包括名称、说明和代码。写入:此版本中没有额外工具

写入(在下拉列表中标为 读/写)包含“读取”权限,而 模型数据 没有“写入”级别。

文档 默认设置为“写入”,这允许代理创建选项卡,并覆盖已打开的 DAX 查询、C# Script 和 DAX 脚本的内容。代理不会运行它们,模型也不会更改。如果这些选项卡里有未保存的工作,就把 文档 设为“读取”。

将这些授权提升到默认值以上,会让智能体获得更多访问权限:

  • 模型数据 > 读取会将模型中的值发送给智能体,并经由智能体发送给其提供方。只在智能体需要用真实值核对结果时才授予这个权限。
  • 模型元数据 > 写入允许智能体通过 C# Script 修改模型。保护措施请参阅智能体如何更改你的模型。
Important

服务器启动时会读取权限,而智能体会在连接时获取其工具列表。更改授权后,先停止并重新启动服务器,再重新连接代理。在此之前,智能体会继续保留它连接时生效的权限。

代理可以做什么

智能体可用的工具取决于你的授权。下表列出了你可以提出的请求,以及每项请求所需的授权。

请求 所需授权
识别 Tabular Editor 实例及其当前打开的模型 无
搜索 Tabular Editor 文档、博客以及 GitHub 的 Issues 和 Discussions 无
查阅脚本 API:了解你当前运行的 Tabular Editor 版本中模型对象的属性、方法和签名 无
获取表的概览,包括每个表的列数、度量值数量以及所有关系 模型元数据 > 读取
获取指定名称对象的完整信息,包括表达式、说明、格式字符串和数据类型 模型元数据 > 读取
按名称、说明、DAX 或 M 表达式、格式字符串或批注搜索模型 模型元数据 > 读取
获取完整模型。这会消耗大量令牌,工具说明中也会提醒智能体 模型元数据 > 读取
在 TOM Explorer 中查看所选对象 模型元数据 > 读取
获取 VertiPaq分析器统计信息:表大小、列基数和内存使用情况 模型元数据 > 读取
列出有效的 Best Practice Analyzer 规则,包括你自定义的规则,并运行分析 Best Practice Analyzer > 读取
在本地规则集中添加或修改规则 Best Practice Analyzer > 写入
运行 DAX 查询并返回结果行。查询默认返回 100 行,最多返回 500 行 模型数据 > 读取 和 模型元数据 > 读取
列出你当前打开的 DAX 查询、C# Script 和 DAX 脚本 模型元数据 > 读取
读取已打开标签页的内容 文档 > 读取
编辑标签页,或打开新的 C# Script 或 DAX 查询以供审阅 文档 > 写入
读取你的宏库 宏 > 读取
更改模型。查看 代理如何更改你的模型 模型元数据 > 写入

在提示中引用对象之前,请先在 TOM Explorer 中选中它们,例如在请求“将这些对象的格式统一”之前。

在代理生成的 C# Script 或 DAX 查询以文档形式打开之前,Tabular Editor 会先编译脚本或根据当前打开的模型验证查询,并将所有错误返回给代理。 DAX 查询验证需要 Tabular Editor 连接到 Analysis Services 或 Power BI。

Note

查询数据需要实时连接;而 VertiPaq 统计信息则需要连接,或使用你事先已收集的统计信息。工具的可用性在代理连接时确定,因此如果你在之后才连接模型,请重新连接代理。

代理如何更改你的模型

拥有 模型元数据 > 写入 权限时,代理会通过在后台创建 C# Script 来更改你的模型。 Tabular Editor 会编译该脚本,检查其安全性,并针对当前打开的模型运行它。

脚本可以执行 C# Script API 支持的任何操作,例如添加度量值、列、计算组、透视、翻译、关系和刷新策略,或批量重命名并设置对象格式。由代理运行的脚本具有以下特性:

  • 其所有更改会合并为一条名为 C# Script (MCP) 的撤销记录;按 Ctrl+Z 会撤销整个脚本。当文档处于焦点时,按 Ctrl+Z 可撤销在文档中输入的内容。请先单击 TOM Explorer,或在 Edit 菜单中选择 Undo C# Script (MCP)。请参阅文本编辑器中的撤销。
  • 如果脚本执行到一半时引发异常,其所有更改都会回滚。
  • 代理会收到一个列表,其中包含脚本新增、更改或删除的每个对象,以及脚本输出的所有内容。
  • 来自 Output、Info、Warning 或 Error 的信息会作为结果的一部分返回给代理,且不会弹出任何对话框。
  • 长时间调用运行时,会显示 请稍候 指示器,并忽略你在 Tabular Editor 中的点击操作。
  • 在你保存之前,TOM Explorer 和属性视图中会标记已更改的对象和属性。显示更改 会将两个视图筛选为只显示更改项;右键单击 还原 可撤销单个属性、单个对象或整个分支。

打开的编辑菜单中只有一条“撤销 C# Script (MCP)”记录,TOM Explorer 用绿色标记新增度量值,用橙色标记已更改的度量值,并用带删除线的红色标记已删除的度量值,属性视图则筛选为仅显示那一个已更改的属性

AI 助手聊天运行脚本的方式相同:同样只有一个撤销步骤,并支持回滚;其撤销记录为 C# Script (AI Assistant)。代理脚本没有预览对话框,也没有 取消 按钮。之后可在 TOM Explorer 和属性视图中检查这些更改。

被阻止的操作

无论你授予了哪些权限,以下操作都会被阻止:

  • 在由代理运行的脚本中,用于执行原始 TMSL 或 XMLA 的 ExecuteCommand 始终会失败。
  • 访问文件系统、发送 Web 请求或引用外部程序集的代理脚本不会运行。这项检查使用的分析与 BlockUnsafeScripts 策略相同;完整列表见 哪些情况算作保持在模型范围内。脚本会如何处理,取决于你的权限和策略:
    • 拥有 文档 > 写入 权限时,脚本会以 代理脚本(审阅) 文档的形式打开,工具结果会告知代理让你审阅并运行它。
    • 如果没有 文档 > 写入,脚本不会运行,也不会打开任何文档。
    • 启用 BlockUnsafeScripts 策略后,脚本不会运行,也不会打开任何文档。
  • 脚本中的 DAX 辅助功能同样需要 模型数据 > 读取 权限,与查询工具一致。

示例任务

修复 Best Practice Analyzer 违规项

打开一个模型,然后提问:

运行 Best Practice Analyzer,告诉我哪些问题值得优先修复,按严重程度从高到低排列。

然后继续输入“修复格式字符串违规项”。如果已授予 模型元数据 > 写入,代理会编写并运行一段脚本,并在 TOM Explorer 中以橙色高亮显示已更改的对象。在属性视图中,点击 显示更改 可按属性查看更改前后的值。右键点击任何你不想保留的更改,选择 还原,然后保存。

根据规格说明添加度量值

让代理读取规格说明、工单或包含度量值定义的电子表格:

把 requirements.md 中的度量值添加到 Sales 表。沿用那里已有的命名和格式字符串。

代理会从其自身的 Workspace 中读取 requirements.md。

用查询验证结果

授予 模型数据 > 读取 后,代理可以运行 DAX 来检查自己的工作:

确认新的 Margin % 度量值在 2025 年得出的总计与旧计算相同。

它会编写并运行 DAX 查询,然后对比结果。

起草脚本而不运行

有了 文档 > 写入 权限,代理可以将 C# Script 或 DAX 查询写入文档,供你审阅后自行运行;例如,你可以在实际运行前先检查更改,或稍后在另一个模型上运行:

帮我写一个脚本,把每个度量值重命名为句首大写的 sentence case 格式,但不要运行它。

该脚本会作为文档在 Tabular Editor 中打开,并已完成编译和安全检查。读完后再运行。

Tip

在任务之间先审阅并保存,让每次未保存的更改都尽量少一些。

同时运行多个实例

每个 Tabular Editor 实例都会在各自的端口上托管自己的服务器。要同时处理两个模型,请分别在各自的实例中打开,并为每个实例连接一个代理。

要启动第二个服务器,请启动第二个实例,打开 Tools > MCP Server...,然后单击 Start server。如果配置的端口已被占用,系统会提示使用后续 20 个端口中第一个可用的端口;如果都不可用,则会显示错误。你也可以在 Tools > 偏好 > AI Features > MCP Server 中设置其他端口。

以单独的名称在代理中注册第二个端口,并在提示中写明你指的是哪个实例。

在共享计算机上运行

服务器监听在 127.0.0.1 上,其他机器无法访问。它还会拒绝带有非本地 Origin 标头的浏览器请求。

当 要求访问令牌 处于关闭状态时,本机上的任何进程都可以在无需凭据的情况下连接。在多个用户同时登录的主机上(例如远程桌面或 Citrix 服务器),这也包括其他用户会话中的进程。

在 工具 > 偏好 > AI 功能 > MCP 服务器 中选择 要求访问令牌,然后重新启动服务器。此后,代理必须提供服务器对话框中显示的令牌;未提供令牌的请求将被拒绝。

选择 重新生成令牌(令牌旁边的刷新按钮)以生成新令牌;这会使现有注册失效,并重新启动正在运行的服务器。如果令牌已泄露,请重新生成令牌并重新注册你的代理。管理员可以通过 RequireMcpAccessToken 策略强制所有人都使用令牌,同时也会锁定该偏好设置。参见 @policies。

哪些内容会离开你的计算机

使用 MCP 服务器时,Tabular Editor 不会联系任何 AI 提供商,只会通过回环连接响应来自你本机进程的工具调用。代理搜索的知识库是 Tabular Editor 随附的本地数据库,并通过 Tabular Editor 的服务进行更新。

你的代理会按照你的订阅和该提供商的条款,将数据发送给相应的提供商;发送哪些数据由代理的设置决定。当 Model data 保持默认值 Deny 时,代理将无法从 Tabular Editor 获取任何 DAX 查询结果。在模型定义中输入的值,例如 DATATABLE 表达式或 Enter data 表,属于模型元数据,代理可通过 Model metadata > Read 访问这些内容。

更全面的说明请参阅 @security-privacy,其中也包括 AI 助手;它会直接调用提供商,并且需要单独配置。

管理员控制

MCP 服务器默认启用,任何用户都可以将其关闭。管理员可以使用以下 策略 来控制 MCP 的运行方式:

策略 版本 作用
DisableMcpServer 所有版本 移除 MCP 服务器。 AI 助手聊天不受影响
DisableAi 所有版本 关闭所有 AI 功能,包括 MCP 服务器。将 REG_DWORD 的值设为 1 后,安装程序在全新安装时也不会安装 AI 组件,并会在升级时将其移除
RequireMcpAccessToken 所有版本 强制使用令牌进行身份验证,并锁定该偏好
DisableCSharpScripts 全部 阻止代理运行 C# Script,并禁止将脚本草拟到文档中。起草 DAX 查询以及所有只读工具都不受影响
BlockUnsafeScripts 企业版 在 Tabular Editor 中,所有脚本都只能在模型内部运行。访问文件、网络、其他进程或外部程序集的代理脚本不会运行,也不会打开任何审阅文档
Max... 和 McpMax... 权限限制 企业版 为每种资源设置上限。 Max... 限制适用于 AI Assistant 和 MCP 服务器。 McpMax... 限制仅适用于 MCP 服务器,并且只能将 Max... 限制调低
AiAuditLogPath, AiAuditLogRetentionDays 企业版 设置 审计日志 的位置和保留期
AiProvider 及相关值 企业版 锁定 AI Assistant 的提供程序。 MCP 服务器不受影响
Warning

如果没有 Enterprise 许可证,任何 Enterprise 策略设置都会阻止 AI Assistant 和 MCP 服务器启动,并移除菜单项和状态栏指示器。 BlockUnsafeScripts 值还会阻止所有脚本和宏,因此只能将 Enterprise 策略部署到具有 Enterprise 许可证的计算机上(请参阅没有企业版时会发生什么)。

在企业版中,Tabular Editor 会在本地保留 AI Assistant 和 MCP 服务器活动的审计日志,其中包括代理调用的每个工具,以及其运行的任何 C# Script 的完整文本。提示词、回复和数据值不会被记录。在服务器对话框中点击 打开审计文件夹,或在 工具 > 偏好 > AI 功能 中点击同名按钮,都会打开日志文件夹。在 Desktop 版和商业版中,不会记录任何内容,这两个按钮也都不会显示。

有关完整列表、注册表布局和管理模板,请参阅 @policies。

故障排查

你看到的现象 实际情况
代理提示它没有可用于 Tabular Editor 的工具 服务器没有运行,或者代理在服务器启动前就已连接。确认状态栏显示 MCP 已启动,然后重新连接代理
智能体看不到你刚授予的权限 授权会在服务器启动时读取,工具列表会在连接时确定。停止并重新启动服务器,然后重新连接智能体
长时间中断后,代理会丢失连接 如果 20 分钟内没有任何请求且没有打开的流,服务器会关闭会话。重新连接智能体
智能体报告未打开任何模型 服务器独立于你的模型运行。请在 Tabular Editor 中打开一个模型,然后再问一次。你不需要重启任何东西
智能体无法运行 DAX 查询 模型数据 默认设置为 Deny。查询也需要实时连接:如果模型是从磁盘打开的,不管授予什么权限,查询工具都不可用
连接被 401 拒绝 要求访问令牌 已开启,但智能体没有发送该令牌。请再次从对话框中复制注册配置。其中包含令牌
端口已被占用 另一个 Tabular Editor 实例或其他应用程序正在使用它。在提示中接受下一个可用端口,并更新代理的注册信息。如果启用了 自动启动 MCP 服务器,启动时发生冲突将不会弹出提示,指示器会显示 MCP Stopped
菜单中没有 工具 > MCP 服务器... 在偏好中未选中 启用 MCP 服务器,未安装 AI 功能组件,管理员设置了 DisableMcpServer 或 DisableAi,或者在未获得相应许可的计算机上设置了 Enterprise 策略值。见 @policies

后续步骤

  • 完整权限模型和内置聊天见 @ai-assistant。
  • 通过 未保存更改指示符 查看并撤销智能体所做的更改。
  • 有关脚本以及因此代理能更改哪些内容,见 @csharp-scripts。
  • 如需了解如何在组织范围内对服务器进行治理,请参阅 @policies。
  • 如果你的代理处理 repository 或管道中的模型文件,见 @te-cli-skill。