mcpField
M
mcp-abap-adt-compact-sse

mcp-abap-adt-compact-sse

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

关于 mcp-abap-adt-compact-sse

mcp-abap-adt-compact-sse 是供 Agent 检查 SAP ECC/S/4HANA 和 SAP BTP ABAP Cloud 仓库的紧凑型 MCP 服务。它通过 HTTP+SSE 工作,并从请求标头接收 SAP 凭据。

主要功能

  1. 01紧凑型 ABAP 工具集
  2. 02检查 ABAP 对象和元数据
  3. 03仓库搜索与导航
  4. 04从 x-sap-* 标头读取凭据

适用场景

  1. 01通过 SSE 分析 ABAP 仓库
  2. 02检查对象结构和依赖关系
  3. 03为每个 SSE 连接提供标头凭据

MCP 相关

通过 HTTP+SSE 向 MCP 客户端提供紧凑型 ABAP 工具。凭据由 SSE 连接的 x-sap-* 标头传入。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"fr0ster-mcp-abap-adt-compact-sse": {
"command": "npx",
"args": [
"-y",
"@mcp-abap-adt/compact-sse"
],
"env": {
"SAP_SYSTEM_TYPE": "<SAP_SYSTEM_TYPE>",
"MCP_SSE_HOST": "<MCP_SSE_HOST>",
"MCP_SSE_PORT": "<MCP_SSE_PORT>",
"SAP_MASTER_SYSTEM": "<SAP_MASTER_SYSTEM>",
"SAP_RESPONSIBLE": "<SAP_RESPONSIBLE>"
}
}
}
}
启动命令npx -y @mcp-abap-adt/compact-sse
需要配置的环境变量
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_SSE_HOSTHost to listen on: 127.0.0.1 (this machine only) or 0.0.0.0 (every interface).
MCP_SSE_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-sse20.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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。