
很多人第一次听到“大模型连接 SAP”时最容易想到的是在聊天窗口里问一个 SAP 问题让 AI 帮忙回答。但真正把 SAP 接入 MCP 以后我发现它的价值不只是“回答问题”。没有连接企业系统之前大模型主要依靠公开资料和训练数据进行推测。它可以解释标准事务码、ABAP 语法和常见配置却不知道企业自己的 Z 程序、配置、业务数据和历史问题。接入 MCP 后大模型可以在权限允许的范围内调用工具很多人第一次听到“大模型连接 SAP”时最容易想到的是在聊天窗口里问一个 SAP 问题让 AI 帮忙回答。但真正把 SAP 接入 MCP 以后我发现它的价值不只是“回答问题”。没有连接企业系统之前大模型主要依靠公开资料和训练数据进行推测。它可以解释标准事务码、ABAP 语法和常见配置却不知道企业自己的 Z 程序、配置、业务数据和历史问题。接入 MCP 后大模型可以在权限允许的范围内调用工具由工具进一步访问 SAP 的 ADT、RFC 或其他接口获取当前系统里的真实信息。它开始从一个“懂一些 SAP 知识的聊天机器人”逐渐变成一个能够协助取证、分析、开发、测试和知识沉淀的 SAP 技术助手。本文结合我在 TEAM_CHAT 项目中的实践介绍一下大模型、MCP、ADT 和 RFC 之间的关系SAP MCP 实际怎样实现以及接上之后可以做哪些事情。实战视频AI 完成 WMS 到 SAP 批次接口交付视频展示了从现有接口检索、方案判断到接口开发、QA 验证和接口封装文档生成的完整过程点击观看完整演示一、没有连接 SAP 时大模型能做什么即使不连接企业 SAP 系统通用大模型也能回答很多标准问题例如 VA01、VA02、VA03 的作用ABAP 内表的定义方式以及 FOR ALL ENTRIES 的注意事项。但是如果问题变成为什么我们公司的 ZSDR001 查不到这个订单ZMMFM003 为什么返回“库存地点不存在”这个字段究竟从标准表还是自建表取值开发系统已经修复为什么生产系统还有问题大模型就很难准确回答了。因为它不知道企业程序的真实源码不知道系统做过哪些增强也看不到当前配置、业务数据和程序版本。这就是通用大模型和企业 SAP 实际问题之间的距离。二、MCP 是什么MCP 的全称是 Model Context Protocol可以理解为大模型与外部工具之间的一套标准连接协议。MCP 服务可以向大模型声明我有哪些工具、每个工具能做什么、调用时需要哪些参数以及会返回什么结果。例如一个 SAP MCP Server 可以提供GetProgram GetFunctionModule GetTableStructure ReadTableData RunOpenSqlQuery CheckAbapSyntax CallFunctionModule GetTransportObjects当模型需要查看某个程序时可以生成一次结构化工具调用{name:GetProgram,arguments:{program_name:ZSDR001}}MCP Server 收到请求后再负责连接 SAP、获取源码并返回结果。因此MCP 不是 SAP 本身的业务接口而是大模型调用企业工具的统一入口。三、MCP、ADT 和 RFC 是什么关系这是实施时最容易混淆的地方MCP 负责让大模型调用工具ADT 和 RFC 负责让工具访问 SAP。它们并不是互相替代的关系而是处于不同层次。业务用户 ↓ 自然语言 TEAM_CHAT ↓ 大模型 Agent ↓ MCP 工具调用 SAP MCP Server ├── ADT Adapter ├── RFC Adapter ├── 企业知识库 └── 权限与审计模块 ↓ SAP 系统例如用户提出“帮我查看 ZSDR001 的源码”模型调用 GetProgram。MCP Server 内部再通过 SAP ADT 访问类似下面的地址GET /sap/bc/adt/programs/programs/ZSDR001/source/main完整流程是大模型调用 MCP ↓ MCP 工具调用 ADT ↓ ADT 从 SAP 获取源码 ↓ MCP 整理结果 ↓ 大模型分析源码如果要执行已经存在的远程函数则可以由 MCP Server 通过 RFC 调用经过授权的 BAPI 或自建远程函数。四、为什么多数能力使用 ADT在 TEAM_CHAT 当前的实现中很多开发和分析能力主要依赖 SAP ADT。ADT 原本是 Eclipse 中 ABAP Development Tools 使用的接口可以访问 SAP 开发对象、数据字典、语法检查、激活服务和部分数据预览能力。它适合封装获取 ABAP 程序和 Include获取函数模块定义获取表和结构搜索开发对象检查 ABAP 语法激活程序和检查状态获取传输请求信息执行受限制的只读数据查询。相比模拟 SAP GUIADT 更容易转换为结构化工具。大模型不需要学习怎样点击 SE38、SE80 或 SE37只需要调用 GetProgram、GetFunctionModule 或 GetTableStructure。五、怎样把 ADT 封装成 MCP 工具下面是一个简化后的 Python 示例frommcp.server.fastmcpimportFastMCP mcpFastMCP(sap_adt)mcp.tool(nameGetProgram)defget_program(program_name:str)-str:读取指定 ABAP 程序的当前源码。ifnotprogram_name:raiseValueError(program_name is required)returnget_program_source(program_name)get_program_source 内部再负责调用 SAP ADTdefget_program_source(program_name:str)-str:url(f{sap_base_url}f/sap/bc/adt/programs/programs/f{program_name}/source/main)responsemake_adt_request(urlurl,methodGET)returnresponse.text真实项目中这一层还要处理 SAP 登录凭据、环境切换、HTTP Session、CSRF Token、对象锁、超时重试、字符编码、权限校验和操作日志。这些复杂性被封装在 MCP Server 内部。对模型来说它只需要知道什么时候调用 GetProgram对企业来说可以在 MCP Server 中统一控制模型能够访问哪些环境和对象。六、如何通过 MCP 查询 SAP 数据除了读取源码还可以把 SAP 表查询封装成工具mcp.tool(nameReadTableData)defread_table_data(table_name:str,fields:list[str]|NoneNone,where:str|NoneNone,max_rows:int100)-str:查询经过授权的 SAP 透明表。validate_table_name(table_name)validate_fields(fields)validate_where_condition(where)validate_row_limit(max_rows)returnadt_client.read_table(table_nametable_name,fieldsfields,wherewhere,max_rowsmax_rows)大模型可以生成{name:ReadTableData,arguments:{table_name:VBAK,fields:[VBELN,AUART,VKORG],where:VBELN 1234567890,max_rows:1}}这一层不能只是把模型生成的 SQL 直接转发给 SAP还必须限制只允许 SELECT、限制返回行数、控制可访问表、对敏感字段脱敏并记录用户和查询条件。所以MCP 不只是协议转换器也应该是 AI 访问 SAP 的安全网关。七、如何通过 MCP 远程调用 SAP 函数ADT 更适合开发对象和技术分析。如果要调用 BAPI、RFC 函数或企业已有的远程函数模块可以使用 RFC Adapter。大模型 ↓ MCPCallFunctionModule ↓ RFC Adapter ↓ PyRFC / SAP NWRFC SDK ↓ SAP Function Module简化后的实现如下mcp.tool(nameCallFunctionModule)defcall_function_module(function_name:str,parameters:dict)-dict:调用经过授权的远程函数模块。assert_function_allowed(function_name)returnrfc_client.call(function_name,**parameters)例如调用一个只读函数获取订单信息{name:CallFunctionModule,arguments:{function_name:Z_GET_SALES_ORDER_INFO,parameters:{IV_VBELN:1234567890}}}ADT 更偏向开发对象、元数据和技术分析RFC 更适合调用已经定义好的业务能力。但 RFC 函数可能修改业务数据因此正式环境不能允许模型任意输入函数名必须设置函数白名单并区分只读函数、可写函数、允许使用的环境以及是否需要人工确认。八、一次实际的问题分析是怎样完成的假设用户提出销售订单 1234567890 在 ZSDR001 中查不到但是 VA03 可以看到帮我分析原因。如果没有连接 SAP大模型只能列出权限、销售组织、订单类型和自定义过滤逻辑等可能原因。接入 MCP 后可以按照证据链进行分析。第一步读取程序源码模型调用 GetProgramMCP 通过 ADT 获取当前系统中的真实源码。假设发现下面的查询SELECT vbeln auart vkorg FROM vbak INTO TABLE gt_vbak WHERE vbeln IN s_vbeln AND vkorg IN s_vkorg AND auart ZOR.模型由此发现程序固定限制了订单类型 ZOR。第二步读取异常订单数据模型继续调用 ReadTableData查询 VBAK 中这张订单的订单类型和销售组织。假设 SAP 返回{VBELN:1234567890,AUART:ZRE,VKORG:1000}第三步形成有证据的结论模型可以得出订单能够在 VA03 中显示说明订单本身存在。ZSDR001 固定限制 AUART ZOR但该订单实际类型为 ZRE因此被程序过滤。当前证据不支持“订单不存在”或“用户权限不足”的判断。这时结论的依据是当前系统源码 当前业务数据 可以验证的问题结论这和普通大模型根据经验列出可能原因有本质区别。九、接上 MCP 后具体可以做什么1. 分析企业自己的 ABAP 代码可以读取 Z 报表、Include、函数模块、类、接口、增强、CDS View 和数据字典对象分析查询条件、内表读取、函数调用、权限检查、异常处理和数据流向。2. 辅助排查 SAP 业务问题可以围绕业务单据逐步查询状态、配置、自建表、程序和日志对比正常与异常数据形成可验证的证据链。3. 检查 ABAP 代码可以结合真实源码检查数据库访问、内表性能、异常处理、权限控制、硬编码、版本兼容性和企业开发规范。进一步封装 ADT Check Run、SLIN 或 ATC 后还能结合 SAP 自身的检查结果。4. 辅助完成部分开发工作在严格门禁下可以形成这样的过程分析需求 ↓ 读取现有源码 ↓ 设计修改方案 ↓ 用户确认 ↓ UpdateProgram ↓ CheckAbapSyntax ↓ ActivateAbapObject ↓ 读回并验证MCP 可以提高开发效率但不能取消需求确认、代码审查和变更管理。5. 分析传输请求和系统差异可以查询 TR 包含的对象、对象激活状态以及开发、测试和生产之间的版本差异避免把版本不同误判成业务数据问题。6. 自动整理接口和技术文档通过读取函数、结构和数据元素可以生成接口封装文档、字段映射表、功能说明书、技术设计文档和测试数据模板。7. 沉淀企业知识问题处理完成后可以把现象、证据、根因、解决方案和验证结果保存为结构化案例。下一次出现类似问题时模型先检索历史经验再结合当前 SAP 数据验证。十、为什么不应该让大模型直接调用 ADT如果 Agent 同时拥有终端和 Python 环境从技术上也可以直接运行底层 ADT 客户端fromabap_program_adtimportget_program_source sourceget_program_source(ZSDR001)内部研发阶段可以把这种方式保留为故障排查手段。但它不适合作为正式产品架构因为很难统一控制访问人、目标环境、SAP 账号、敏感数据以及修改前的确认过程。商业化产品更合理的架构应该是大模型只能调用 MCP ↓ MCP 统一鉴权、授权、审计和确认 ↓ MCP 根据工具类型选择 ADT、RFC 或其他通道 ↓ SAPSAP 登录信息也不应直接交给大模型而应保存在 MCP Server 中。大模型获得的是经过限制的工具使用权而不是 SAP 账号本身。十一、正式实施需要哪些安全控制环境隔离DEV允许读取、开发和激活 QA允许读取和受控测试 PRD原则上只读不能只依靠提示词告诉模型“不要修改生产”限制必须在 MCP Server 中真正执行。用户身份传递TEAM_CHAT 需要把用户身份传递给 Agent 和 MCP才能知道谁查询了数据、谁要求修改程序、谁确认了传输以及最终使用哪个 SAP 身份执行。工具分级只读工具包括 GetProgram、GetTableStructure 和 ReadTableData开发工具包括 UpdateProgram、CheckAbapSyntax 和 ActivateAbapObject高风险工具包括 CallFunctionModule、ReleaseTransport 和 ImportTransport。不同等级应该使用不同的授权和确认策略。操作审计一次调用至少应该记录用户、环境、工具名称、参数摘要、执行结果和时间。涉及源码和业务数据时还要防止敏感内容被完整写入普通日志。人工确认查询类操作可以自动执行但修改程序、激活对象、释放或导入传输请求以及调用可能修改数据的 RFC都应该暂停并请求用户确认。十二、真正有价值的不是“自动化一切”给 SAP 接上 MCP 后我最大的感受是真正有价值的不是让 AI 自动操作所有事务码也不是完全替代 SAP 顾问和开发人员。更现实的价值是更快找到系统证据减少重复查询和资料整理降低理解自建代码的成本把问题分析过程标准化让历史经验能够持续复用在执行动作前增加检查和确认缩短业务、顾问和开发之间的沟通链路。普通大模型擅长语言理解、代码分析、归纳和推理SAP 保存着企业真实的代码、配置和业务数据。MCP 所做的事情就是在安全边界内把两者连接起来大模型负责理解和推理 MCP 负责工具调用和能力控制 ADT 负责开发对象和技术能力 RFC 负责受控的业务函数调用 SAP 提供真实系统证据当大模型能够读取企业自己的系统证据同时理解企业积累的知识时它才有机会从“回答 SAP 问题”走向“协助解决 SAP 问题”。结语目前我也在围绕 TEAM_CHAT 持续探索 SAP 与 MCP 的结合方式。现阶段的重点不是追求完全自动化而是先把连接稳定性、工具定义、权限边界、操作审计、环境隔离和知识沉淀做好。未来的 SAP 技术支持也许不再需要一个人在事务码、代码窗口、数据库查询工具和文档系统之间不断切换。用户描述问题后大模型可以通过 MCP 调用经过授权的工具由工具通过 ADT 或 RFC 获取真实信息协助收集证据、分析原因、生成方案、检查代码、整理文档和沉淀知识。在必要的环节中再由人进行判断、确认和审批。这可能才是 SAP 接入 MCP 真正值得探索的地方。如果你也在研究 SAP、ABAP、企业大模型或 MCP欢迎一起交流。说明SAP、SAP S/4HANA、ABAP 等名称是其权利人的商标。本文仅用于技术研究和经验交流不代表与 SAP 存在官方合作、认证或背书关系。由工具进一步访问 SAP 的 ADT、RFC 或其他接口获取当前系统里的真实信息。它开始从一个“懂一些 SAP 知识的聊天机器人”逐渐变成一个能够协助取证、分析、开发、测试和知识沉淀的 SAP 技术助手。本文结合我在 TEAM_CHAT 项目中的实践介绍一下大模型、MCP、ADT 和 RFC 之间的关系SAP MCP 实际怎样实现以及接上之后可以做哪些事情。一、没有连接 SAP 时大模型能做什么即使不连接企业 SAP 系统通用大模型也能回答很多标准问题例如 VA01、VA02、VA03 的作用ABAP 内表的定义方式以及 FOR ALL ENTRIES 的注意事项。但是如果问题变成为什么我们公司的 ZSDR001 查不到这个订单ZMMFM003 为什么返回“库存地点不存在”这个字段究竟从标准表还是自建表取值开发系统已经修复为什么生产系统还有问题大模型就很难准确回答了。因为它不知道企业程序的真实源码不知道系统做过哪些增强也看不到当前配置、业务数据和程序版本。这就是通用大模型和企业 SAP 实际问题之间的距离。二、MCP 是什么MCP 的全称是 Model Context Protocol可以理解为大模型与外部工具之间的一套标准连接协议。MCP 服务可以向大模型声明我有哪些工具、每个工具能做什么、调用时需要哪些参数以及会返回什么结果。例如一个 SAP MCP Server 可以提供GetProgram GetFunctionModule GetTableStructure ReadTableData RunOpenSqlQuery CheckAbapSyntax CallFunctionModule GetTransportObjects当模型需要查看某个程序时可以生成一次结构化工具调用{name:GetProgram,arguments:{program_name:ZSDR001}}MCP Server 收到请求后再负责连接 SAP、获取源码并返回结果。因此MCP 不是 SAP 本身的业务接口而是大模型调用企业工具的统一入口。三、MCP、ADT 和 RFC 是什么关系这是实施时最容易混淆的地方MCP 负责让大模型调用工具ADT 和 RFC 负责让工具访问 SAP。它们并不是互相替代的关系而是处于不同层次。业务用户 ↓ 自然语言 TEAM_CHAT ↓ 大模型 Agent ↓ MCP 工具调用 SAP MCP Server ├── ADT Adapter ├── RFC Adapter ├── 企业知识库 └── 权限与审计模块 ↓ SAP 系统例如用户提出“帮我查看 ZSDR001 的源码”模型调用 GetProgram。MCP Server 内部再通过 SAP ADT 访问类似下面的地址GET /sap/bc/adt/programs/programs/ZSDR001/source/main完整流程是大模型调用 MCP ↓ MCP 工具调用 ADT ↓ ADT 从 SAP 获取源码 ↓ MCP 整理结果 ↓ 大模型分析源码如果要执行已经存在的远程函数则可以由 MCP Server 通过 RFC 调用经过授权的 BAPI 或自建远程函数。四、为什么多数能力使用 ADT在 TEAM_CHAT 当前的实现中很多开发和分析能力主要依赖 SAP ADT。ADT 原本是 Eclipse 中 ABAP Development Tools 使用的接口可以访问 SAP 开发对象、数据字典、语法检查、激活服务和部分数据预览能力。它适合封装获取 ABAP 程序和 Include获取函数模块定义获取表和结构搜索开发对象检查 ABAP 语法激活程序和检查状态获取传输请求信息执行受限制的只读数据查询。相比模拟 SAP GUIADT 更容易转换为结构化工具。大模型不需要学习怎样点击 SE38、SE80 或 SE37只需要调用 GetProgram、GetFunctionModule 或 GetTableStructure。五、怎样把 ADT 封装成 MCP 工具下面是一个简化后的 Python 示例frommcp.server.fastmcpimportFastMCP mcpFastMCP(sap_adt)mcp.tool(nameGetProgram)defget_program(program_name:str)-str:读取指定 ABAP 程序的当前源码。ifnotprogram_name:raiseValueError(program_name is required)returnget_program_source(program_name)get_program_source 内部再负责调用 SAP ADTdefget_program_source(program_name:str)-str:url(f{sap_base_url}f/sap/bc/adt/programs/programs/f{program_name}/source/main)responsemake_adt_request(urlurl,methodGET)returnresponse.text真实项目中这一层还要处理 SAP 登录凭据、环境切换、HTTP Session、CSRF Token、对象锁、超时重试、字符编码、权限校验和操作日志。这些复杂性被封装在 MCP Server 内部。对模型来说它只需要知道什么时候调用 GetProgram对企业来说可以在 MCP Server 中统一控制模型能够访问哪些环境和对象。六、如何通过 MCP 查询 SAP 数据除了读取源码还可以把 SAP 表查询封装成工具mcp.tool(nameReadTableData)defread_table_data(table_name:str,fields:list[str]|NoneNone,where:str|NoneNone,max_rows:int100)-str:查询经过授权的 SAP 透明表。validate_table_name(table_name)validate_fields(fields)validate_where_condition(where)validate_row_limit(max_rows)returnadt_client.read_table(table_nametable_name,fieldsfields,wherewhere,max_rowsmax_rows)大模型可以生成{name:ReadTableData,arguments:{table_name:VBAK,fields:[VBELN,AUART,VKORG],where:VBELN 1234567890,max_rows:1}}这一层不能只是把模型生成的 SQL 直接转发给 SAP还必须限制只允许 SELECT、限制返回行数、控制可访问表、对敏感字段脱敏并记录用户和查询条件。所以MCP 不只是协议转换器也应该是 AI 访问 SAP 的安全网关。七、如何通过 MCP 远程调用 SAP 函数ADT 更适合开发对象和技术分析。如果要调用 BAPI、RFC 函数或企业已有的远程函数模块可以使用 RFC Adapter。大模型 ↓ MCPCallFunctionModule ↓ RFC Adapter ↓ PyRFC / SAP NWRFC SDK ↓ SAP Function Module简化后的实现如下mcp.tool(nameCallFunctionModule)defcall_function_module(function_name:str,parameters:dict)-dict:调用经过授权的远程函数模块。assert_function_allowed(function_name)returnrfc_client.call(function_name,**parameters)例如调用一个只读函数获取订单信息{name:CallFunctionModule,arguments:{function_name:Z_GET_SALES_ORDER_INFO,parameters:{IV_VBELN:1234567890}}}ADT 更偏向开发对象、元数据和技术分析RFC 更适合调用已经定义好的业务能力。但 RFC 函数可能修改业务数据因此正式环境不能允许模型任意输入函数名必须设置函数白名单并区分只读函数、可写函数、允许使用的环境以及是否需要人工确认。八、一次实际的问题分析是怎样完成的假设用户提出销售订单 1234567890 在 ZSDR001 中查不到但是 VA03 可以看到帮我分析原因。如果没有连接 SAP大模型只能列出权限、销售组织、订单类型和自定义过滤逻辑等可能原因。接入 MCP 后可以按照证据链进行分析。第一步读取程序源码模型调用 GetProgramMCP 通过 ADT 获取当前系统中的真实源码。假设发现下面的查询SELECT vbeln auart vkorg FROM vbak INTO TABLE gt_vbak WHERE vbeln IN s_vbeln AND vkorg IN s_vkorg AND auart ZOR.模型由此发现程序固定限制了订单类型 ZOR。第二步读取异常订单数据模型继续调用 ReadTableData查询 VBAK 中这张订单的订单类型和销售组织。假设 SAP 返回{VBELN:1234567890,AUART:ZRE,VKORG:1000}第三步形成有证据的结论模型可以得出订单能够在 VA03 中显示说明订单本身存在。ZSDR001 固定限制 AUART ZOR但该订单实际类型为 ZRE因此被程序过滤。当前证据不支持“订单不存在”或“用户权限不足”的判断。这时结论的依据是当前系统源码 当前业务数据 可以验证的问题结论这和普通大模型根据经验列出可能原因有本质区别。九、接上 MCP 后具体可以做什么1. 分析企业自己的 ABAP 代码可以读取 Z 报表、Include、函数模块、类、接口、增强、CDS View 和数据字典对象分析查询条件、内表读取、函数调用、权限检查、异常处理和数据流向。2. 辅助排查 SAP 业务问题可以围绕业务单据逐步查询状态、配置、自建表、程序和日志对比正常与异常数据形成可验证的证据链。3. 检查 ABAP 代码可以结合真实源码检查数据库访问、内表性能、异常处理、权限控制、硬编码、版本兼容性和企业开发规范。进一步封装 ADT Check Run、SLIN 或 ATC 后还能结合 SAP 自身的检查结果。4. 辅助完成部分开发工作在严格门禁下可以形成这样的过程分析需求 ↓ 读取现有源码 ↓ 设计修改方案 ↓ 用户确认 ↓ UpdateProgram ↓ CheckAbapSyntax ↓ ActivateAbapObject ↓ 读回并验证MCP 可以提高开发效率但不能取消需求确认、代码审查和变更管理。5. 分析传输请求和系统差异可以查询 TR 包含的对象、对象激活状态以及开发、测试和生产之间的版本差异避免把版本不同误判成业务数据问题。6. 自动整理接口和技术文档通过读取函数、结构和数据元素可以生成接口封装文档、字段映射表、功能说明书、技术设计文档和测试数据模板。7. 沉淀企业知识问题处理完成后可以把现象、证据、根因、解决方案和验证结果保存为结构化案例。下一次出现类似问题时模型先检索历史经验再结合当前 SAP 数据验证。十、为什么不应该让大模型直接调用 ADT如果 Agent 同时拥有终端和 Python 环境从技术上也可以直接运行底层 ADT 客户端fromabap_program_adtimportget_program_source sourceget_program_source(ZSDR001)内部研发阶段可以把这种方式保留为故障排查手段。但它不适合作为正式产品架构因为很难统一控制访问人、目标环境、SAP 账号、敏感数据以及修改前的确认过程。商业化产品更合理的架构应该是大模型只能调用 MCP ↓ MCP 统一鉴权、授权、审计和确认 ↓ MCP 根据工具类型选择 ADT、RFC 或其他通道 ↓ SAPSAP 登录信息也不应直接交给大模型而应保存在 MCP Server 中。大模型获得的是经过限制的工具使用权而不是 SAP 账号本身。十一、正式实施需要哪些安全控制环境隔离DEV允许读取、开发和激活 QA允许读取和受控测试 PRD原则上只读不能只依靠提示词告诉模型“不要修改生产”限制必须在 MCP Server 中真正执行。用户身份传递TEAM_CHAT 需要把用户身份传递给 Agent 和 MCP才能知道谁查询了数据、谁要求修改程序、谁确认了传输以及最终使用哪个 SAP 身份执行。工具分级只读工具包括 GetProgram、GetTableStructure 和 ReadTableData开发工具包括 UpdateProgram、CheckAbapSyntax 和 ActivateAbapObject高风险工具包括 CallFunctionModule、ReleaseTransport 和 ImportTransport。不同等级应该使用不同的授权和确认策略。操作审计一次调用至少应该记录用户、环境、工具名称、参数摘要、执行结果和时间。涉及源码和业务数据时还要防止敏感内容被完整写入普通日志。人工确认查询类操作可以自动执行但修改程序、激活对象、释放或导入传输请求以及调用可能修改数据的 RFC都应该暂停并请求用户确认。十二、真正有价值的不是“自动化一切”给 SAP 接上 MCP 后我最大的感受是真正有价值的不是让 AI 自动操作所有事务码也不是完全替代 SAP 顾问和开发人员。更现实的价值是更快找到系统证据减少重复查询和资料整理降低理解自建代码的成本把问题分析过程标准化让历史经验能够持续复用在执行动作前增加检查和确认缩短业务、顾问和开发之间的沟通链路。普通大模型擅长语言理解、代码分析、归纳和推理SAP 保存着企业真实的代码、配置和业务数据。MCP 所做的事情就是在安全边界内把两者连接起来大模型负责理解和推理 MCP 负责工具调用和能力控制 ADT 负责开发对象和技术能力 RFC 负责受控的业务函数调用 SAP 提供真实系统证据当大模型能够读取企业自己的系统证据同时理解企业积累的知识时它才有机会从“回答 SAP 问题”走向“协助解决 SAP 问题”。结语目前我也在围绕 TEAM_CHAT 持续探索 SAP 与 MCP 的结合方式。现阶段的重点不是追求完全自动化而是先把连接稳定性、工具定义、权限边界、操作审计、环境隔离和知识沉淀做好。未来的 SAP 技术支持也许不再需要一个人在事务码、代码窗口、数据库查询工具和文档系统之间不断切换。用户描述问题后大模型可以通过 MCP 调用经过授权的工具由工具通过 ADT 或 RFC 获取真实信息协助收集证据、分析原因、生成方案、检查代码、整理文档和沉淀知识。在必要的环节中再由人进行判断、确认和审批。这可能才是 SAP 接入 MCP 真正值得探索的地方。如果你也在研究 SAP、ABAP、企业大模型或 MCP欢迎一起交流。说明SAP、SAP S/4HANA、ABAP 等名称是其权利人的商标。本文仅用于技术研究和经验交流不代表与 SAP 存在官方合作、认证或背书关系。