mcpField
M
mcp-abap-adt-compact-http

mcp-abap-adt-compact-http

本地服务
github.com/fr0ster开发工具1003 天前更新

关于 mcp-abap-adt-compact-http

mcp-abap-adt-compact-http 是面向 SAP ECC/S/4HANA 和 SAP BTP ABAP Cloud 的紧凑型 ADT MCP 服务,供需要分析或修改 ABAP 仓库的开发团队使用。它通过 Streamable HTTP 提供服务,并从请求的 x-sap-* 标头读取凭据。

主要功能

  1. 01分析 ABAP 对象及依赖
  2. 02创建、读取、更新和删除工件
  3. 03支持 RAP 与经典 ABAP
  4. 04每种操作提供单独工具
  5. 05使用 Streamable HTTP 传输

适用场景

  1. 01查找对象使用位置并评估影响
  2. 02检查仓库元数据与对象结构
  3. 03通过 HTTP 请求调用 ABAP 工具

MCP 相关

它通过 Streamable HTTP 向 MCP 客户端提供 SAP ADT 仓库分析与 ABAP 工件操作工具。凭据从各请求的 x-sap-* 标头读取;紧凑型工具按操作拆分,并在参数中指定对象类型。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"fr0ster-mcp-abap-adt-compact-http": {
"command": "npx",
"args": [
"-y",
"@mcp-abap-adt/compact-http"
],
"env": {
"SAP_SYSTEM_TYPE": "<SAP_SYSTEM_TYPE>",
"MCP_HTTP_HOST": "<MCP_HTTP_HOST>",
"MCP_HTTP_PORT": "<MCP_HTTP_PORT>",
"SAP_MASTER_SYSTEM": "<SAP_MASTER_SYSTEM>",
"SAP_RESPONSIBLE": "<SAP_RESPONSIBLE>"
}
}
}
}
启动命令npx -y @mcp-abap-adt/compact-http
需要配置的环境变量
SAP_SYSTEM_TYPESystem type, required (here or as --system-type; no default, never guessed, no request header states it): the tools offered, the connector, and how the system's answers are read. Without it the server does not start.
MCP_HTTP_HOSTHost to listen on: 127.0.0.1 (this machine only) or 0.0.0.0 (every interface).
MCP_HTTP_PORTPort to listen on, 1-65535.
SAP_MASTER_SYSTEMSystem context for on-prem create/update operations (system id), when no x-sap-master-system header states it.
SAP_RESPONSIBLEResponsible user for on-prem create/update operations, when no x-sap-responsible header (or x-sap-login) states it.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@mcp-abap-adt/compact-http20.0.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

原文在翻译后有更新,译文可能不是最新。

mcp-abap-adt 标志 mcp-abap-adt:通往 ABAP 开发工具(ADT)的入口

支持乌克兰

mcp-abap-adt 是一个用于 SAP ECC/S/4HANA(本地部署)和 SAP BTP ABAP Cloud 系统中 ABAP ADT 的 MCP 服务。它为 Agent 提供受控访问权限,使其能够通过 ADT 访问真实的 ABAP 仓库,让分析和更改以系统数据为依据,而非依赖假设。它专为 AI 辅助结对编程(AIPNV:AI 结对编程,而非凭感觉编码)打造,并非用于自动驾驶式的凭感觉编码。

主要工作流:

  • 深度 ABAP 分析:使用位置、对象元数据、仓库导航、对象结构、语义分析、依赖关系和影响范围探索。
  • 高阶 ABAP 开发:针对 RAP 和经典 ABAP 构件(类、接口、函数组/模块、程序、DDIC、CDS/视图/服务构件)快速执行 CRUD 和迭代更新,并通过 ADT 工作流验证。

团队采用它的原因:

  • 完整 CRUD(不只是只读):创建、读取、更新和删除 ABAP 构件
  • 支持 本地部署(ECC/S/4HANA) 和 ABAP Cloud(BTP) 系统
  • 目前不支持旧版系统(BASIS < 7.50):相关支持暂存于 parked/legacy-support 分支,等待有机会在真实旧版系统上进行测试
  • 四种身份验证方式:基本身份验证(HTTP 或 RFC)、SNC(无密码,RFC)、带浏览器登录的 JWT(服务密钥、ABAP 或 XSUAA)以及已有的 JWT
  • 多种传输方式:stdio、HTTP、SSE
  • 多种安装变体:完整服务(@mcp-abap-adt/core)或精简服务(@mcp-abap-adt/compact),每种都可通过 HTTP、RFC 或 SNC 连接系统 — 参见安装变体
  • 为 ABAP 对象、元数据、传输和搜索提供丰富的工具

