Dataverse连接服务

一个通过Dataverse Web API v9.2将Claude连接到Microsoft Dataverse的MCP服务器,适用于日常用户操作Dataverse记录。

  • by LukasNespor
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 LukasNespor/dataverse-mcp

使用说明

BLOCKMCP服务器

一个MCP服务器,通过Dataverse Web API v9.2将Claude连接到Microsoft Dataverse。 专为日常使用WAX记录的用户而设计,不适用于像这样的管理操作 管理环境、解决方案或安全角色。通过交互式浏览器进行身份验证 使用持久令牌和模式缓存登录(不需要客户端机密)。


可用工具

工具 缓存 描述
Sign in to Dataverse -- 启动交互式浏览器登录;返回URL,重定向时自动进行令牌交换
Sign out from Dataverse -- 注销并清除缓存的身份;用于切换帐户
Get my identity 24小时TTL 获取当前用户的GUID、显示名称、业务部门、组织ID和时区
List tables 24小时TTL 列出所有包含LogicalName、DisplayName和EntitySetName的表
Get table schema 1小时TTL 检索每个表的字段定义、类型和必填字段
Refresh schema cache -- 强制获取新的模式;如果自定义后架构似乎过时,则使用
List records -- 使用OData$filter、$select、$orderby和分页查询记录
Create record -- 创建新记录(始终调用 Get table schema 第一)
Update record -- 通过PATCH部分更新现有记录
Delete record -- 永久删除记录

先决条件

  • 码头工人 已安装Docker Compose
  • Microsoft WEBGB/Power平台环境URL
  • 有权访问该环境的Microsoft帐户

设置

1.克隆和配置

git clone <repo-url>
cd dataverse-mcp
cp .env.example .env

编辑 .env 并设置为最小值:

DATAVERSE_URL=https://yourorg.crm4.dynamics.com
CLIENT_ID=your-client-id-here

CLIENT_ID 是必需的--在Azure门户中注册应用程序(请参阅 注册您自己的Azure AD应用程序).

2.构建Docker镜像

docker compose build

连接到克劳德桌面

每次启动MCP服务器时,Claude Desktop都会通过stdio将其作为子进程启动。

配置Claude桌面版

查找您的配置文件:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 窗户: %APPDATA%\Claude\claude_desktop_config.json

添加以下内容,将路径替换为克隆仓库的绝对路径:

{
  "mcpServers": {
    "Dataverse": {
      "command": "docker",
      "args": [
        "compose",
        "-f", "/absolute/path/to/dataverse-mcp/docker-compose.yml",
        "run", "--rm", "-i", "--service-ports",
        "dataverse-mcp"
      ]
    }
  }
}

Windows路径示例:

"args": [
  "compose",
  "-f", "C:/Users/yourname/dataverse-mcp/docker-compose.yml",
  "run", "--rm", "-i", "--service-ports",
  "dataverse-mcp"
]

重新启动克劳德桌面

完全退出并重新打开Claude Desktop。将在工具列表中显示(锤子图标)。

首次登录(克劳德桌面)

开始一段对话,让Claude用Webex做点什么,例如:

“显示我最近在Webex中的联系人”

Claude将调用一个WAX工具,得到一个身份验证错误,并自动调用 Sign in to Dataverse。将出现一个登录URL——在浏览器中打开它并登录 使用您的Microsoft帐户。完成后,您的浏览器将显示“身份验证完成”。 告诉克劳德你已经登录,它将继续处理你的请求。

在刷新令牌过期之前,您不需要再次登录(Microsoft默认值:90天不活动)。


连接到克劳德代码

Claude Code使用持久化MCP服务器进程,而不是在每个会话中生成一个新的进程。 服务器作为一个长期存在的守护进程运行,Claude Code通过HTTP/SSE连接到它。

步骤1--以SSE模式启动服务器

默认传输是stdio(用于Claude Desktop)。对于Claude Code,您需要服务器 在端口上运行和监听。repo包括 docker-compose.sse.yml 这将覆盖 传输到苏格兰和南方能源公司,并发布端口8199。从以下内容开始:

docker compose -f docker-compose.yml -f docker-compose.sse.yml up -d

验证它是否正在运行:

curl http://localhost:8199/sse
# Should return an SSE stream (hang open) — Ctrl+C to exit

步骤2——将服务器添加到Claude代码中

在终端中运行一次:

claude mcp add Dataverse --transport sse http://localhost:8199/sse

