1. 项目概述当AI助手遇见SAP ABAP开发如果你是一位SAP ABAP开发者那么对SE80、SE38这些事务代码的界面一定不会陌生。日复一日地在这些略显陈旧的工具里穿梭复制粘贴、激活、检查语法、释放传输请求构成了我们工作的日常。这套流程虽然稳定但效率的提升似乎已经触到了天花板。我们总在想有没有一种方式能让开发变得更“智能”一点比如我能不能直接告诉我的AI助手“帮我创建一个处理销售订单的RAP业务对象包含校验逻辑和单元测试并把它放到传输请求DEVK900123里”然后它就能理解我的意图直接连接到SAP系统把这一切都搞定。这听起来像是科幻小说里的场景但今天我要介绍的S.A.M.U.R.A.I.项目正在将这种想象变为现实。S.A.M.U.R.A.I.全称SAP ADT MCP Unified Remote ABAP Interface是一个开源的MCP服务器。它的核心使命就是为你钟爱的AI编程助手——无论是Antigravity、Cursor、Kiro还是Claude Desktop——装上一把能够直接“触碰”SAP系统的“武士刀”。通过标准的ADT REST API你的AI助手从此不再是一个只能对着本地文件夸夸其谈的旁观者而是一个能真正深入SAP腹地执行搜索、读取、编写、激活、测试等全生命周期操作的“副驾驶”。这个项目解决的核心痛点是传统ABAP开发与现代AI辅助编程之间的“最后一公里”断联。我们有了强大的AI也有了成熟的SAP开发体系但两者之间缺乏一个安全、标准、高效的桥梁。S.A.M.U.R.A.I.正是这座桥梁。它不绑定任何特定的SAP版本支持S/4HANA, ECC, BW等也不锁定任何AI客户端兼容所有支持MCP协议的工具用30个精心设计的工具、2个实用的提示模板覆盖了从代码搜索、阅读、编写到激活、测试、传输管理的完整闭环。无论你是想快速查找一个古老的函数模块还是想搭建一套全新的RAP应用现在都可以用自然语言向你的AI伙伴下达指令看着它像一位经验丰富的ABAP顾问一样精准地完成任务。2. 核心架构与设计哲学为什么是MCP和ADT在深入实操之前理解S.A.M.U.R.A.I.为何选择MCP和ADT作为技术基石至关重要。这决定了项目的通用性、安全性和未来的扩展潜力。2.1 MCPAI与工具对话的“世界语”MCP即模型上下文协议是由Anthropic提出的一种开放协议。你可以把它理解为AI模型与外部工具、数据源进行安全、结构化通信的“通用语言”或“插件标准”。在MCP出现之前每个AI助手如Cursor、Windsurf想要集成新功能都需要客户端和工具提供方进行一对一的定制开发过程繁琐且生态封闭。MCP的核心价值在于标准化和解耦。它定义了一套清晰的规范服务端提供具体的工具能力如S.A.M.U.R.A.I.提供的30个ABAP操作工具。客户端各类AI助手它们只需实现MCP客户端协议就能自动识别和使用任何符合MCP标准的服务端工具。通信通过标准的stdio或SSE进行数据交换内容格式为JSON-RPC。这意味着S.A.M.U.R.A.I.只需要开发一次就能同时服务于Antigravity、Cursor、Kiro、Claude Desktop、Windsurf、Cline等所有主流AI编程助手。作为开发者你无需为每个助手寻找或开发特定的SAP插件作为工具开发者我们也无需维护多个客户端的适配版本。这种设计极大地提升了生态的繁荣度和工具的可复用性。2.2 ADT REST APISAP面向未来的开放之门ADT即ABAP开发工具最初是为Eclipse IDE设计的但它背后暴露的是一整套完整的RESTful API。这是SAP现代化战略中至关重要的一环标志着ABAP开发接口从传统的RFC/BAPI/GUI转向了更开放、更标准的Web服务。选择ADT API而非其他方式如直接调用RFC函数模块或使用SAP GUI脚本基于以下几个关键考量官方与稳定ADT API由SAP官方提供和维护是SAP推荐的与ABAP开发环境交互的标准方式保证了长期的兼容性和稳定性。功能全面它几乎覆盖了ABAP开发的所有操作——对象读取、写入、激活、语法检查、单元测试、ATC检查、传输管理甚至包括代码补全和Where-Used列表查询。基于HTTP这使得它能够轻松地跨网络、跨平台被调用完美契合Node.js服务端的开发模式。安全机制完善ADT API内置了CSRF令牌保护、锁管理机制为我们的写操作提供了基础的安全保障。注意启用ADT API是使用本项目的前提。通常在SAP NetWeaver 7.40及以上版本的系统上ICF节点/sap/bc/adt默认是激活的。如果无法连接需要联系系统管理员在事务代码SICF中检查并激活相关服务。2.3 S.A.M.U.R.A.I.的架构拆解项目的架构清晰且高效遵循了典型的“客户端-代理-服务端”模式[你的IDE AI助手 (MCP客户端)] │ │ MCP协议 (stdio, JSON-RPC) ▼ [S.A.M.U.R.A.I. 服务器 (Node.js)] │ │ HTTP/HTTPS (ADT REST API) ▼ [SAP系统]你的AI助手作为MCP客户端它接收你的自然语言指令并将其转换为对特定MCP工具的调用请求。S.A.M.U.R.A.I.服务器这是核心。它运行着一个Node.js进程监听来自MCP客户端的请求。当收到一个如search_objects的请求时它会使用配置的SAP凭证和CSRF令牌构造一个符合ADT API规范的HTTP请求。将请求发送至SAP系统的对应ADT端点如/sap/bc/adt/repository/informationsystem。接收SAP返回的XML或JSON格式的响应。将响应解析、格式化为AI助手易于理解的文本或结构化数据并通过MCP协议返回。SAP系统执行实际的ABAP操作并返回结果。这种架构的优势在于所有与SAP系统的直接通信、复杂的XML解析、错误处理都封装在了S.A.M.U.R.A.I.服务器中。你的AI助手和本地环境完全不需要安装SAP客户端或任何SAP依赖库只需要能运行Node.js即可。3. 从零开始环境准备与首次连接理论清晰后我们进入实战环节。我将以最常用的VS Code Antigravity组合为例带你完成从零到一的完整配置。其他客户端的配置逻辑大同小异核心都是修改对应的MCP配置文件。3.1 前置条件检查清单在开始之前请确保你已满足以下三个条件Node.js环境你的本地开发机需要安装Node.js 18或更高版本。你可以在终端输入node --version来验证。可访问的SAP开发系统你需要一个SAP系统的访问权限并且该系统已启用ADT服务。一个快速的验证方法是在浏览器中尝试访问http://你的SAP服务器:端口/sap/bc/adt/discovery。如果出现SAP登录页面或返回XML说明服务是存在的。有效的SAP用户凭证你需要一个拥有S_DEVELOP权限ABAP开发工作台的SAP用户账号。对于仅读操作显示权限可能足够但对于创建、写入和激活S_DEVELOP是必须的。3.2 获取与构建S.A.M.U.R.A.I.服务器首先我们需要将“武士刀”锻造出来。# 1. 克隆项目仓库到本地 git clone https://github.com/AlleyBo55/SAMURAI.git cd SAMURAI # 2. 安装项目依赖 npm install # 3. 构建TypeScript代码为可执行的JavaScript npm run build构建成功后你会在项目根目录下看到一个dist文件夹里面包含了编译后的index.js文件。这就是我们的MCP服务器主程序。实操心得在国内网络环境下npm install可能会因为网络问题较慢。可以尝试配置淘宝镜像npm config set registry https://registry.npmmirror.com。另外确保你的Node.js版本足够新否则可能在安装某些依赖时遇到兼容性问题。3.3 配置AI客户端以Antigravity为例接下来我们需要告诉Antigravity这把“武士刀”在哪里以及如何连接SAP。这里有两种方式推荐使用项目级配置因为它更具可移植性。方式一通过Antigravity UI配置可视化在VS Code中打开Antigravity的Agent/Chat面板。点击右上角的三个点菜单 (...)。选择MCP Servers-Manage MCP Servers。在弹出的界面中点击View raw config。这会打开Antigravity的全局MCP配置文件。在mcpServers对象中添加一个新的配置项。方式二项目级配置文件推荐便于团队共享在你的ABAP项目根目录下或者你希望启用SAP连接的任意工作区创建.vscode/mcp.json文件。Antigravity会自动探测并加载这个文件。将以下配置模板复制到mcp.json中并替换为你自己的SAP系统信息{ mcpServers: { sap-adt: { command: node, args: [/绝对路径/到/SAMURAI项目/dist/index.js], env: { SAP_HOST: http://your-sap-server.com:8000, SAP_CLIENT: 100, SAP_USERNAME: YOUR_USERNAME, SAP_PASSWORD: YOUR_PASSWORD, SAP_LANGUAGE: EN } } } }关键参数详解command: 指定运行服务器的命令这里是node。args: 传递给命令的参数即我们构建好的服务器脚本的绝对路径。请务必替换为你的dist/index.js的实际路径。env: 环境变量对象用于向服务器传递SAP连接参数。SAP_HOST: 你的SAP系统完整的基础URL。如果你使用HTTP端口通常是8000如果使用HTTPS端口可能是44300或44301取决于实例号。SAP_CLIENT: SAP客户端号例如100、200等。SAP_USERNAME/SAP_PASSWORD: 你的SAP登录凭证。SAP_LANGUAGE: 登录语言如EN、ZH等影响错误消息和对象描述。重要安全提示mcp.json文件包含了你的SAP密码明文绝对不要将此文件提交到Git等版本控制系统。一个最佳实践是1. 将mcp.json添加到.gitignore文件中。2. 在团队中共享一个mcp.example.json模板文件让每个成员复制并填写自己的凭证。3.4 验证连接第一次与SAP握手保存配置文件后你需要重启Antigravity或重启VS Code来加载新的MCP配置。重启后打开Antigravity聊天界面尝试输入一个简单的指令“测试一下SAP连接。”或者更直接地用英文“Test the SAP connection.”你的AI助手应该会调用S.A.M.U.R.A.I.提供的test_connection工具。如果一切配置正确你会看到类似以下的成功响应✅ SAP连接测试成功 主机http://your-sap-server.com:8000 客户端100 系统IDS4H 语言EN 当前用户YOUR_USERNAME如果连接失败助手会返回具体的错误信息例如“CSRF fetch failed: 401”通常代表用户名或密码错误“CSRF fetch failed: 403”代表用户权限不足。你需要根据错误信息检查你的配置和SAP账号权限。4. 核心工具实战解锁AI驱动的ABAP工作流连接成功后你的AI助手就真正获得了SAP系统的“眼睛”和“双手”。下面我们通过几个典型场景深入体验这30个工具如何改变你的开发日常。4.1 场景一智能搜索与代码导航在庞大的SAP系统中找到一个特定的对象或者理清一段代码的调用关系曾是费时费力的工作。现在你可以像对话一样完成。示例1模糊搜索对象你可以对AI助手说“搜索所有以ZCL_SD开头的自定义类。”AI助手会调用search_objects工具参数为query: ZCL_SD*。它会返回一个列表包含所有匹配的类名、描述及其所属包。这比在SE80里手动筛选快得多。示例2查看包内容“列出包ZMM_PURCHASING里所有的对象。”AI助手调用list_package_contents工具。你会得到这个包下所有程序、类、函数组、表的清晰清单快速了解一个功能模块的代码结构。示例3分析代码依赖Where-Used当你打算修改一个接口或一个方法时了解其影响范围至关重要。“查找接口ZIF_SD_PRICING_ENGINE的所有使用位置。”AI助手调用where_used工具。结果会列出所有引用了该接口的类、程序帮助你进行影响分析避免破坏性修改。4.2 场景二无缝的代码读写与冲突保护这是S.A.M.U.R.A.I.最强大的能力之一。AI不仅可以读取代码还能直接修改并内置了企业级开发所需的冲突检测机制。读取源代码“读取类ZCL_MM_PO_VALIDATOR的源代码。” “读取CDS视图ZI_SALESORDER的定义。” “读取表EKPO的结构定义。”对应的工具是read_object_source,read_cds_source,read_table_definition。AI会获取到完整的、格式化的源代码或结构信息为后续的分析或修改提供上下文。修改源代码以类为例假设AI助手在分析了ZCL_MM_PO_VALIDATOR的代码后你要求它“为这个类的VALIDATE方法添加一个输入参数校验”。AI会先调用read_object_source获取当前源代码。它在本地分析代码结构生成修改后的新源代码。在调用write_object_source工具进行写入时它会将第一步获取的原始源代码作为expectedSource参数传入。S.A.M.U.R.A.I.服务器在向SAP发送写入请求前会先检查服务器上该对象的当前源代码是否与expectedSource一致。如果一致说明期间没有其他人修改则执行写入并锁定/解锁对象。如果不一致则返回冲突错误并展示差异阻止覆盖他人的修改。这个过程完美模拟了资深开发者的协作习惯先更新、再修改、提交前合并冲突。AI助手在这里扮演了一个严格遵守流程的“结对编程”伙伴。4.3 场景三从零创建与脚手架创建新的开发对象不再需要手动点击SE80或ADT中的创建对话框。创建新类“在包ZFI_PAYMENTS下创建一个名为ZCL_FI_PAYMENT_HANDLER的新类描述为‘支付处理核心逻辑’分配到传输请求DEVK900456继承自CL_ABAP_BEHAVIOR_HANDLER实现接口IF_OO_ADT_CLASSRUN。”AI助手调用create_class工具传入所有参数。片刻之后一个包含了基本框架、正确继承关系和接口实现的新类就已在SAP系统中创建完毕并分配了传输请求。一键生成RAP业务对象这是项目提供的提示模板create-rap-bo的威力所在。“使用create-rap-bo模板为实体SalesOrder搭建一个带草稿功能的RAP业务对象命名空间用Z。”AI助手会调用这个模板你需要提供entityName: SalesOrder,namespace: Z,scenario: managed_with_draft。接下来你会看到AI助手开始一系列连贯的操作创建CDS接口视图ZI_SALESORDER。创建CDS消费视图ZC_SALESORDER。创建行为定义ZI_SALESORDER。创建行为实现类。创建服务定义和服务绑定。创建草稿表。 所有对象都会被正确命名、分配到指定的包和传输请求并建立正确的依赖关系。这相当于将数十分钟甚至数小时的手动点击和配置工作压缩成一次对话。4.4 场景四集成质量门禁与传输管理开发不仅仅是写代码还包括确保代码质量和管理变更。运行单元测试“运行类ZCL_SD_ORDER_PROCESSOR的单元测试。”AI助手调用run_unit_tests工具。它会执行该类下的所有ABAP Unit测试并返回详细的测试结果哪些通过了哪些失败了失败的原因是什么。你可以快速得到反馈而无需离开IDE切换到SAT事务码。执行ATC检查“对程序ZMM_STOCK_REPORT运行ATC检查。”AI助手调用run_atc_check工具。你可以指定一个检查变式或者使用默认的。结果会列出所有优先级为高或中的检查消息如性能警告、语法问题、安全风险等帮助你在代码激活前发现潜在缺陷。管理传输请求“列出用户DEVELOPER的所有未释放传输请求。” “释放传输请求DEVK900123。”通过list_transports和release_transport工具你可以查询和释放传输请求将开发完成的对象正式移交到下一个系统如测试系统。这为基于AI的持续集成/持续部署流水线提供了可能。5. 高级配置与安全实践将AI直接连接到生产系统是危险的。S.A.M.U.R.A.I.在设计上充分考虑了安全性但正确的配置和使用习惯同样重要。5.1 连接模式详解直接URL与Eclipse风格项目支持两种连接SAP系统的方式对应ADT的不同配置习惯。模式一直接URL推荐简单直观这是最常用的方式直接指定完整的SAP前端服务器地址。env: { SAP_HOST: http://sapdev.company.com:8000, ... }如果你的系统启用了HTTPS则可能是https://sapdev.company.com:44300。端口号8000, 44300, 44301等需要向系统管理员确认。模式二Eclipse风格兼容传统配置有些环境习惯使用应用服务器主机名和实例号来定义连接。env: { SAP_ASHOST: sapdev.company.com, SAP_SYSNR: 00, SAP_SSL: true, SAP_SID: S4H, ... }在这种模式下S.A.M.U.R.A.I.会根据SAP_SSL和SAP_SYSNR自动构建URLSAP_SSLtrue-https://ASHOST:443SYSNR(例如:44300)SAP_SSLfalse-http://ASHOST:80SYSNR(例如:8000) 这种方式与Eclipse ADT的连接配置完全一致便于从现有配置迁移。5.2 安全策略自动批准与操作确认MCP协议允许客户端定义哪些工具调用可以自动执行哪些需要用户手动确认。这是防止误操作的关键防线。以Kiro的配置为例autoApprove列表里只包含了所有只读工具autoApprove: [ test_connection, search_objects, read_object_source, // ... 其他所有read_*工具 list_transports ]这意味着当你让AI“搜索一个类”或“读取一段代码”时它会立即执行。但当你要求它“修改这个类”、“激活这个对象”或“释放传输”时Kiro会弹出一个确认对话框明确告诉你AI将要执行的操作及其参数你必须点击“批准”操作才会继续。强烈建议在任何客户端配置中都只将只读工具加入自动批准列表。对于write_*,create_*,activate_*,release_transport这些会修改系统的工具务必保留手动确认环节。这是保护你的SAP系统不被AI意外操作破坏的最后一道也是最重要的一道保险。5.3 权限最小化原则用于连接S.A.M.U.R.A.I.的SAP用户账号其权限应遵循最小化原则开发/测试系统可以授予完整的S_DEVELOP权限以便进行全流程开发。质量保证系统建议只授予显示权限或仅授予执行ATC检查和单元测试的权限用于CI/CD流水线中的质量检查。生产系统绝对不要将具有写权限的账号配置用于连接生产系统。如果确实需要从生产系统读取日志或配置数据以供分析应创建一个仅有显示权限的只读账号。5.4 处理自签名证书许多开发系统使用自签名的SSL证书。Node.js默认会拒绝这样的连接。为了在开发环境中使用你可以在环境变量中添加env: { NODE_TLS_REJECT_UNAUTHORIZED: 0, ... }重要警告NODE_TLS_REJECT_UNAUTHORIZED0会禁用SSL证书验证使连接容易受到中间人攻击。此设置仅可用于非生产环境的开发、测试系统绝不能用于任何包含敏感数据或连接生产系统的场景。6. 注入ABAP专家经验让AI成为你的资深顾问S.A.M.U.R.A.I.提供了连接的能力但要让AI写出高质量、符合规范的ABAP代码还需要注入“灵魂”。项目附带的“AI Steering Skills”文件就是这个灵魂。它是一个浓缩了数十年ABAP最佳实践的提示词工程文件能引导AI像一位资深架构师一样思考。6.1 技能文件的核心内容这个文件例如kiro-steering/skill-abap-senior.md涵盖了ABAP开发的方方面面命名规范强制要求自定义对象以Z或Y开头类用ZCL_接口用ZIF_CDS基础视图用ZI_消费视图用ZC_等。现代ABAP语法提倡使用内联声明DATA(...)、字符串模板|...|、构造函数表达式VALUE #( ... )、表表达式FILTER,REDUCE等7.40的新特性写出更简洁、高效的代码。性能守则禁止在循环内使用SELECT必须使用FOR ALL ENTRIES并检查非空避免SELECT *为频繁查询的字段创建二级索引等。错误处理要求使用基于类的异常CX_*并合理使用BAL业务应用程序日志进行日志记录。面向对象设计强调依赖注入、面向接口编程、工厂模式等。RAP开发规范明确VDM虚拟数据模型分层架构区分管理、非管理和草稿场景的实现差异规范副作用和特征控制的使用。安全与权限在涉及数据访问的操作前必须进行权限检查AUTHORITY-CHECK。单元测试标准推广GIVEN-WHEN-THEN结构使用CL_OSQL_TEST_ENVIRONMENT来隔离数据库操作。6.2 如何为你的AI客户端加载技能你需要根据自己使用的AI助手将这份技能文件加载为“系统提示”或“自定义指令”。Antigravity将antigravity-skills/senior-abap-developer文件夹复制到你的项目.agents/skills/目录下。Antigravity会自动识别并应用。Kiro将skill-abap-senior.md文件复制到项目.kiro/steering/目录。Kiro会自动加载它。Cursor在项目根目录创建.cursor/rules/abap-senior.mdc文件将技能文件的内容去掉YAML头粘贴进去。Cursor会将其作为项目级规则应用。Claude Desktop在Claude.ai中创建一个项目将技能文件作为知识库内容上传。这样在该项目内的所有对话都会具备ABAP专家背景。Windsurf/Cline在项目根目录创建.windsurfrules或.clinerules文件粘贴技能内容。加载成功后当你让AI助手“创建一个新的销售订单处理类”时它不仅会调用S.A.M.U.R.A.I.去执行创建还会在生成代码时自动遵循Clean ABAP原则、使用现代语法、添加必要的权限检查和异常处理甚至为你生成配套的单元测试方法框架。这极大地提升了AI生成代码的可用性和专业性减少了后续的人工审查和修改工作。7. 故障排除与实战心得即使准备充分在实际操作中也可能遇到问题。以下是我在长期使用中总结的常见问题与解决方案。7.1 连接与认证问题问题现象可能原因与排查步骤CSRF fetch failed: 401认证失败。1. 检查SAP_USERNAME和SAP_PASSWORD是否正确注意大小写。2. 确认SAP账号未被锁定。3. 尝试在浏览器中用相同账号密码登录SAP GUI或Fiori验证账号有效性。CSRF fetch failed: 403权限不足。用户缺少访问ADT服务的权限。1. 使用事务代码SU01检查该用户的权限参数文件确保包含S_DEVELOP权限对象。2. 联系系统管理员确认/sap/bc/adtICF服务节点已对该用户及用户组授权事务代码SICF。ECONNREFUSED或超时网络或服务不可达。1. 检查SAP_HOST中的主机名和端口号是否正确。2. 从你的本地机器尝试ping主机名或telnet端口确认网络连通性。3. 确认SAP应用服务器正在运行。4. 检查本地防火墙或公司代理设置是否阻止了连接。SSL证书错误自签名证书不被信任。对于开发系统可按前文所述添加NODE_TLS_REJECT_UNAUTHORIZED0环境变量。对于正式环境应导入SAP系统的CA证书到Node.js的信任库。7.2 功能操作问题问题现象可能原因与排查步骤搜索 (search_objects) 无结果1. 确认查询语法正确可以使用*通配符如ZCL_*。2. 确认要搜索的对象存在于当前登录的Client中。3. 在SICF中检查服务/sap/bc/adt/repository/informationsystem是否已激活。写入 (write_*) 失败无错误信息1.最常见原因缺少传输请求。在SAP中创建或修改可传输对象时必须分配一个传输请求。请使用事务代码SE09或SE10为你的用户创建一个新的传输请求或在创建对象时通过create_class等工具的transportNumber参数指定。2. 对象可能被其他用户锁定检查SM12。激活 (activate_objects) 失败1. 检查语法错误。可以先单独调用check_syntax工具查看具体错误。2. 检查依赖关系例如激活一个CDS视图前其依赖的数据库表或视图必须已激活。3. 确认用户有激活对象的权限。工具列表未在AI客户端中显示1. 确认MCP服务器配置已保存且AI客户端已重启。2. 检查args中的Node.js脚本路径是否为绝对路径且正确。3. 在终端手动运行node /path/to/dist/index.js看是否有错误输出。4. 查看AI客户端的日志或开发者控制台寻找MCP连接错误信息。7.3 性能与稳定性优化建议批量操作思维虽然AI可以处理多个步骤但频繁的单个工具调用会有网络往返开销。在让AI执行复杂任务时如搭建整个RAP BO它内部会进行多次调用这是正常的。对于超大型项目搜索范围过大可能超时可以尝试使用更精确的查询条件或分页虽然当前工具未直接支持分页但可以通过限定对象类型来缩小范围。连接池与超时目前的实现是每次工具调用建立新的HTTP连接。在高频使用场景下可以考虑在adt-client.ts中实现一个简单的连接池和Keep-Alive机制并合理设置HTTP请求超时时间默认的Node.js http/s 代理可能没有超时设置避免因SAP响应慢而导致AI客户端长时间等待。日志记录对于生产环境调试建议在服务器启动时开启调试日志记录详细的请求和响应信息注意不要记录包含敏感信息的请求体。这有助于快速定位是SAP端问题、网络问题还是工具逻辑问题。8. 扩展与定制打造属于你的AI开发利器S.A.M.U.R.A.I.是一个开源项目其架构设计使得扩展新的功能变得相对直接。如果你发现某个特定的ADT操作没有被覆盖完全可以自己动手添加。8.1 如何添加一个新的工具假设我们想添加一个工具用于获取一个类的所有方法签名。以下是核心步骤研究ADT API首先你需要知道SAP ADT是否提供了对应的API。通过查阅SAP官方文档或使用浏览器开发者工具监控Eclipse ADT的操作找到对应的REST端点。例如获取类结构信息的端点可能是/sap/bc/adt/oo/classes/{className}。在src/index.ts中定义新工具找到server.setup()函数内部模仿现有工具的定义方式。server.tool( list_class_methods, // 工具名称 列出指定ABAP类的所有公共方法及其签名, { className: z.string().describe(ABAP类的完整名称例如 ZCL_MY_CLASS), }, async ({ className }) { // 1. 构建ADT URI const classUri /sap/bc/adt/oo/classes/${className.toLowerCase()}; // 2. 调用ADT客户端获取类结构XML const response await adt.get(classUri, { headers: { Accept: application/vnd.sap.adt.oo.classes.v2xml } }); // 3. 使用xml-utils.ts中的辅助函数解析XML提取方法信息 const methods parseClassMethodsFromXml(response.data); // 4. 格式化返回给AI助手的结果 return { content: [{ type: text, text: 类 ${className} 包含以下方法\n${methods.map(m - ${m.name}: ${m.signature}).join(\n)} }], }; } );实现ADT客户端调用与XML解析在adt-client.ts中确保有对应的GET方法。在xml-utils.ts中新增一个parseClassMethodsFromXml函数用于从ADT返回的复杂XML中提取所需数据。更新文档在README.md的Tools Reference部分添加你的新工具说明。测试运行npm run build重新构建然后在你的AI客户端中测试这个新工具是否正常工作。8.2 集成到CI/CD流水线S.A.M.U.R.A.I.不仅可以与交互式AI助手协作也可以作为自动化脚本的一部分。你可以编写一个Node.js脚本直接调用构建好的dist/index.js并传递参数来实现自动化的代码质量检查、批量激活或部署后验证。例如一个简单的自动化ATC检查脚本可能如下// check-atc.js const { spawn } require(child_process); const serverPath ./dist/index.js; const atcCheck (objectUri) { // 这里需要模拟MCP客户端与服务器的stdio通信发送一个JSON-RPC请求。 // 更实际的做法可能是将工具逻辑封装成一个独立的函数库。 console.log(Would run ATC on ${objectUri}); };虽然目前项目更侧重于与AI客户端的交互但其底层的ADT客户端模块 (adt-client.ts) 完全可以被抽离出来作为一个独立的Node.js SDK用于构建各种SAP开发自动化工具。8.3 社区与贡献项目的活力来源于社区。如果你添加了一个好用的工具修复了一个bug或者改进了文档非常欢迎你提交Pull Request。在提交前请确保代码风格与现有项目保持一致。通过了npm run build。在你的SAP开发系统上进行了充分的测试。更新了相关的文档README。通过这种方式我们可以共同将S.A.M.U.R.A.I.打磨成ABAP开发者手中不可或缺的利器让AI赋能SAP开发的愿景惠及更多的开发者。