授权与目标(重要): 目标是本地存储的服务密钥文件名。将服务密钥放入 service-keys 目录,并使用 --mcp=<destination> 选择要使用的密钥。这是本地部署和 BTP 系统的主要身份验证模型。参见身份验证与目标。

你可以手动配置 MCP 客户端(JSON/TOML),也可以通过配置器命令行工具(@mcp-abap-adt/configurator,仓库:mcp-abap-adt-conf)进行配置。

目录

  1. 开始使用
  2. 架构
  3. 快速入门
  4. 使用场景
  5. 目标用户
  6. 功能(高阶概述)
  7. 术语
  8. 授权与目标
  9. 注册表
  10. 功能
  11. 文档
  12. 依赖项
  13. 运行服务

开始使用

先选择一个变体 — 完整或精简服务,以及连接系统的方式:HTTP、RFC 或 SNC。HTTP 只需要 Node.js 22 或 24;RFC 和 SNC 需要在执行 npm install 之前,在计算机上安装 SAP NW RFC SDK 和 C++ 工具链,因为 RFC 模块会在安装过程中编译;若无法编译,该模块会被静默跳过。安装变体中列出了表格和命令;RFC 设置中列出了操作步骤。若要在没有 Node.js 的计算机上运行,请自行构建便携式可执行文件 — 其中包含 Node.js 和 SAP NW RFC SDK。

安装服务并使用配置器配置客户端:

npm install -g @mcp-abap-adt/core
npm install -g @mcp-abap-adt/configurator

# stdio (destination)
mcp-conf --client cline --name abap --mcp TRIAL

# HTTP (streamable HTTP)
mcp-conf --client copilot --name abap --transport http --url http://localhost:3000/mcp/stream/http --mcp trial

配置器完整用法(独立仓库):CLIENT_INSTALLERS.md。

术语

目标端:本地服务密钥文件名。将服务密钥存储在标准 service-keys 目录中,并通过 --mcp=<destination> 传入文件名(不含扩展名),以选择要使用的系统。

完整列表请参阅 docs/user-guide/TERMINOLOGY.md。

授权与目标端

默认使用基于目标端的身份验证。将服务密钥放入标准平台文件夹,并使用文件名作为目标端:

mcp-abap-adt --transport=stdio --mcp=TRIAL

标准服务密钥路径:

  • Unix(Linux/macOS):~/.config/mcp-abap-adt/service-keys/<destination>.json
  • Windows:%USERPROFILE%\\Documents\\mcp-abap-adt\\service-keys\\<destination>.json

服务支持且仅支持以下四种身份验证方式;每种方式都由服务密钥、.env 或两者共同指定一个目标端:

身份验证方式.env 键
Basic(HTTP 或 RFC)SAP_AUTH_TYPE=basic、SAP_USERNAME、SAP_PASSWORD
SNC(仅 RFC,无密码)SAP_AUTH_TYPE=snc、SAP_SNC_PARTNERNAME、可选的 SAP_SNC_QOP、SAP_SNC_LIB、SAP_SNC_MYNAME — 无用户、无密码
JWT,浏览器登录SAP_AUTH_TYPE=jwt、SAP_GRANT_TYPE=authorization_code、服务密钥(ABAP 或 XSUAA)或 SAP_UAA_*
你持有的 JWTSAP_AUTH_TYPE=jwt、SAP_GRANT_TYPE=none、SAP_JWT_TOKEN(或 x-sap-jwt-token 标头)

jwt .env 必须指定 SAP_GRANT_TYPE。用于写入此类 .env 的 mcp-auth 命令来自 @mcp-abap-adt/auth-broker-cli。浏览器登录会监听端口 61001,除非通过 --browser-auth-port 指定其他端口。

