ABAP-ADT-API MCP-Server

ABAP-ADT-API MCP-Server

一个模型上下文协议(Model Context Protocol,MCP)服务器,用于促进 ABAP 系统和 MCP 客户端之间的通信,提供管理 ABAP 对象、处理传输请求以及执行代码分析的工具,从而增强 ABAP 开发工作流程。

开发者工具
数据库
版本控制
TypeScript
访问服务器

Tools

hasTransportConfig

Check if transport configuration exists

transportConfigurations

Retrieves transport configurations.

getTransportConfiguration

Retrieves a specific transport configuration.

fixProposals

Retrieves fix proposals.

login

Authenticate with ABAP system

logout

Terminate ABAP session

dropSession

Clear local session cache

transportInfo

Get transport information for an object source

createTransport

Create a new transport request

setTransportsConfig

Sets transport configurations.

createTransportsConfig

Creates transport configurations.

userTransports

Retrieves transports for a user.

transportsByConfig

Retrieves transports by configuration.

transportDelete

Deletes a transport.

transportRelease

Releases a transport.

transportSetOwner

Sets the owner of a transport.

transportAddUser

Adds a user to a transport.

systemUsers

Retrieves a list of system users.

transportReference

Retrieves a transport reference.

objectStructure

Get object structure details

searchObject

Search for objects

findObjectPath

Find path for an object

fixEdits

Applies fix edits.

unLock

Unlock an object

getObjectSource

Retrieves source code for ABAP objects

objectTypes

Retrieves object types.

reentranceTicket

Retrieves a reentrance ticket.

classIncludes

Get class includes structure

classComponents

List class components

createTestInclude

Create test include for class

syntaxCheckCode

Perform ABAP syntax check with source code

syntaxCheckCdsUrl

Perform ABAP syntax check with CDS URL

codeCompletion

Get code completion suggestions

findDefinition

Find symbol definition

usageReferences

Find symbol references

syntaxCheckTypes

Retrieves syntax check types.

codeCompletionFull

Performs full code completion.

runClass

Runs a class.

codeCompletionElement

Retrieves code completion element information.

usageReferenceSnippets

Retrieves usage reference snippets.

fragmentMappings

Retrieves fragment mappings.

abapDocumentation

Retrieves ABAP documentation.

lock

Lock an object

setObjectSource

Sets source code for ABAP objects

deleteObject

Deletes an ABAP object from the system

activateObjects

Activate ABAP objects using object references

activateByName

Activate an ABAP object using name and URL

inactiveObjects

Get list of inactive objects

objectRegistrationInfo

Get registration information for an ABAP object

validateNewObject

Validate parameters for a new ABAP object

createObject

Create a new ABAP object

nodeContents

Retrieves the contents of a node in the ABAP repository tree.

mainPrograms

Retrieves the main programs for a given include.

featureDetails

Retrieves details for a given feature.

collectionFeatureDetails

Retrieves details for a given collection feature.

findCollectionByUrl

Finds a collection by its URL.

loadTypes

Loads object types.

adtDiscovery

Performs ADT discovery.

adtCoreDiscovery

Performs ADT core discovery.

adtCompatibiliyGraph

Retrieves the ADT compatibility graph.

unitTestRun

Runs unit tests.

unitTestEvaluation

Evaluates unit test results.

unitTestOccurrenceMarkers

Retrieves unit test occurrence markers.

README

请注意:此服务器仍处于实验阶段!请谨慎使用!

ABAP-ADT-API MCP 服务器

smithery badge

描述

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

特性

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

安装

通过 Smithery 安装

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

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 中)

用法

服务器运行后,您可以使用 MCP 客户端或支持模型上下文协议的工具(例如 Cline)与其进行交互。 为了将 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` 获取)。
    *   返回传输详细信息,包括传输请求号(JSON 响应中的 `TRKORR` 或 `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` 时,请记住将 `/source/main` 添加到对象 URI。
*   **传输请求:** 获取传输请求号(例如,从 `transportInfo` 或从用户处获取),并将其包含在相关操作中。
*   **锁定句柄:** 从 `lock` 操作获得的 `lockHandle` 对于 `setObjectSource` 和 `unLock` 至关重要。 确保您使用的是有效的 `lockHandle`。 如果锁定失败,您可能需要重新获取锁定。 锁定可能会过期或被其他用户释放。
*   **激活/解锁顺序:** `activate` 和 `unLock` 操作的确切顺序可能需要澄清。 请参阅工具说明或询问用户。 似乎可以在不先解锁的情况下使用 `activate`。
* **错误处理:** 这些工具返回 JSON 响应。 检查这些响应中的错误消息。

## 高效的数据库访问

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

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

    ```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. Fork 存储库

  2. 创建新分支

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

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

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

许可证

该项目已获得 MIT 许可证 的许可。

推荐服务器

Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Playwright MCP Server

Playwright MCP Server

提供一个利用模型上下文协议的服务器,以实现类人浏览器的自动化,该服务器使用 Playwright,允许控制浏览器行为,例如导航、元素交互和滚动。

精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
Apple MCP Server

Apple MCP Server

通过 MCP 协议与 Apple 应用(如“信息”、“备忘录”和“通讯录”)进行交互,从而使用自然语言发送消息、搜索和打开应用内容。

精选
本地
TypeScript
Gitingest-MCP

Gitingest-MCP

一个用于 gitingest 的 MCP 服务器。它允许像 Claude Desktop、Cursor、Cline 等 MCP 客户端快速提取关于 Github 仓库的信息,包括仓库摘要、项目目录结构、文件内容等。

精选
本地
Python