返回市场
mcp-abap-abap-adt-api

翻译后:

MCP-ABAP-ABAP-ADT-API

mcp-abap-abap-adt-api 翻译后: MCP-ABAP-ABAP-ADT-API

作者:mario-andreschak68 星标更新:2025-02-27

项目介绍

免责声明:此服务器仍处于试验阶段!使用时请谨慎!

ABAP-ADT-API MCP-Server

smithery 徽章

描述

MCP-Server mcp-abap-abap-adt-api 是一个设计用于促进 ABAP 系统与 MCP 客户端之间无缝通信的模型上下文协议(MCP)服务器。它是 abap-adt-api 的封装,并提供了一系列工具和资源,用于管理 ABAP 对象、处理传输请求、执行代码分析等,从而提高 ABAP 开发工作流程的效率和效果。

特性

  • 认证:使用 login 工具安全地与 ABAP 系统进行身份验证。
  • 对象管理:无缝创建、读取、更新和删除 ABAP 对象。
  • 传输处理:使用如 createTransporttransportInfo 等工具管理传输请求。
  • 代码分析:执行语法检查并获取代码补全建议。
  • 可扩展性:根据需要轻松扩展服务器以添加额外的工具和资源。
  • 会话管理:使用 dropSessionlogout 处理会话缓存和终止。

安装

通过 Smithery 安装

要通过 Smithery 自动安装 ABAP-ADT-API MCP-Server 到 Claude Desktop:

npx -y @smithery/cli install @mario-andreschak/mcp-abap-abap-adt-api --client claude

先决条件

  • Node.js:确保已安装 Node.js。可以从 这里 下载。
  • ABAP 系统访问:访问 ABAP 系统所需的凭证和 URL。

步骤

  1. 克隆仓库

    git clone https://github.com/mario-andreschak/mcp-abap-abap-adt-api.git
    cd mcp-abap-abap-adt-api
    
  2. 安装依赖

    npm install
    
  3. 配置环境变量

    在根目录下提供了一个 .env.example 文件作为所需环境变量的模板。为了设置您的环境:

    a. 复制 .env.example 文件并将其重命名为 .env

    cp .env.example .env
    

    b. 打开 .env 文件,并用实际的 SAP 连接详情替换占位符值:

    SAP_URL=https://your-sap-server.com:44300
    SAP_USER=YOUR_SAP_USERNAME
    SAP_PASSWORD=YOUR_SAP_PASSWORD
    SAP_CLIENT=YOUR_SAP_CLIENT
    SAP_LANGUAGE=YOUR_SAP_LANGUAGE
    

    注意:SAP_CLIENT 和 SAP_LANGUAGE 变量是可选的,但推荐使用。

    如果您使用的是自签名证书,还可以设置:

    NODE_TLS_REJECT_UNAUTHORIZED="0"
    

    重要提示:永远不要将您的 .env 文件提交到版本控制中。它已经被包含在 .gitignore 中以防止意外提交。

  4. 构建项目

    npm run build
    
  5. 运行服务器

    npm run start
    

    (或者选择将 MCP 服务器集成到 VSCode)

使用

一旦服务器启动,您可以使用支持模型上下文协议(例如 Cline)的 MCP 客户端或工具与其交互。为了将 MCP 服务器与 Cline 集成,请使用以下 MCP 配置:

    "mcp-abap-abap-adt-api": {
      "command": "node",
      "args": [
        "PATH_TO_YOUR/mcp-abap-abap-adt-api/dist/index.js"
      ],
      "disabled": true,
      "autoApprove": [
      ]
    },

自定义指令

使用此自定义指令向您的模型解释该工具:

## mcp-abap-abap-adt-api 服务器

此服务器提供了通过 ADT(ABAP 开发工具)API 与 SAP 系统交互的工具。它允许您检索有关 ABAP 对象的信息、修改源代码以及管理传输。

**关键工具及其用法:**

*   **`searchObject`**:基于查询字符串(例如类名)查找 ABAP 对象。
    *   `query`:(字符串,必需)搜索词。
    *   返回对象的 URI。 示例:`/sap/bc/adt/oo/classes/zcl_invoice_xml_gen_model`

*   **`transportInfo`**:检索给定对象的传输信息。
    *   `objSourceUrl`:(字符串,必需)对象的 URI(从 `searchObject` 获得)。
    *   返回传输详情,包括传输请求号(`TRKORR` 或 JSON 响应中的 `transportInfo.LOCKS.HEADER.TRKORR`)。

*   **`lock`**:锁定 ABAP 对象以供编辑。
    *   `objectUrl`:(字符串,必需)对象的 URI。
    *   返回一个 `lockHandle`,这是后续修改所必需的。

*   **`unLock`**:解锁先前锁定的 ABAP 对象。
    *   `objectUrl`:(字符串,必需)对象的 URI。
    *   `lockHandle`:(字符串,必需)从 `lock` 操作获得的锁句柄。

*   **`setObjectSource`**:修改 ABAP 对象的源代码。
    *   `objectSourceUrl`:(字符串,必需)对象的 URI *后缀 `/source/main`*。 示例:`/sap/bc/adt/oo/classes/zcl_invoice_xml_gen_model/source/main`
    *   `lockHandle`:(字符串,必需)从 `lock` 操作获得的锁句柄。
    *   `source`:(字符串,必需)完整的修改后的 ABAP 源代码。
    *   `transport`:(字符串,可选)传输请求号。