创建的对象始终会记录其负责人:依次采用工具自身参数中首次指定的值、 x-sap-responsible 标头、目标端自身 .env 中的 SAP_RESPONSIBLE,然后是进程 环境变量;否则采用登录用户:对于本地部署,使用目标端的 SAP_USERNAME、x-sap-url 连接的 x-sap-login 或进程的 SAP_USERNAME;对于云系统,仅使用系统用户。如果创建操作未找到负责人 (SNC、你持有的令牌),则会拒绝该操作并指出 SAP_RESPONSIBLE;不会发送任何内容 — 从 17.0.0 起,消息类也包括在内。主系统 来自 x-sap-master-system 或 SAP_MASTER_SYSTEM(目标端 .env,然后是进程环境变量)— 没有工具 会将其作为参数 — 否则来自云系统本身;若仍未提供,则不设置,由系统自行应用 — 不会因此拒绝操作。读取操作不受影响。进程环境变量只读取一次:服务器运行期间对其所做的更改不会生效。请参阅 身份验证与目标端。 从 17.x 升级?请参阅 18.0 迁移说明 — 调试器的 embedder 接口已移至 adt-clients 29,且启动调试器至少需要一个断点。从 16.x 升级,请先阅读 17.0 说明。

完整详情(路径、.env、直接标头)请参阅 身份验证与目标端。

架构

项目提供 两个软件包,每个软件包还有一个精简变体,因为两种使用模式需要不同的许可证。在网络服务中嵌入工具,不应因此承担一个该服务根本不会运行的服务器所带来的义务。

软件包许可证说明
@mcp-abap-adt/libApache-2.0ADT 工具处理程序和可嵌入的 MCP 服务。不含传输层:由宿主提供。
@mcp-abap-adt/coreAGPL-3.0-only独立服务——支持 stdio、SSE 和可流式传输的 HTTP,包含启动器和 mcp-abap-adt CLI。依赖该库。
@mcp-abap-adt/compactAGPL-3.0-only精简版独立服务 mcp-abap-adt-compact:每项操作提供一个工具,对象类型作为参数传入。启动器和配置与 core 相同。
@mcp-abap-adt/compact-readonly、compact-modifyApache-2.0作为库提供的精简工具,分为只读和可写两部分。

要运行服务,请安装 @mcp-abap-adt/core(或 @mcp-abap-adt/compact)。要在自己的应用中嵌入工具,请安装 @mcp-abap-adt/lib。

1. 独立 MCP 服务(默认)

通过 stdio、HTTP 或 SSE 传输方式运行独立 MCP 服务:

mcp-abap-adt                           # stdio (default)
mcp-abap-adt --transport=http          # HTTP mode
mcp-abap-adt --transport=sse           # SSE mode
2. 可嵌入服务(用于集成)

将 MCP 服务嵌入现有应用(例如 SAP CAP/CDS、Express)。 此方式只需 @mcp-abap-adt/lib——无需 AGPL 服务:

npm install @mcp-abap-adt/lib
import {
  EmbeddableMcpServer,
  NoDedupStrategy, // optional: expose both Read<X> and Get<X>
} from '@mcp-abap-adt/lib/embeddable';

const server = new EmbeddableMcpServer({
  connection,              // Your AbapConnection instance
  logger,                  // Optional logger
  exposition: ['readonly', 'high'],  // Handler groups to expose
  // Default hides Read<X> when Get<X> is exposed (ReadVsGetDedupStrategy).
  // Pass NoDedupStrategy to expose both variants instead.
  // readOnlyDedupStrategy: new NoDedupStrategy(),
});
await server.connect(transport);

有关如何将只读工具与 high/low 工具去重、如何使用 NoDedupStrategy 选择不去重,以及如何接入自定义 IReadOnlyDedupStrategy 来实现基于角色的规则,请参阅处理程序管理 → EmbeddableMcpServer 去重策略。

快速开始

  1. 安装服务:选择安装变体——完整或精简版、HTTP、RFC 或 SNC——并按照安装指南操作
  2. 配置客户端(自动):使用 @mcp-abap-adt/configurator 中的 mcp-conf(仓库:mcp-abap-adt-conf,文档:CLIENT_INSTALLERS.md)
  3. 配置客户端(手动):参阅客户端配置
  4. 使用:

