ABAP-ADT-API MCP-Server
一个模型上下文协议(Model Context Protocol,MCP)服务器,用于促进 ABAP 系统和 MCP 客户端之间的通信,提供管理 ABAP 对象、处理传输请求以及执行代码分析的工具,从而增强 ABAP 开发工作流程。
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 服务器
描述
MCP-Server mcp-abap-abap-adt-api
是一个模型上下文协议 (MCP) 服务器,旨在促进 ABAP 系统和 MCP 客户端之间的无缝通信。 它是 abap-adt-api 的一个包装器,并提供一套工具和资源,用于管理 ABAP 对象、处理传输请求、执行代码分析等,从而提高 ABAP 开发工作流程的效率和有效性。
特性
- 身份验证: 使用
login
工具安全地与 ABAP 系统进行身份验证。 - 对象管理: 无缝地创建、读取、更新和删除 ABAP 对象。
- 传输处理: 使用
createTransport
和transportInfo
等工具管理传输请求。 - 代码分析: 执行语法检查并检索代码完成建议。
- 可扩展性: 根据需要轻松地使用其他工具和资源扩展服务器。
- 会话管理: 使用
dropSession
和logout
处理会话缓存和终止。
安装
通过 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。
步骤
-
克隆存储库
git clone https://github.com/mario-andreschak/mcp-abap-abap-adt-api.git cd mcp-abap-abap-adt-api
-
安装依赖项
npm install
-
配置环境变量
根目录中提供了一个
.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
中,以防止意外提交。 -
构建项目
npm run build
-
运行服务器
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`。
贡献
欢迎贡献! 请按照以下步骤进行贡献:
-
Fork 存储库
-
创建新分支
git checkout -b feature/your-feature-name
-
提交您的更改
git commit -m "添加一些功能"
-
推送到分支
git push origin feature/your-feature-name
-
打开拉取请求
许可证
该项目已获得 MIT 许可证 的许可。
推荐服务器
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Playwright MCP Server
提供一个利用模型上下文协议的服务器,以实现类人浏览器的自动化,该服务器使用 Playwright,允许控制浏览器行为,例如导航、元素交互和滚动。
MCP Package Docs Server
促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。
Claude Code MCP
一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。
@kazuph/mcp-taskmanager
用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。
Apple MCP Server
通过 MCP 协议与 Apple 应用(如“信息”、“备忘录”和“通讯录”)进行交互,从而使用自然语言发送消息、搜索和打开应用内容。
Gitingest-MCP
一个用于 gitingest 的 MCP 服务器。它允许像 Claude Desktop、Cursor、Cline 等 MCP 客户端快速提取关于 Github 仓库的信息,包括仓库摘要、项目目录结构、文件内容等。