Token导航 LogoToken导航TokenDH.com
Claude Code D365fo MCP logo
运维云端未说明官方级别未说明来源级核验

Claude Code D365fo MCP

MCP Server

一个允许Claude Code通过Model Context Protocol (MCP)与Microsoft Dynamics 365 Finance & Operations进行交互的Node.js代理。

工具数

3

提示词数

0

GitHub Stars

4

资源数

0
自然语言查询JavaScriptClaudeClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

axpolik

提供方

axpolik

最后核验

2026/5/17 20:19

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

克劳德代码↔ Dynamics 365 F&O-MCP集成

一个小型代理,允许 克劳德代码 和...交谈 微软Dynamics 365财务与运营 通过 模型上下文协议(MCP).

设置后,您可以查询D365数据、浏览表单和调用自定义X++操作——所有这些都可以使用自然语言从Claude Code中完成。

在WSL Ubuntu上测试,安装了Azure CLI扩展的VSCode。

为什么需要这个?

为什么不直接通过HTTP连接?

虽然模型上下文协议(MCP)正式支持HTTP传输(通过服务器发送事件-SSE),但将Claude Code直接连接到远程Dynamics 365 F&O MCP服务器并不简单。该代理通过解决三个主要的架构约束来弥合差距:

*1.不支持动态HTTP标头(身份验证)* Claude Code的配置依赖于静态设置。连接到D365 F&O需要动态注入 Authorization: Bearer 将标题插入请求中。Claude Code目前缺乏一个内置机制来动态获取Entra ID(Azure AD)令牌并将其动态注入HTTP标头。

*2.令牌到期(Entra ID)* 即使您可以将Bearer令牌硬编码到Claude Code配置中,Entra ID访问令牌通常也会在60-90分钟内过期。静态配置将导致 401 Unauthorized 此Node.js代理通过在后台通过Azure CLI动态获取和管理有效令牌来解决此问题。

*3.克劳德密码 stdio 设计* Claude Code主要是一个开发人员CLI工具,旨在与本地资源进行交互。它本机更喜欢生成MCP服务器,因为本地子进程通过 stdio.

解决方案: 此代理充当适配器。从Claude Code的角度来看,它只是一个简单的本地脚本,通过 stdio从D365 F&O的角度来看,它是一个经过适当身份验证的HTTP/SSE客户端,使用有效的Bearer令牌发出请求。

运作原理

这个想法很简单:一个很小的Node.js脚本位于中间,在两个世界之间转换。

┌─────────────┐  stdio (JSON-RPC)  ┌───────────────────┐  HTTPS + Bearer  ┌──────────────────┐
│ Claude Code │ ◄───────────────►  │ mcp-dynamics365fo │ ◄──────────────► │ D365 F&O MCP     │
│ (IDE/CLI)   │  stdin / stdout    │ proxy.mjs         │  HTTP POST       │ Server (remote)  │
└─────────────┘                    └───────────────────┘                  └──────────────────┘
                                          │
                                          │ az account get-access-token
                                          ▼
                                   ┌──────────────────┐
                                   │ Azure CLI (az)   │
                                   │ Token Provider   │
                                   └──────────────────┘
  1. Claude Code将代理作为子进程生成(在中配置 .mcp.json).
  2. 它将JSON-RPC消息发送到代理的stdin。
  3. 代理从Azure CLI获取Bearer令牌,并将每条消息作为HTTP POST转发到D365 MCP端点。
  4. D365响应(纯JSON或SSE流)——代理解析它并将结果写回stdout。
  5. mcp-session-id 在请求之间跟踪标头以保持D365服务器端状态。

设计决策

为什么选择Azure CLI进行身份验证? D365 MCP服务器需要Azure AD令牌。使用 az account get-access-token 这是阻力最小的道路——无需管理客户端机密,无需创建应用程序注册,只需您现有的 az login 会议。它适用于MFA、有条件访问等。

为什么每45分钟刷新一次代币? Azure AD令牌大约在60-75分钟后过期。代理每45分钟主动刷新一次,这样您就不会在对话过程中出现随机故障。

为什么要代理上交所? D365有时会回应 text/event-stream 而不是普通的JSON。代理透明地处理这两个问题——你不需要担心。

关于ClientID

Azure CLI客户端ID为: 04b07795-8ddb-461a-bbee-02f9e1bf7b46

这是在Azure AD中注册的第一方Microsoft应用程序,适用于全球所有Azure CLI用户。您不需要创建自己的应用程序注册。只需将此ID复制到步骤2中的D365“允许的MCP客户端”表单中。

注意:这与默认的VSCode不同 可点击.

可选--自己验证:

  1. 运行: az account get-access-token --resource https://YOUR-ENVIRONMENT.operations.dynamics.com --query accessToken -o tsv
  2. 将令牌粘贴到 jwt.ms
  3. 检查 appid claim——它应该与上面的ID匹配。

更多信息: Microsoft文档--使用Azure CLI登录

先决条件

  • Node.js 22+ (需要本地 fetch;节点18+可能适用于 --experimental-fetch)
  • Azure命令行界面 已安装并登录(az login)
  • D365 F&O 启用MCP服务器的环境
  • 克劳德代码 (VSCode扩展或CLI)

设置

步骤1:Azure CLI

# Install if needed: https://learn.microsoft.com/en-us/cli/azure/install-azure-cli

# Log in
az login

# Quick test — should print a long token string
az account get-access-token \
  --resource "https://YOUR-ENVIRONMENT.operations.dynamics.com" \
  --query accessToken -o tsv

步骤2:在D365中注册ClientID

