@abapify/adt-mcp

中文文档
0.4.34发布于 2026/11/03MITTypeScriptES Module构建来源已验证近 30 天下载 2782

SAP ADT 操作的 MCP 服务器 – 将adt- cli 特性暴露为 MCP 工具

中文使用文档
文档目录28 节
  1. 快速启动( stdio)
  2. 在克洛德桌面中配置
  3. 配置 VS 代码( GitHub 副驾驶代理模式)
  4. 在 Cursor / Windsurf 中配置
  5. HTTP运输(自第一波起)
  6. 会话生命周期工具
  7. (自第3波起)交易变更
  8. 连接参数
  9. 工具参考
  10. 发现系统( S)
  11. 对象仓库
  12. 源代码
  13. 激活语法( C)
  14. 单位测试
  15. 软件包管理
  16. 改变和运输系统(CTS)
  17. ABAP 测试舱(ATC)
  18. 共同工作流程
  19. 读取 编辑 保存 激活
  20. 探索软件包
  21. 质量门
  22. 建筑
  23. 程序用途
  24. 自定义客户端工厂(例如用于测试或SSO)
  25. 测试
  26. 在自己的测试中使用模拟服务器
  27. 发展
  28. 特征对等地图

@abapify/adt-mcp (英语)

MCP(模式上下文协议)服务器将SAP ADT操作暴露为AI助手,IDE集成和自动化管道的结构化工具.

这个包裹船 两次运输数字 :

二进制运输国家模式
adt-mcpstdio (JSON-RPC 过管道)无国籍者——接通电话.
adt-mcp-http可流取的 HTTP会话范围已缓存 AdtClient,锁,和更改.

见 docs/deployment/mcp-http.md 用于完整的HTTP部署指南(Docker,Okta,多系统,故障排除). 其余的这个README专注于stdio.

快速启动( stdio)

# Run via npx (no install required)
npx @abapify/adt-mcp

在克洛德桌面中配置

添加为 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或者您的OS上的等同路径:

{
  "mcpServers": {
    "adt": {
      "command": "npx",
      "args": ["@abapify/adt-mcp"]
    }
  }
}

配置 VS 代码( GitHub 副驾驶代理模式)

添加为 .vscode/mcp.json 在工作空间中,或到您的用户设置 "mcp"数字 :

{
  "servers": {
    "adt": {
      "type": "stdio",
      "command": "npx",
      "args": ["@abapify/adt-mcp"]
    }
  }
}

在 Cursor / Windsurf 中配置

添加到您的 MCP 服务器列表 :

{
  "mcpServers": {
    "adt": {
      "command": "npx",
      "args": ["@abapify/adt-mcp"]
    }
  }
}

HTTP运输(自第一波起)

adt-mcp-http 是可流的 HTTP 输入点。 它的目标是共享/远程部署(Docker、Kubernetes、Kiro、团队).

最小运行 :

bunx nx build adt-mcp
node packages/adt-mcp/dist/bin/adt-mcp-http.mjs --port 3000 --auth-token "$(openssl rand -hex 32)"

最小烟雾测试:

TOKEN=<your token>
curl -sf http://127.0.0.1:3000/healthz
curl -H "Authorization: Bearer $TOKEN" \
     -H 'Content-Type: application/json' \
     -X POST http://127.0.0.1:3000/mcp \
     -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"demo","version":"0"}}}'

抓起来 Mcp-Session-Id 响应头,然后呼叫 sap_connect,你需要的工具, 最后 sap_disconnect ——或关闭运输自动触发清理.

Auth 模式 : none (dev/回转), bearer (共享秘密), proxy (信托) x-forwarded-user 从上游代理, oauth (OIDC JWT针对Okta / Entra ID / Cognitto的验证). 全旗 + env 矩阵 docs/deployment/mcp-http.md。 。 。 .

会话生命周期工具

仅在HTTP运输中可用 :

工具目的
sap_connect每一次MCP会话进行SAP安全会话握手. 接受内置证书或 a systemId 已解决 SAP_SYSTEMS_JSON 编号 : SAP_SYSTEMS_FILE。 。 。 .
sap_disconnect释放锁,DELETE SAP安全会话,并放下缓存客户端.

(自第3波起)交易变更

Bundle 多个 ADT 写入单个原子单位:

工具目的
changeset_begin打开与当前 MCP 会话绑定的交易单位工作( 一次一个) .
changeset_add阶段一个对象写入——获得一个锁并PUT提供源. 德弗斯启动.
changeset_commit批量活化单个调用中每个已上演的对象,再放出所有锁.
changeset_rollback释放每个被扣的锁 并标记回滚的更改器。 源 PUT 不返回( SAP 没有交易抛弃) .

见 docs/deployment/mcp-http.md#transactional-changesets 是一个实例.


连接参数

每个工具都需要这些连接参数(通过每次呼叫,从未存储) :

参数类型需求说明
baseUrl字符串✅SAP系统基础URL,例如. https://my-system.example.com:8000
client字符串—— 说SAP客户号,例如:. 100
username字符串—— 说基本认证的用户名
password字符串—— 说基本认证的密码

安全说明: 证书按请求直接转交SAP系统。 MCP服务器没有状态,并且坚持没有证书.


工具参考

发现系统( S)

discovery

在SAP系统中发现可用的ADT服务. 用于在使用其他工具之前检查系统支持的终点.

参数: 仅连接

回返情况: JSON对象具有可用的服务收藏及其链接.


system_info

获取SAP系统和/或会话信息.

参数:

参数类型默认说明
scope"session" | "system" | "both""both"获取什么信息

回返情况:

{
  "session": { "user": "DEVELOPER", "client": "100", "language": "EN", ... },
  "system": { "systemId": "DEV", "release": "757", ... }
}

对象仓库

search_objects

在仓库中搜索 ABAP 对象 。 支持通配符.

参数:

参数类型默认说明
query字符串✅搜索名词等. ZCL_* 或者说 MY_CLASS
maxResults编号50最大结果数

回返情况:

{
  "count": 3,
  "objects": [
    { "name": "ZCL_MY_CLASS", "type": "CLAS/OC", "uri": "/sap/bc/adt/oo/classes/zcl_my_class", ... }
  ]
}

get_object

获取特定ABAP对象的名称细节 。 进行精确匹配搜索,如果找不到精确匹配,则返回对象元数据加上类似对象列表.

参数:

参数类型说明
objectName字符串要查找的 ABAP 对象名称

回返情况:

{ "found": true, "object": { "name": "ZCL_MY_CLASS", "type": "CLAS/OC", "uri": "...", ... } }

或,未找到时:

{ "found": false, "message": "Object 'FOO' not found", "similar": [...] }

源代码

list_source_versions

列出不可移动的 ADT 源版元数据和运输出处 一个对象的源组件。 结果是只使用元数据;它从未嵌入 ABAP来源.

参数类型说明
objectName字符串ABAP 对象名称
objectType字符串对象类型( E)PROG, (中文(简体) ), CLAS, (中文(简体) ), INTF, (...) (中文(简体) )
component绳子?精确组件 ID 如 implementations

get_source_version

明确读取一个不可变源 URI 返回 list_source_versions 或者说 cts_transport_source_manifest输出范围 以 maxBytes (1 MiB 默认, 4 MiB 硬盖) 并失败而非截取.

参数类型说明
uri字符串服务器关系不可改变 /sap/bc/adt/... URI 资源
maxBytes号码?UTF-8 响应限制

cts_transport_source_manifest

构建一个仅包含元数据、 组件- 角精确度的指令列表 非空运列表。 每个叶子都报告它的变化类型,精确度, 具体请求/任务来源,已知的不可改变基准/标题参考文献, 以及无法证实完全隔离时的打字诊断.

参数类型说明
transports字符串 []订购的请求/任务标识符
selector对象?可选 objFunc, (中文(简体) ), pgmid,以及 type 过滤器
concurrency号码?受约束元数据/食用货币(最多32个)

get_source

为程序、类、接口或函数组获取ABAP源代码。 支持版本感知读取,类包括,方法级读取,并用regex grep来进行有符号效率的源探索.

参数:

参数类型说明
objectName字符串ABAP 对象名称
objectType绳子?对象类型提示( E)PROG, (中文(简体) ), CLAS, (中文(简体) ), INTF。在提供搜索回路时跳过.
version埃努姆吗?active (默认, 上次激活) 或 inactive (未激活的草稿).
include绳子?对于 CLAS:来源包括(main, (中文(简体) ), definitions, (中文(简体) ), implementations, (中文(简体) ), testclasses, (中文(简体) ), macros, (中文(简体) ), text_symbols, (中文(简体) ), localtypes) (中文(简体) ).
method绳子?对于 CLAS: 要读取的方法名称, 或 * 以列出所有方法.
grep绳子?Regex 模式; 返回与上下文匹配的源行而不是完整源行 。 对于 CLAS 源,每个匹配都附加了自有方法/类/包含的注释.
maxBytes号码?以字节表示的最大UTF-8响应大小(默认为一米B,硬盖为二米B).
format埃努姆吗?raw (违约)或 structured (类包括并用方法边界为JSON).

回返情况:

  • 默认 : { object, bytes, source, version, include }
  • method=*数字 : { object, methodCount, methods }
  • method=<name>数字 : { object, method, startLine, endLine, bytes, source }
  • grep数字 : { object, pattern, matchCount, matches, methodContext }
  • format=structured数字 : { object, source, bytes, version, include, includes, methods }

实例:

get_source objectName=ZCL_ORDER objectType=CLAS version=inactive
get_source objectName=ZCL_ORDER objectType=CLAS include=testclasses
get_source objectName=ZCL_ORDER objectType=CLAS method=get_name
get_source objectName=ZCL_ORDER objectType=CLAS grep="SELECT.*FROM"

提示 : 不要合并 method 财务报告和审定财务报表 grep启用 grep 然后找到密码 method 以读取完整的方法.


update_source

将新的 ABAP 源代码写入已有对象 。 内部执行全SAP ADT锁 PUT 解锁循环.

参数:

参数类型说明
objectName字符串ABAP 对象名称
objectType绳子?对象类型提示
sourceCode字符串新建 ABAP 源代码
transport绳子?运输请求号(可运输物品需要)

回返情况:

{ "status": "updated", "object": "ZCL_MY_CLASS" }

⚠️ 更新后总是激活 ——不活动源没有编译,无法执行.


get_test_classes

检索测试类定义(FOR TESTING)嵌入于ABAP类. 返回测试类的原始来源.

参数:

参数类型说明
className字符串ABAP类名称,例如. ZCL_MY_CLASS

回返情况: 本地测试类的普通ABAP来源包括.


激活语法( C)

activate_object

激活一个或多个ABAP对象. 支持单对象和批量模式.

单个对象模式 :

参数类型说明
objectName字符串ABAP 对象名称
objectType字符串对象类型( E)PROG, (中文(简体) ), CLAS, (中文(简体) ), INTF, (...) (中文(简体) )

批量模式 :

参数类型说明
objectsArray<{objectName, objectType}>一个请求中要激活的对象

回返情况:

{ "status": "activated", "count": 2, "objects": [{ "name": "ZCL_FOO", "type": "CLAS" }, ...] }

check_syntax

运行一个对象的ABAP语法检查并返回结构化的检查消息. 使用 checkrun schema — 在工具代码中没有解析 XML .

参数:

参数类型默认说明
objectName字符串✅ABAP 对象名称
objectType绳子?—— 说快速解析对象类型提示
version"active" | "inactive" | "new""active"要检查的版本

回返情况:

{
  "hasErrors": false,
  "hasWarnings": true,
  "reports": [
    {
      "reporter": "syntax",
      "triggeringUri": "/sap/bc/adt/oo/classes/zcl_foo",
      "checkMessageList": {
        "checkMessage": [{ "type": "W", "shortText": "Variable X is unused", ... }]
      }
    }
  ]
}

单位测试

run_unit_tests

运行 ABAP 单位在物体或包上进行测试,并收到按测试方法细分的通过/失败计数.

参数:

参数类型默认说明
objectName字符串✅对象名称( 类、 程序或软件包)
objectType绳子?—— 说类型提示( E)CLAS, (中文(简体) ), PROG, (中文(简体) ), DEVC, (...) (中文(简体) )
withCoverage布尔false是否收集代码覆盖数据

回返情况:

{
  "totalTests": 5,
  "passCount": 4,
  "failCount": 1,
  "errorCount": 0,
  "programs": [ ... ]
}

软件包管理

list_package_objects

列出包中包含的ABAP对象. 用途 quickSearch 带有 packageName 过滤器.

参数:

参数类型默认说明
packageName字符串✅包名,例如:. ZPACKAGE
objectType绳子?—— 说按类型过滤( N)CLAS, (中文(简体) ), PROG, (...) (中文(简体) )
maxResults编号200最大结果计数