使用场景

  • 变更前的影响分析/使用位置查询:梳理对象的使用情况和可能的影响范围。
  • 依赖项审计:检查类、接口、DDIC、CDS/视图和 RAP 工件之间的链接。
  • 迁移和清理准备:提取仓库信息,为重构或云就绪工作做规划。
  • RAP 和 ABAP 迭代开发:通过 ADT 支持的操作快速创建/更新工件。
  • 自动化文档编制和 RAG 数据摄取:从 ABAP 系统提取结构化信息,供下游工具使用。

目标用户

  • ABAP 开发人员和 ABAP 架构师
  • RAP 开发人员
  • 需要快速了解仓库情况的团队负责人和技术负责人
  • 为 SAP 环境构建 RAG/Agent 工作流的团队

功能(重点概览)

高价值工作流和工具示例:

  • 仓库与影响分析:GetWhereUsed、DescribeByList、GetObjectStructure、GetObjectInfo、SearchObject、GetPackageTree、GetPackageContents
  • 代码与语义内省:GetAbapAST、GetAbapSemanticAnalysis、GetIncludesList
  • RAP 开发:CreateBehaviorDefinition、UpdateBehaviorDefinition、CreateBehaviorImplementation、UpdateBehaviorImplementation、CreateServiceDefinition、UpdateServiceDefinition、CreateMetadataExtension、UpdateMetadataExtension
  • CDS/视图开发:CreateView、UpdateView、GetView、DeleteView
  • ABAP OO CRUD:CreateClass、UpdateClass、GetClass、DeleteClass、CreateInterface、UpdateInterface、GetInterface、DeleteInterface
  • 函数模块/组 CRUD:CreateFunctionGroup、UpdateFunctionGroup、GetFunctionGroup、DeleteFunctionGroup、CreateFunctionModule、UpdateFunctionModule、GetFunctionModule、DeleteFunctionModule
  • 传输与激活支持:CreateTransport、GetTransport、ActivateObject
  • 质量与测试:RunATC、GetATCRunStatus、GetATCFindings(ABAP Test Cockpit — 一次运行检查多个对象,按工作清单读取检查结果),按测试载体执行 ABAP Unit — 对类使用 CreateUnitTest/UpdateUnitTest/DeleteUnitTest/RunUnitTest,对 CDS 视图使用 CreateCdsUnitTest/RunCdsUnitTest,对报表使用 CreateProgramUnitTest/RunProgramUnitTest,对函数组使用 CreateFunctionGroupUnitTest/RunFunctionGroupUnitTest/RunFunctionModuleUnitTest(运行会等待结果;如果运行时间超过等待时限,可使用 GetUnitTestResult 获取结果)— CheckClass 及其他 Check* 系列工具

注册目录

已发布到官方 MCP 注册目录,并收录于 Glama.ai。