*   **`syntaxCheckCode`**:对给定的 ABAP 源代码执行语法检查。
    *   `code`:(字符串,必需)要检查的 ABAP 源代码。
    *   `url`:(字符串,可选)对象的 URL。
    *   `mainUrl`:(字符串,可选)主 URL。
    *   `mainProgram`:(字符串,可选)主程序。
    *   `version`:(字符串,可选)版本。
    *   返回语法检查结果,包括任何错误。

*   **`activate`**:激活 ABAP 对象。(参见下面关于激活/解锁的注意事项)
    *    `object`:要激活的对象。

*   **`getObjectSource`**:检索 ABAP 对象的源代码。
    *   `objectSourceUrl`:(字符串,必需)对象的 URI *后缀 `/source/main`*。

**修改 ABAP 代码的工作流:**

1.  **找到对象 URI**:使用 `searchObject`。
2.  **读取原始源代码**:使用 `getObjectSource`(带有 `/source/main` 后缀)。
3.  **本地克隆并修改源代码**:(例如,使用 `write_to_file` 创建本地副本,使用 `read_file`、`replace_in_file` 修改此本地副本)。
4.  **获取传输信息**:使用 `transportInfo`。
5.  **锁定对象**:使用 `lock`。
6.  **设置修改后的源代码**:使用 `setObjectSource`(带有 `/source/main` 后缀)。
7.  **执行语法检查**:使用 `syntaxCheckCode`。
8.  **激活**对象,使用 `activate`。
9.  **解锁对象**:使用 `unLock`。

**重要注意事项:**
*   **文件处理**:SAP 完全与本地文件系统解耦。读取源代码只会返回代码作为工具结果——它不会影响文件。文件不会与 SAP 同步,只是我们参考的本地副本。请注意:严格来说,您不需要创建源代码的本地副本,因为它们对 SAP 没有影响,但它有助于我们跟踪更改。
*   **文件处理**:您将使用的本地文件名将不包含路径,仅包含文件名!建议使用类似 `[ObjectName].[ObjectType].abap` 的模式。(例如,对于 ABAP 程序 SAPMV45A,使用 SAPMV45A.prog.abap;对于类 CL_IXML,使用 CL_IXML.clas.abap)
*   **URL 后缀**:在使用 `setObjectSource` 和 `getObjectSource` 时,请记得在对象 URI 后添加 `/source/main`。
*   **传输请求**:获取传输请求号(例如,从 `transportInfo` 或用户处获取),并在相关操作中包含它。
*   **锁句柄**:从 `lock` 操作获得的 `lockHandle` 对 `setObjectSource` 和 `unLock` 至关重要。确保您使用的是有效的 `lockHandle`。如果锁定失败,您可能需要重新获取锁。锁可能会过期或被其他用户释放。
*   **激活/解锁顺序**:`activate` 和 `unLock` 操作的确切顺序可能需要澄清。请参阅工具描述或询问用户。看起来可以在不解锁的情况下使用 `activate`。
* **错误处理**:工具返回 JSON 响应。检查这些响应中的错误消息。

## 高效数据库访问

SAP 系统包含大量数据。编写高效访问数据库的 ABAP 代码以最小化性能影响和网络流量至关重要。避免选择整个表或使用广泛的 `WHERE` 子句,当您只需要特定数据时。

*   **使用 `WHERE` 子句**:始终在 `SELECT` 语句中使用 `WHERE` 子句来过滤从数据库检索的数据。仅选择您需要的具体行。
*   **`UP TO 1 ROWS`**:如果您只需要一条记录,可以使用 `SELECT SINGLE` 语句,前提是您可以保证提供 `SELECT SINGLE` 语句的所有键字段。否则,使用带有 `UP TO 1 ROWS` 补充的 `SELECT` 语句。这告诉数据库在找到第一个匹配记录后停止搜索,从而提高性能。示例:

    ```abap
    SELECT vgbel FROM vbrp WHERE vbeln = @me->lv_vbeln INTO @DATA(lv_vgbel) UP TO  1 ROWS.
      EXIT. " 在此之后退出任何循环。
    ENDSELECT.
    ```
## 检查表和结构定义

在处理 ABAP 对象时,您可能会遇到与未知字段名称或不正确的表使用相关的错误。您可以使用以下工具检查表和结构定义:

*   **`GetTable`**:使用此工具检索 ABAP 字典表的结构,包括其字段名称和数据类型。这对于验证 `SELECT` 语句中使用的正确字段非常有用。
*    如果需要检查包含结构,您可能需要使用 `searchObject` 查找包含项,然后使用 `GetTypeInfo` 或 `GetStructure`。您可能会收到 404 错误并尝试使用 `GetStructure` 再试一次。
*   **`GetStructure`**:使用此工具检索 ABAP 字典结构的结构,包括其字段名称和数据类型。这对于验证 `SELECT` 语句中使用的正确字段非常有用。
*    如果需要检查包含结构,您可能需要使用 `searchObject` 查找包含项,然后使用 `GetTypeInfo` 或 `GetStructure`。

贡献

欢迎贡献!请遵循以下步骤进行贡献:

  1. 分叉仓库

  2. 创建新分支

    git checkout -b feature/your-feature-name
    
  3. 提交更改

    git commit -m "添加某些功能"
    
  4. 推送到分支

    git push origin feature/your-feature-name
    
  5. 打开拉取请求

许可证

本项目根据 MIT 许可证授权。