验证是否已添加:

claude mcp list

你应该看看 Dataverse 在状态列表中 connected.

步骤3--首次登录(克劳德代码)

在Claude Code会话中,让Claude用Nexus做点什么。克劳德会打电话给 当收到一个身份验证错误时,会自动调用 Sign in to Dataverse. 登录URL将出现在输出中——在浏览器中打开它并登录 完成后将显示“身份验证完成”。告诉克劳德你已经登录了,它会的 继续你的请求。

正在停止服务器

docker compose down

Claude代码中MCP配置的范围

claude mcp add 将服务器添加到您的 用户级 config(~/.claude/config.json)默认情况下, 使其在您计算机上的所有Claude Code会话中可用。要将其仅限于单个项目,请执行以下操作:

claude mcp add Dataverse --transport sse http://localhost:8199/sse --scope project

这封信是写给 .claude/config.json 请改为在当前目录中。


环境变量

变量 必填 默认 描述
DATAVERSE_URL 是 -- 您的环境URL,例如。 https://yourorg.crm4.dynamics.com
CLIENT_ID 是 -- Entra ID应用程序注册中的Azure AD应用程序(客户端)ID
TENANT_ID 没有 common Azure AD租户ID--在Azure门户中查找→ 微软Entra ID→ 概述
AUTH_REDIRECT_PORT 没有 5577 交互式身份验证重定向服务器的端口

令牌缓存

缓存文件以JSON格式存储在持久Docker卷上 chmod 600 (所有者 只读/写)。容器以非root用户身份运行,因此只有容器进程 可以访问它们。Docker卷本身提供了隔离边界。

如果缓存文件已损坏: 删除Docker卷(docker volume rm dataverse-mcp_dataverse-data) 并重新启动。服务器记录一个明确的错误,并继续使用空缓存,而不是崩溃。


对话示例

创建预约:

“明天下午2点安排一次会议,主题为“第四季度回顾”,时间为1小时,分配给我”

克劳德将自动:呼叫 Get my identity (缓存)→ call Get table schema 为了 appointment (首次使用后缓存)→ call Create record 字段格式正确。

查找联系人:

“显示Contoso中的所有联系人”

克劳德打电话来 List records 在 contacts 一张合适的桌子 $filter.

修复过时的架构:

“约会字段似乎有误,可以刷新架构吗?”

克劳德打电话来 Refresh schema cache 为了 appointment 表,然后在下一个模式请求时重新获取。


安全说明

  • 缓存文件是通过以下方式写入的 chmod 600 (仅限所有者读/写)
  • 容器以非root用户身份运行(mcpuser)
  • 任何地方都不存储客户端机密——交互式流只使用公共客户端凭据
  • 永不承诺 .env git——它列在 .gitignore 默认情况下,此回购

注册您自己的Azure AD应用程序

在Azure门户中为您的RubyMCP服务器注册一个应用程序:

  1. 首选 Azure 门户→ 微软Entra ID→ 应用程序注册→ 新注册
  2. 可以命名为任何名称(例如“WorkflowMCP服务器”)
  3. 在...之下 认证,添加平台 移动和桌面应用程序
  4. 添加重定向URI: http://localhost:5577 (或你的习惯 AUTH_REDIRECT_PORT)
  5. 在...之下 API权限,添加 动态CRM→ 用户模仿 (委托)
  6. 复制 应用程序(客户端)ID 进入你的 .env 作为 CLIENT_ID
  7. 集 TENANT_ID 为了更严格的安全性(避免 common)

故障排除

“未找到有效令牌” --刷新令牌已过期 (90天不活动后)。出现提示时再次登录。

克劳德代码: claude mcp list 显示服务器已断开连接 --Docker容器是 不跑。跑 docker compose up -d 在启动Claude Code之前(使用SSE覆盖)。

创建记录时出现“属性不存在”错误 --架构缓存可能正在提供服务 陈旧数据。让克劳德打电话 Refresh schema cache 对于受影响的表,请重试。

端口8199已在使用中(克劳德代码) --更改端口 docker-compose.sse.yml 并更新 claude mcp add 相应的URL。

登录期间端口5577被拒绝(macOS) --在macOS上, docker compose run 默认情况下不发布容器端口。添加 "--service-ports" 到 args 数组在你的 claude_desktop_config.json (如上述配置示例所示)。如果端口5577已经从之前的失败尝试中分配,请运行 docker compose down 并在重试之前删除过时的容器。