功能

  • 🏗️ 领域管理:GetDomain、CreateDomain、UpdateDomain - 创建、获取和更新 ABAP 域
  • 📊 数据元素管理:GetDataElement、CreateDataElement、UpdateDataElement - 创建、获取和更新 ABAP 数据元素
  • 📦 表管理:GetTable、CreateTable、GetTableContents - 创建和获取 ABAP 数据库表,并预览数据
  • 🏛️ 结构管理:GetStructure、CreateStructure - 创建和获取 ABAP 结构
  • 👁️ 视图管理:GetView、CreateView、UpdateView - 创建和管理 CDS 视图及经典视图
  • 🎓 类管理:GetClass、CreateClass、UpdateClass - 创建、获取和更新 ABAP 类
  • 📝 程序管理:GetProgram、CreateProgram、UpdateProgram - 创建、获取和更新 ABAP 程序
  • 🔧 行为定义(BDEF)管理:GetBehaviorDefinition、CreateBehaviorDefinition、UpdateBehaviorDefinition - 创建和管理 ABAP 行为定义,支持 Managed、Unmanaged、Abstract 和 Projection 类型
  • 📋 元数据扩展(DDLX)管理:CreateMetadataExtension、UpdateMetadataExtension - 创建和管理 ABAP 元数据扩展
  • ⚡ 激活:ActivateObject - 通用激活任意 ABAP 对象
  • 🚚 传输管理:CreateTransport、GetTransport - 创建和获取传输请求
  • 🔍 增强分析:GetEnhancements、GetEnhancementImpl、GetEnhancementSpot - 发现并分析增强
  • 📋 Include 管理:GetIncludesList - 递归发现 Include
  • 🔍 系统工具:GetInactiveObjects - 监控等待激活的非活动对象
  • 🌐 服务绑定预览:GetServiceBindingPreviewUrl - 打开已发布服务绑定的 Fiori 预览的浏览器 URL,以及其 OData 服务和 $metadata URL。该 URL 根据绑定、其服务定义和公开的根视图组合而成,并不包含在任何文档中。支持 OData V2 和 V4;Web API 绑定没有预览,并会对此作出说明。在 SAP BTP 上,预览 URL 使用浏览器主机(abap-web),由其处理 BTP 登录;服务 URL 则继续使用 ADT 主机
  • 🧪 运行时诊断:RuntimeCreateProfilerTraceParameters、RuntimeListProfilerTraceFiles、RuntimeGetProfilerTraceData、RuntimeGetDumpById - 使用 JSON 负载进行性能分析和转储分析
  • 📡 运行时订阅源:RuntimeListFeeds、RuntimeListSystemMessages、RuntimeGetGatewayErrorLog - 订阅源阅读器(转储 — 可按用户、运行时错误、异常、对象、包或组件筛选,并可读取超过 SAP 每次请求 100 条的限制 — 系统消息、网关错误)、SM02 系统消息、网关错误日志
  • 🐞 调试器(选择启用,--exposition=…,debug):ABAP 和 AMDP — 断点(行、异常、语句、消息;行断点可附带条件)、捕获断点的类或报表后台运行、其他用户的请求和终端模式、调用栈、变量、监视点、单步执行、让被调试对象继续运行、调试器设置、内存大小和快照。调试会话以 state_handle 命名,并可在每种传输方式的工具调用之间持续存在。在用户模式下,断点会捕获请求用户的每个请求(除非指定其他用户,否则即为已连接的 SAP 用户),因此默认不会启用断点集。请参阅调试器
  • 🚀 SAP BTP 支持:使用基于浏览器的令牌助手进行 JWT/XSUAA 身份验证
  • 🔑 基于目标的身份验证:基于服务密钥的身份验证,支持自动令牌管理(请参阅客户端配置)
  • 💾 自由格式 SQL:GetSqlQuery - 通过 ADT 数据预览 API 执行自定义 SQL 查询

ℹ️ ABAP Cloud 限制:SAP BTP 后端策略会阻止通过 ADT 直接预览数据库表数据。尝试执行此类操作时,服务会返回详细错误。在本地部署系统上,数据预览仍受支持。

文档

面向用户
面向管理员
  • 安全 - 安全性不会高于其宿主:谁可以调用服务、HTTPS、与 SAP 的 TLS 连接、凭据和状态句柄、部署检查清单
  • 部署文档 - MCP Registry、Docker、发行说明
  • 服务配置 - YAML 配置参考
面向开发者

依赖项

两个软件包负责实际工作:

还有六个软件包声明了这两个软件包及本项目所依据的契约:@mcp-abap-adt/interfaces-adt、-adt-connection(IAbapConnection 和 IAdtWireResponse 位于其中)、-network、-auth、-auth-sap 和 -utils。它们取代了单一的 @mcp-abap-adt/interfaces 总括包,该包已不再发布:直接指定某个契约包的使用者,依赖树中只会有它的一份副本,并且可以按领域逐一升级其主版本。

对 ADT 响应的判定是一种策略,而非默认行为:从 adt-clients 23 起,没有任何成员会自行判定其响应,@mcp-abap-adt/adt-strategies 保存了本项目传递给每次调用的判定逻辑。这可以防止 ADT 在 HTTP 200 响应中包含的拒绝信息——例如未能激活的激活操作,或被拒绝的删除操作——被当作成功返回给调用方。