这部分很重要——除非明确允许客户端应用程序,否则D365不会接受MCP连接。

  1. 在浏览器中打开D365 F&O环境。
  2. 首选 系统管理 并搜索 “允许的MCP客户端”.
  3. 添加新行:

- 名字: AzureCLI-ClaudeCode (或你喜欢的任何东西) - 可点击: 04b07795-8ddb-461a-bbee-02f9e1bf7b46 - 允许: true

  1. 保存。

Allowed MCP Clients form in D365

步骤3:克隆仓库

git clone https://github.com/axpolik/claude-code-d365fo-mcp.git

无需编辑代理脚本——所有配置都是通过中的环境变量完成的 .mcp.json.

步骤4:配置Claude代码

复制 .mcp.json 到您的项目根(或 ~/.claude/.mcp.json 全局配置):

cp .mcp.json /path/to/your/project/.mcp.json

然后编辑 .mcp.json --设置D365环境URL和代理脚本的路径:

{
  "mcpServers": {
    "dynamics365fo": {
      "command": "/absolute/path/to/node",
      "args": ["/absolute/path/to/mcp-dynamics365fo-proxy.mjs"],
      "env": {
        "PATH": "/mnt/c/Program Files/Microsoft SDKs/Azure/CLI2/wbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "D365_MCP_URL": "https://YOUR-ENVIRONMENT.sandbox.operations.dynamics.com/mcp",
        "D365_RESOURCE": "https://YOUR-ENVIRONMENT.sandbox.operations.dynamics.com"
      }
    }
  }
}

有几件事要记住:

  • command --可以只是 "node" 如果它在你的路径中,或者像这样的完整路径 "/home/user/.nvm/versions/node/v22.22.0/bin/node".
  • args --需要 绝对路径 到代理脚本。
  • D365_MCP_URL / D365_RESOURCE --您的D365 F&O环境URL。打开D365时在浏览器地址栏中找到它(例如。 https://mycompany.sandbox.operations.eu.dynamics.com).
  • env.PATH --必须包含以下目录 az 生活。在WSL上,您可能还需要添加Windows侧路径(请参阅故障排除)。

第五步:测试

  1. 在VSCode或终端中打开克劳德代码。
  2. 检查MCP服务器状态-- dynamics365fo 应该出现。
  3. 尝试以下内容: *“在D365中查找SalesOrderHeaders实体”*.

文件

claude-code-d365fo-mcp/
├── README.md                       # You're reading it
├── mcp-dynamics365fo-proxy.mjs     # The proxy (stdio ↔ HTTP)
├── .mcp.json                       # Claude Code MCP config template
└── d365foMCPclient_form.jpg        # Screenshot of the D365fo config form

故障排除

“令牌刷新失败” --你的 az login 会话已过期。跑 az login 再一次。

代理已启动,但未显示任何工具 --检查三件事:(1)您的D365环境上启用了MCP服务器,(2)您的ClientID在“允许的MCP客户端”窗体中,(3)您的Azure AD用户具有正确的D365安全角色。

“未定义fetch” --你需要Node.js 22+(它具有原生 fetch).在节点18-21上,添加 --experimental-fetch 标志作为Node.js参数 *之前* 中的脚本路径 .mcp.json:

"args": ["--experimental-fetch", "/path/to/mcp-dynamics365fo-proxy.mjs"]

如何在本地调试代理? --如果Claude Code没有显示任何工具,请直接在终端中运行代理以查看原始错误:

D365_MCP_URL="https://YOUR-ENV.operations.dynamics.com/mcp" \
D365_RESOURCE="https://YOUR-ENV.operations.dynamics.com" \
node mcp-dynamics365fo-proxy.mjs

如果它崩溃了,你会立即看到Node.js错误堆栈。如果它静默等待,则表示它正在正常运行并等待来自stdin的JSON-RPC输入。

WSL上的PATH问题 --如果 az 已安装在Windows端,请将其添加到PATH中 .mcp.json:

"env": {
  "PATH": "/usr/local/bin:/usr/bin:/bin:/mnt/c/Program Files/Microsoft SDKs/Azure/CLI2/wbin"
}

D365 MCP工具

连接后,您将获得三类工具: 数据 (OData CRUD), 形式 (UI导航),以及 API (自定义X++调用)。对于CRUD操作,首选数据工具——目前它们更快、更可靠。

⚠️ 高令牌消耗警告

D365 F&O可以返回大量JSON有效载荷(数据实体、元数据)。无限制地查询它会迅速耗尽Claude上下文窗口并增加API成本。

如何最大限度地减少代币使用:

  • 重度过滤: 始终指示克劳德使用以下限制 $top, $select,或 $filter 只获取所需的确切行和列。
  • 💡 专业提示:将本地文件用作“内存”: 请Claude将常用的静态D365数据(如模式、元数据或特定ID)保存到本地文件中(例如。, d365_memory.md).Claude可以稍后读取此文件,而无需重新查询MCP服务器,从而节省了大量令牌!

示例:使用内存文件启动新的Claude Code会话的初始提示

## Session context:
- The file `d365fo-mcp-memory.md` in the project root is a local cache for dynamics365fo MCP tool data
- Before any query to the dynamics365fo MCP tool, check this file first — if data is there and current, use it without calling MCP tools
- If data is missing, insufficient, or ambiguous — call dynamics365fo MCP tool and save the result to the memory file
- Save to memory: entity metadata, field schemas, control names, semi-static query results (with query date)
- Modify the memory file without asking for confirmation

##Start by reading d365fo-mcp-memory.md to load context.

许可证

麻省理工学院

目录标签

目录标签

自然语言查询JavaScriptClaudeD365F&O本地部署MCP代理AzureCLI认证JSON-RPC

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

token

工具数量(toolCount,工具数)

3

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明token部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP