acu-mcp(存档--迁移到tuxton平台)
这个TypeScript项目已经移植到Python并转移到tuxton-platformmonorepo作为apps/acu_mcp/. 新家:/home/huyson/develop/tuxton-platform/apps/acu_mcp/端口重用共享packages/tuxton_acumatica/客户端(OAuth2+实体REST+OData v3)acu_etl和acu_mcp可以一起进化。OData v4工具已从初始端口中删除,因为/ODataV4/路由当前在IIS层为406ing,与客户端无关——底层助手仍然存在于tuxton_acumatica当服务器端问题解决时,可以将其重新连接为工具。 此目录保留用于历史参考,但不应接收新工作。任何新的Acumatica REST集成都将进入apps/acu_mcp/或packages/tuxton_acumatica/.
______________________________________________________________________
一 MCP(模型上下文协议) 将Claude连接到Acumatica ERP以进行只读分析查询的服务器。
工具
| 工具 | 说明 |
|---|---|
query_sales_orders | 使用OData表达式列出和筛选销售订单 |
get_sales_order | 获得一份包含全线商品详细信息的订单 |
list_inventory_items | 列出按类别、状态等筛选的库存项目。 |
get_inventory_item | 获取具有仓库库存数量的特定项目 |
query_shipments | 列出并过滤货物 |
get_shipment | 获得一批带有行详细信息的货物 |
query_invoices | 列出并过滤应收账款发票 |
get_invoice | 获取包含行详细信息的单一发票 |
query_purchase_orders | 列出并筛选采购订单 |
get_purchase_order | 获取包含行详细信息的单个采购订单 |
query_customers | 列出并筛选客户 |
get_customer | 获取一位拥有联系人和地址的客户 |
list_odata_entities | 通过OData发现所有可用的通用查询实体集 |
query_odata | 使用OData筛选器按名称查询任何通用查询,选择、按顺序、按顶部、跳过 |
先决条件
- 18.3或更晚
- 具有专用服务帐户的Acumatica实例(请参见 Acumatica设置 在......下面
安装
git clone git@github.com:lycheejello/acu-mcp.git
cd acu-mcp
npm install
npm run build配置
复制示例env文件并填写您的值:
cp .env.example .envACU_BASE_URL=https://yourinstance.acumatica.com/YourTenant
# OData URL is derived automatically: {ACU_BASE_URL}/odata/{ACU_COMPANY}
ACU_USERNAME=mcp-user
ACU_PASSWORD=your_password
ACU_COMPANY=YourCompanyLoginName
ACU_ENDPOINT=Default
ACU_VERSION=25.200.001
# Required for OData access (see Acumatica Setup below)
ACU_CLIENT_ID=your_client_id@YourCompanyLoginName
ACU_CLIENT_SECRET=your_client_secret警告: 使用专用服务帐户(例如。 mcp-user).请勿使用您的个人Acumatica登录。克劳德集成
克劳德代码(CLI)
运行一次以全局注册服务器:
claude mcp add --scope user acumatica \
-e ACU_BASE_URL=https://yourinstance.acumatica.com/YourTenant \
-e ACU_USERNAME=mcp-user \
-e ACU_PASSWORD=your_password \
-e ACU_COMPANY=YourCompanyLoginName \
-e ACU_ENDPOINT=Default \
-e ACU_VERSION=25.200.001 \
-e ACU_CLIENT_ID=your_client_id@YourCompanyLoginName \
-e ACU_CLIENT_SECRET=your_client_secret \
-- node /absolute/path/to/acu-mcp/dist/index.js运行此命令后重新启动Claude Code。
克劳德桌面-macOS
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"acumatica": {
"command": "node",
"args": ["/absolute/path/to/acu-mcp/dist/index.js"],
"env": {
"ACU_BASE_URL": "https://yourinstance.acumatica.com/YourTenant",
"ACU_USERNAME": "mcp-user",
"ACU_PASSWORD": "your_password",
"ACU_COMPANY": "YourCompanyLoginName",
"ACU_ENDPOINT": "Default",
"ACU_VERSION": "25.200.001",
"ACU_CLIENT_ID": "your_client_id@YourCompanyLoginName",
"ACU_CLIENT_SECRET": "your_client_secret"
}
}
}
}克劳德桌面-Windows
编辑 %APPDATA%\Claude\claude_desktop_config.json 使用相同的结构,使用Windows路径:
"args": ["C:\\absolute\\path\\to\\acu-mcp\\dist\\index.js"]保存后重新启动Claude Desktop。
验证
重启后,问克劳德:
*“显示最近5个未结销售订单”*
克劳德应该打电话来 query_sales_orders 并返回实时数据。
Acumatica设置
连接的应用程序(OData需要)
OData访问需要在Acumatica中注册的连接应用程序。为每个集成创建一个(例如,此MCP服务器创建一个,Azure Functions创建一个),以便可以独立管理和撤销凭据。
在 301000平方米 (连接的应用程序):
- 点击 + 添加新应用程序
- 集 客户名称 (仅显示名称,例如。
TuxtonTools MCP或TuxtonTools ETL) - 离开 客户端ID 空白,让Acumatica生成一个,或设置自定义值
- 集 流动 到
Resource Owner Password--这是代码使用的授权类型 - 保存
- 在 共享秘密 选项卡,单击 +,输入a 描述 (例如。
acu-mcp-prod),然后单击 生成密钥 --立即复制密码,密码将不再显示 - 注意 客户端ID 以及生成的 共享密钥密码 --使用这些作为
ACU_CLIENT_ID和ACU_CLIENT_SECRET
注: 为每个集成创建单独的互联应用程序。这允许独立的凭证轮换和审计跟踪。
服务账户
在 SM201010 (用户),创建一个专用服务帐户:
- 集 登录名 (例如。
mcp-user)以及一个强密码 - 启用 Web服务访问 复选框
- 在 角色 选项卡,为每个模块(销售订单、库存、应收账款、应付账款等)分配只读查看器角色
- 集 API登录的最大数量 至少
5在开发过程中允许并发会话
发展
npm run dev # run with tsx (no build step)
npm run build # compile TypeScript → dist/
npm start # run compiled output添加新实体
- 创建
src/tools/{entity}.ts并出口aregister{Entity}Tools(server: McpServer)功能 - 打电话给
src/tools/index.ts - 无需其他更改
路线图
看 计划.md 完整的架构和分阶段开发计划。
第一阶段(完成): 核心服务器,配备12个REST工具,涵盖销售订单、库存、发货、发票、采购订单和客户。 第二阶段(进行中): OData/GI传递完成(list_odata_entities + query_odata);总账余额工具和MCP资源/提示仍在等待中。 第三阶段: OAuth 2.0、HTTP/SSE传输、生产强化。