以上所有内容都通过 npm install 安装,并发布到 npm。@mcp-abap-adt/sap-rfc-lite 是可选的,仅在使用 RFC 传输(因此也包括 SNC)时才需要。它会在 npm install 期间使用 SAPNWRFC_HOME 指定的 SAP NW RFC SDK 进行编译;如果无法编译,npm 会在不报错的情况下跳过它。使用 npm ls -g @mcp-abap-adt/sap-rfc-lite 检查。参见 RFC 设置。


运行服务

全局安装(推荐)

使用 npm install -g 全局安装后,你可以从任意目录运行:

# Show help
mcp-abap-adt --help

# Default stdio mode (for MCP clients; requires .env file or --mcp parameter)
mcp-abap-adt

# stdio mode (explicit; default when --transport is omitted)
mcp-abap-adt --transport=stdio

# HTTP mode on custom port (HTTP requires --transport=http)
mcp-abap-adt --transport=http --port=8080

# Use stdio mode with auth-broker (--mcp parameter)
mcp-abap-adt --transport=stdio --mcp=TRIAL

# Use env destination from platform sessions store
mcp-abap-adt --env=trial

# Use explicit .env file path
mcp-abap-adt --env-path=/path/to/my.env

# SSE mode (requires .env file or --mcp parameter)
mcp-abap-adt --transport=sse --port=3001

# SSE mode with auth-broker (--mcp parameter)
mcp-abap-adt --transport=sse --mcp=TRIAL

# The compact server takes the same options (npm install -g @mcp-abap-adt/compact)
mcp-abap-adt-compact --env-path=/path/to/my.env
开发模式
npm install
npm run build
npm test

仅凭此检出版本无法直接作为服务运行:server/ 将 @mcp-abap-adt/lib 作为软件包使用。要运行构建版本,请将两个软件包打包,并一并安装生成的 tarball——参见从源代码构建。

环境配置

环境变量解析:

  1. --env-path=<path|file>(或 MCP_ENV_PATH)用于指定 .env 文件。
    • 绝对路径:原样使用。
    • 相对路径或仅文件名(例如 my.env):从当前工作目录解析。
  2. --env=<destination> 用于指定标准会话存储目录中的目标文件:
    • Unix:~/.config/mcp-abap-adt/sessions/<destination>.env
    • Windows:%USERPROFILE%\\Documents\\mcp-abap-adt\\sessions\\<destination>.env

不会在工作目录中查找任何文件:在他人项目中启动的服务不得读取其设置。只有在指定文件名时(--env-path=./.env),才会读取其中的 .env 文件。

无论选择哪个文件,都会读取该文件,并在续期令牌后将其写回,无论 --unsafe 的设置如何。每个进程只读取一次目标文件:外部对其 .env 文件的更改会在重启后生效。.env 文件和环境变量用于保存机密信息及会话;YAML 配置文件仅保存配置,并会拒绝看起来像机密信息的键。

.env 文件示例:

SAP_URL=https://your-sap-system.example
SAP_CLIENT=100
SAP_AUTH_TYPE=basic
SAP_USERNAME=your-username
SAP_PASSWORD=your-password

对于已有的 JWT(SAP BTP):

SAP_URL=https://your-btp-system.example
SAP_CLIENT=100
SAP_AUTH_TYPE=jwt
SAP_GRANT_TYPE=none
SAP_JWT_TOKEN=your-jwt-token

对于 RFC 连接:

SAP_URL=http://your-onprem-system.example:8000
SAP_CLIENT=100
SAP_AUTH_TYPE=basic
SAP_USERNAME=your-username
SAP_PASSWORD=your-password
SAP_CONNECTION_TYPE=rfc

在 --env / --env-path 指定的 .env 文件中设置 SAP_CONNECTION_TYPE=rfc 可选择 RFC;--connection-type=rfc、进程环境变量和 YAML connection-type: rfc 也可以。优先级为:CLI,其次是进程环境变量(.env 中的值会加入进程环境变量,但不会覆盖已设置的值),最后是 YAML。使用 RFC 时,主机来自 SAP_URL,系统编号来自其端口(80NN → NN);如果端口不符合此规则,则需要在进程环境变量中设置 SAP_SYSNR。前置条件请参阅 RFC 设置指南(SAP NW RFC SDK、C++ 工具链,以及安装前设置 SAPNWRFC_HOME)。