回返情况:

{
  "packageName": "ZPACKAGE",
  "count": 12,
  "objects": [{ "name": "ZCL_FOO", "type": "CLAS/OC", ... }]
}

改变和运输系统(CTS)

cts_list_transports

列出CTS的运输请求.

参数:

参数类型默认
maxResults编号50

回返情况: 运输请求描述符.


cts_get_transport

获取具体运输请求的细节.

参数:

参数类型说明
transportId字符串运输编号,例如:. DEVK900001

回返情况: 完整的运输描述符,包括任务和对象.


cts_create_transport

创建新的运输请求 .

参数:

参数类型默认说明
description字符串✅运输说明
type"K" | "W""K"工作中心(K)或自定义(W(中文(简体) )

cts_create_task

在现有运输请求下创建并核查可修改的任务.

参数:

参数类型说明
transport字符串父母运输申请号
owner字符串SAP 用户将拥有此任务

回返情况: 母运输编号,创建任务编号,规范所有者, 财务报告和审定财务报表 created 状态.


cts_release_transport

发布运输请求.

参数:

参数类型说明
transport字符串运输编号
releaseAll布尔在请求前释放可修改的任务

cts_delete_transport

删除运输请求.

参数:

参数类型说明
transport字符串运输编号

flow_checkout_tr

将允许的本地工作空间调和到精确的运输源边界. 工具代表 @abapify/adt-flow; 它不运行 Git 命令 .

参数类型默认说明
transports字符串 []✅非空运输范围
workspaceRoot字符串✅服务器所属根中的绝对目录
base布尔false在范围前选择版本
verifyInventory布尔false重算存货而不是重用精确标题索引

JSON结果包含更改、移动、去除、不变、描述和 SAP的电话数。 与 verifyInventory: true,其中还包含刷新 清单和每个项目的决议结果。 它从不包含源体或 证书.


flow_index_tr

长期库存和未解决的当地允许的边界说明 不读取或实现源文件的工作空间。 不像严格 flow_checkout_tr,此工具将不准确的组件记录为省略 稍后精确的检出可以重试它们.

参数类型说明
transports字符串 []非空运输范围
workspaceRoot字符串服务器所属根中的绝对目录

JSON结果包含运输/物体说明和疏漏诊断; 它的源调数总是零.


ABAP 测试舱(ATC)

atc_run

运行 ABAP 测试 Cockpit 检查对象或包并返回结果工作列表 .

在目的模式下,此操作需要明确 safe_execute 赠款。 A 类 read 赠款不足,因为SAP创建了临时 用于分析的服务器侧工作列表.

参数:

参数类型说明
scope对象ATC 范围 : { kind: 'package', packageName }, (中文(简体) ), { kind: 'transport_request', trkorr },或 { kind: 'objects', objects: [{ objectType, objectName }] }

回返情况:

{ "status": "completed", "worklist": { ... } }

共同工作流程

读取 编辑 保存 激活

1. get_source      objectName=ZCL_FOO objectType=CLAS
2. update_source   objectName=ZCL_FOO objectType=CLAS sourceCode="..." transport=DEVK900001
3. check_syntax    objectName=ZCL_FOO objectType=CLAS version=inactive
4. activate_object objectName=ZCL_FOO objectType=CLAS
5. run_unit_tests  objectName=ZCL_FOO objectType=CLAS

探索软件包

1. list_package_objects packageName=ZPACKAGE
2. get_object      objectName=ZCL_FOO objectType=CLAS
3. get_source      objectName=ZCL_FOO objectType=CLAS

质量门

1. check_syntax objectName=ZCL_FOO objectType=CLAS
2. atc_run      scope={"kind":"objects","objects":[{"objectType":"CLAS","objectName":"ZCL_FOO"}]}
3. run_unit_tests objectName=ZCL_FOO objectType=CLAS

建筑

┌──────────────┐    stdio (JSON-RPC)   ┌──────────────────────────────┐
│  MCP Client  │ ◄───────────────────► │  @abapify/adt-mcp            │
│ (AI / IDE)   │                       │  McpServer (17 tools)        │
└──────────────┘                       └──────────────┬───────────────┘
                                                      │ calls
                                       ┌──────────────▼───────────────┐
                                       │  @abapify/adt-client         │
                                       │  (typed contracts via speci) │
                                       └──────────────┬───────────────┘
                                                      │ HTTP/HTTPS
                                       ┌──────────────▼───────────────┐
                                       │  SAP System (ADT REST)       │
                                       └──────────────────────────────┘

设计原则:

  • 无逻辑重复 - 工具代表 @abapify/adt-client 服务.
  • 基于Schema的序列化 - 请求/答复 XML 是通过打入的系统处理的,来自 @abapify/adt-schemas。没有手动 XML 构建,也没有第三方 XML 解析器.
  • 结构化 JSON – 每个工具返回JSON,从不原始控制台输出.
  • Zod 验证 – 所有工具输入在到达SAP系统之前都经过验证.
  • 连线 – 每个工具调用都会创建自己的ADT客户端;服务器是无国籍的.

程序用途

import { createMcpServer } from '@abapify/adt-mcp';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';

const server = createMcpServer();
const transport = new StdioServerTransport();
await server.connect(transport);

自定义客户端工厂(例如用于测试或SSO)

import { createMcpServer } from '@abapify/adt-mcp';

const server = createMcpServer({
  clientFactory: (params) =>
    createAdtClient({
      baseUrl: params.baseUrl,
      username: params.username ?? '',
      password: params.password ?? '',
      client: params.client,
    }),
});

测试

集成测试使用Vitest和一个内置的模拟APT服务器,不需要SAP系统.

# Run all integration tests
bunx vitest run tests/integration.test.ts

在自己的测试中使用模拟服务器

模拟ADT服务器 住在私人 @abapify/adt-fixtures 软件包 (monorepo- only – 它不发布于 npm). 在这个仓库里 集成测试直接导入:

import { createMockAdtServer } from '@abapify/adt-fixtures';

发展

bunx nx build adt-mcp      # build
bunx nx typecheck adt-mcp  # type check
bunx nx lint adt-mcp       # lint
bunx nx test adt-mcp       # run integration tests with Vitest

特征对等地图

CLI 命令MCP 工具状态
adt discoverydiscovery✅
adt infosystem_info✅
adt searchsearch_objects✅
adt getget_object✅
adt source getget_source✅
adt source versionslist_source_versions✅
adt source version getget_source_version✅
adt source putupdate_source✅
adt activateactivate_object✅
adt checkcheck_syntax✅
adt aunit runrun_unit_tests✅
adt atc runatc_run✅
adt cts tr listcts_list_transports✅
adt cts tr getcts_get_transport✅
adt cts tr task creatects_create_task✅
adt cts tr source-manifestcts_transport_source_manifest✅
adt cts tr deletects_delete_transport✅
adt cts tr creatects_create_transport✅
adt cts tr releasects_release_transport✅
adt flow checkout trflow_checkout_tr✅
adt flow index trflow_index_tr✅
adt ls—— 说未来
adt cts search—— 说未来
adt import package—— 说未来
adt import transport—— 说未来

版本与发布记录

@abapify/adt-mcp 共发布 29 个版本,首次发布于 2026/04/21;过去 12 个月发布了 29 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.4.34latest2026/11/034 天前
0.4.332026/11/025 天前
0.4.322026/11/025 天前
0.4.312026/11/016 天前
0.4.292026/10/308 天前
0.4.282026/10/308 天前

关于 @abapify/adt-mcp 的常见问题

@abapify/adt-mcp 是什么?

SAP ADT 操作的 MCP 服务器 – 将adt- cli 特性暴露为 MCP 工具

如何安装 @abapify/adt-mcp?

在项目目录运行 npm install @abapify/adt-mcp,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 adt-mcp、adt-mcp-http,可以用 npx adt-mcp 直接运行。

@abapify/adt-mcp 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@abapify/adt-mcp 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@abapify/adt-mcp 可以商用吗?

@abapify/adt-mcp 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@abapify/adt-mcp 的下载量有多少?

根据 npm 官方下载统计,@abapify/adt-mcp 在 2026/10/05 – 2026/11/03 这 30 天内被下载 2,782 次,日均约 93 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@abapify/adt-mcp 还在维护吗?

最新版本 0.4.34 发布于 2026/11/03(4 天前);至今共发布 29 个版本,其中过去 12 个月发布了 29 个;首次发布于 2026/04/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。