SAP ECC RFC MCP服务器
蟒蛇 主控程序 该服务器将SAP ECC BAPI作为AI代理的工具公开。内置于 FastMCP v2 和 PyRFC,它允许Claude(或任何MCP客户端)读取主数据、创建销售/采购订单和查询任意SAP表——所有这些都是通过自然语言完成的。
包括完整 模拟模式 用于在没有实时SAP系统的情况下进行开发和测试。
工具(17)
主数据(只读)
| 工具 | BAPI | 说明 |
|---|---|---|
get_material | BAPI_MATERIAL_GET_DETAIL | 按编号阅读材料 |
search_materials | BAPI_MATERIAL_GETLIST | 按描述/类型搜索 |
get_customer | BAPI_CUSTOMER_GETDETAIL2 | 按编号读取客户 |
search_customers | BAPI_CUSTOMER_GETLIST | 按姓名/城市搜索 |
get_vendor | BAPI_VENDOR_GETDETAIL | 按编号读取供应商 |
search_vendors | BAPI_VENDOR_GETLIST | 按名称搜索 |
销售
| 工具 | BAPI | 说明 |
|---|---|---|
get_sales_order | BAPI_SALESORDER_GETDETAIL | 读取SO标题+项目 |
search_sales_orders | BAPI_SALESORDER_GETLIST | 按客户/日期搜索 |
create_sales_order | BAPI_SALESORDER_CREATEFROMDAT2 | 使用COMMIT创建SO |
change_sales_order | BAPI_SALESORDER_CHANGE | 使用COMMIT更新SO |
采购
| 工具 | BAPI | 说明 |
|---|---|---|
get_purchase_order | BAPI_PO_GETDETAIL1 | 读取采购订单标题+项目 |
search_purchase_orders | BAPI_PO_GETITEMS | 按供应商/日期搜索 |
create_purchase_order | BAPI_PO_CREATE1 | 使用COMMIT创建PO |
发票
| 工具 | BAPI | 说明 |
|---|---|---|
get_invoices | BAPI_INCOMINGINVOICE_GETLIST | 搜索发票 |
通用RFC
| 工具 | RFC | 描述 |
|---|---|---|
describe_rfc | get_function_description | 获取FM参数签名 |
call_rfc | *(任何)* | 动态调用任何启用RFC的FM |
read_table | RFC_READ_TABLE | 使用筛选器读取任何SAP表 |
快速开始
先决条件
- Python 3.11+
- 紫外线 包管理器
安装并运行(模拟模式)
git clone && cd sap-ecc-rfc-prototype
uv sync --extra dev
SAP_MOCK_MODE=true uv run sap-mcp运行测试
uv run pytest -vClaude桌面集成
添加 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"sap-ecc": {
"command": "uv",
"args": ["--directory", "/path/to/sap-ecc-rfc-prototype", "run", "sap-mcp"],
"env": {
"SAP_MOCK_MODE": "true"
}
}
}
}重新启动Claude Desktop,将显示17个工具。
配置
所有设置都使用 SAP_ env前缀,可以通过以下方式设置 .env 文件或环境变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
SAP_ASHOST | localhost | SAP应用服务器主机 |
SAP_SYSNR | 00 | 系统编号 |
SAP_CLIENT | 100 | SAP客户端 |
SAP_USER | RFC_USER | RFC用户 |
SAP_PASSWD | *(空)* | RFC密码 |
SAP_LANG | EN | 登录语言 |
SAP_MOCK_MODE | true | 使用模拟连接(不需要SAP) |
SAP_CONNECTION_POOL_SIZE | 5 | 最大并发RFC连接数 |
连接到真实的SAP系统
1.安装SAP NWRFC SDK
从以下网址下载SAP NW RFC SDK 7.50 SAP支持门户 适用于您的平台(例如,适用于Apple Silicon的ARM64)。
# macOS example
sudo mkdir -p /usr/local/sap/nwrfcsdk
sudo tar xzf nwrfc750-macos-arm64.tar.gz -C /usr/local/sap/nwrfcsdk
export SAPNWRFC_HOME=/usr/local/sap/nwrfcsdk
export DYLD_LIBRARY_PATH=/usr/local/sap/nwrfcsdk/lib2.安装PyRFC
PyRFC未在中列出 pyproject.toml 依赖关系(包在PyPI上被拖拽)。在NWRFC SDK就绪后单独安装:
pip install pyrfc验证:
python -c "from pyrfc import Connection; print('PyRFC OK')"3.使用真实凭证运行
SAP_MOCK_MODE=false \
SAP_ASHOST=sap-server.company.com \
SAP_SYSNR=00 \
SAP_CLIENT=100 \
SAP_USER=RFC_USER \
SAP_PASSWD=secret \
uv run sap-mcp建筑
src/sap_mcp/
├── server.py # FastMCP entry point, registers tool modules
├── config.py # Pydantic Settings (SAP_ env prefix)
├── connection/
│ ├── manager.py # Thread-safe connection pool (acquire/release)
│ └── mock.py # Mock connection with realistic SAP responses
├── bapi/
│ ├── return_handler.py # BAPI RETURN parsing (E/A → error, W/S/I)
│ └── transaction.py # COMMIT/ROLLBACK on same connection
└── tools/
├── generic_rfc.py # describe_rfc, call_rfc, read_table
├── master_data.py # Materials, customers, vendors
├── sales.py # Sales orders (read + create + change)
├── purchasing.py # Purchase orders (read + create)
└── invoices.py # Invoice queries关键设计决策
- 刀具注册模式:每个工具模块导出
register(mcp)避免循环进口。工具使用@mcp.tool()里面register(). - 线程安全连接池:FastMCP在线程池中运行同步工具--
ConnectionManager用途threading.Lock+deque以安全地共享连接。acquire()是一个上下文管理器,成功时返回到池的连接,出错时丢弃该连接。 - 在同一连接上进行COMMIT/ROLLBACK:写入操作使用
execute_bapi_with_commit()它调用BAPI,解析RETURN,并提交或回滚同一连接——这是SAP事务模型所要求的。 - 数字填充:SAP要求零填充数字(材料:18个字符,客户/供应商:10个字符)。所有工具垫自动。
示例用例:库存检查和自动重新订购
AI代理可以组合工具来实现业务逻辑。例如,检查库存水平并在库存低时创建采购订单:
read_table("MARD")--从存储位置表读取库存- 代理逻辑 --无限制库存\<阈值的过滤材料
get_material()--查找每个低库存商品的详细信息search_vendors()--寻找合适的供应商create_purchase_order()--为再订购创建并提交采购订单
该流量在 tests/test_stock_reorder_flow.py.
许可证
麻省理工学院