对于 SNC(通过 RFC 无密码登录,不需要用户名或密码):

SAP_URL=http://your-onprem-system.example:8000
SAP_CLIENT=100
SAP_CONNECTION_TYPE=rfc
SAP_AUTH_TYPE=snc
SAP_SNC_PARTNERNAME='p:CN=<system>, O=<org>, C=<country>'
# Creates need a responsible person; over SNC no login is known
SAP_RESPONSIBLE=<your ABAP user>
# Optional: SAP_SNC_QOP, SAP_SNC_LIB, SAP_SNC_MYNAME

已安装的 SNC 产品(例如 Secure Login Client)的凭据会根据其 SNC 名称映射到 ABAP 用户。必须设置 SAP_CONNECTION_TYPE=rfc(或 --connection-type=rfc):SNC 仅通过 RFC 登录,不接受使用 HTTP 的 SNC 目标。SNC 需要 SAP NW RFC SDK 和 @mcp-abap-adt/sap-rfc-lite(可选依赖项);请参阅 RFC 设置。

16.0 起不再支持: .env 文件或服务密钥中的 SAP_AUTH_TYPE=certificate,以及 kerberos、saml 和除 authorization_code 与 none 之外的 jwt 授权类型,都会在启动时被拒绝,并指出具体的身份验证方式(没有授权类型的 saml 目标会提示:lacks: grantType)。请参阅迁移说明,了解替代方案。

生成 .env(JWT):

# Install the CLI globally (one-time setup) — it ships mcp-auth and mcp-sso
npm install -g @mcp-abap-adt/auth-broker-cli

# Write a .env that states its authentication and grant
mcp-auth generate-env --grant authorization_code   # `mcp-auth --help` lists the other flags

.env 必须声明 SAP_AUTH_TYPE 和 SAP_GRANT_TYPE;缺少授权类型的 jwt .env 会在启动时被拒绝。

**.env 注释规则:**仅支持整行注释(以 # 开头的行)。
不会解析行内注释,请将注释放在单独的行中。

**Claude 建议:**将服务密钥放在服务密钥目录中,并使用 --mcp=<destination>(避免手动使用 JWT 令牌)。

命令行选项

身份验证:

  • --mcp=<destination> - 命名目标:逐字段读取 service-keys/<destination>.json 和 sessions/<destination>.env
  • --auth-broker-path=<path> - 自定义 auth-broker 服务密钥和会话的路径
  • --browser=<name> - 登录时使用的浏览器:chrome、edge、firefox、system(默认)、headless、none
  • --browser-auth-port=<port> - 浏览器登录回调端口,范围为 1-65535(默认值:61001);无效值会导致启动被拒绝
  • --allow-destination-header - 接受 x-mcp-destination 标头(仅限 HTTP/SSE,默认关闭)
  • --connection-type=<http|rfc> - SAP 连接传输方式:http(默认)或 rfc
  • --unsafe - 将命名目标的会话写入磁盘。默认情况下,会话保存在内存中(每个进程登录一次)。无论是否启用此选项,都会将你指定的 .env 写回

指定 --mcp=<destination> 时,会跳过自动回退加载 ./.env。

示例:

# Named destination, session kept in memory (default)
mcp-abap-adt --mcp=TRIAL

# Named destination, session persisted to sessions/TRIAL.env
mcp-abap-adt --mcp=TRIAL --unsafe

# Custom base directory for service-keys/ and sessions/
mcp-abap-adt --mcp=TRIAL --auth-broker-path=~/prj/tmp/ --unsafe

# Browser login on another callback port
mcp-abap-adt --mcp=TRIAL --browser-auth-port=61005

完整配置选项请参阅客户端配置。

处理程序日志开关
  • AUTH_LOG_LEVEL=error|warn|info|debug — 设置处理程序日志记录器的基础日志级别;DEBUG_AUTH_LOG=true 也会启用 debug。
  • HANDLER_LOG_SILENT=true — 完全禁用处理程序日志记录。
  • DEBUG_CONNECTORS=true — 在高级处理程序中启用详细的连接日志。
  • DEBUG_HANDLERS=true — 为选定的只读/系统处理程序启用详细日志。

开发

测试
npm test
测试日志开关
  • TEST_LOG_LEVEL=error|warn|info|debug — 控制测试日志记录器的详细程度(DEBUG_TESTS/DEBUG_ADT_TESTS/DEBUG_CONNECTORS 会强制设为 debug)。
  • TEST_LOG_FILE=/tmp/adt-tests.log — 将测试日志写入文件(尽力而为)。
  • TEST_LOG_SILENT=true — 禁用测试日志管道(静默控制台输出)。
  • TEST_LOG_COLOR=true — 为测试日志行添加彩色/带前缀的标签。
  • 测试中的所有 console.* 都会通过测试日志记录器输出,并带有 [test] 前缀。
构建
npm run build
开发者工具
# Generate tool documentation
npm run docs:tools

# See tools/README.md for more developer utilities

贡献者

感谢所有贡献者!完整名单请参阅 CONTRIBUTORS.md。


致谢:本项目最初受到 mario-andreschak/mcp-abap-adt 的启发。我们从其核心概念出发,随后将其发展为一个拥有自身架构和功能的独立项目。

许可证

两个包,两种许可证。 适用哪种许可证取决于你安装哪个包。

包许可证
@mcp-abap-adt/libApache-2.0LICENSE、NOTICE
@mcp-abap-adt/coreAGPL-3.0-onlyserver/LICENSE

这两个包都通过一条命令从此仓库发布,并按依赖要求的顺序进行:

npm run release:dry        # rehearses both, touches nothing
npm run release:publish    # @mcp-abap-adt/lib, then @mcp-abap-adt/core

release:publish 会跳过已在注册表中的版本,因此失败后重新运行会从中断处继续,而不是从头开始。如果遇到第一个失败,它会立即中止,不会在尚未发布的库之上发布服务。

请注意,npm publish 和 npm run 是不同的命令。npm publish release 会要求 npm 发布一个名为 release 的包,而注册表上这个包属于别人。

版权所有 © 2025–2026 Oleksii Kyslytsia

分发这两个包都是希望它们能有所帮助,但不提供任何担保;甚至不隐含担保其适销性或适用于特定用途。

这意味着什么。 在你自己的数据上运行任一包,都不附带任何条件。

将库嵌入你自己的应用,不会产生开源应用的义务:Apache-2.0 要求随应用一并提供声明和许可证文本,仅此而已。

分发独立服务,或将其修改版作为网络服务运行,意味着要依照 AGPL 第 13 条,向他人提供相同的自由,包括源代码。这就是将它们拆分为两个包的原因:安装库不会将服务加入你的依赖树。

底层的包采用 LGPL-3.0-only 许可证——@mcp-abap-adt/adt-clients、adt-strategies、connection、logger、auth-broker、auth-providers、auth-stores 以及契约包 interfaces-adt、interfaces-adt-connection、interfaces-network、interfaces-auth、interfaces-auth-sap 和 interfaces-utils——而且该库会在运行时链接这些包。撰写本段时,这样的包有四个;如今规则适用于整个范围:库采用 LGPL,服务采用 AGPL 或 GPL,而少数认证包仍带有的 MIT 许可证只是疏忽,并非有意提供的许可。LGPL 不会延伸到你自己的代码,但无论本项目采用何种许可证,这些包的条款都会随包一并适用。请据此做好规划,而不是只看此仓库的声明。

也可以采用其他条款。 Apache-2.0 是该库公开提供时采用的许可证,但不是唯一可采用的许可证。版权所有者可以单独向需要不同条款的一方授权同一份代码;这不会影响任何已依据 Apache-2.0 获得代码的人,因为该授权永久有效。CONTRIBUTORS.md 记录了如何保留这一选项,包括绝不将底层包中的 LGPL 代码复制到此代码树中的规定。

历史。 8.13.0 及之前的版本采用 MIT 许可证,并将继续采用 MIT 许可证;9.x 采用 GPL-3.0-only。许可证变更不具有追溯效力——任何人仍可依据早期版本所附带的许可证使用该版本。有关重新授权如何合法进行的完整说明,请参阅 CONTRIBUTORS.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。