关于 ARC-1
ARC-1 是通过 ADT REST API 将 AI 助手连接到 SAP ABAP 系统的 MCP 服务,面向需要管控式 AI 辅助 SAP 开发的组织。它提供可配置的访问限制、多种身份验证方式,并可部署在 BTP 或本地环境。
主要功能
- 01管控 SAP 读取与写入操作
- 02提供 12 个意图型工具
- 03支持多种身份验证方式
- 04支持 BTP 与本地部署
- 05缓存 SAP 源码
适用场景
- 01检查和编辑 SAP ABAP 对象
- 02查看依赖关系与对象用法
- 03通过 BTP 将 AI 客户端接入 SAP
- 04按软件包和操作限制 SAP 写入
MCP 相关
ARC-1 通过 12 个工具向 MCP 客户端提供 SAP ABAP 操作和上下文。它支持 MCP 客户端使用 API 密钥和基于 OAuth 的身份验证流程。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y arc-1SAP_URLSAP system URL (e.g., http://host:50000)SAP_USERSAP usernameSAP_PASSWORD密钥SAP passwordSAP_CLIENTSAP client numberSAP_LANGUAGESAP logon languageSAP_INSECURESkip TLS certificate verificationSAP_ALLOW_WRITESAllow ABAP object mutations (safe default: false)SAP_TRANSPORTMCP transport (Docker defaults to http-streamable, set to stdio for local MCP clients)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
9收录的工具列表 · 更新于 5 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| to | string | 否 | action="diff" 的 NEW 侧(默认 "inactive" = 待激活的更改)。与 from 的取值相同。 |
| from | string | 否 | action="diff" 的 OLD 侧:"active"(默认)、"inactive"、来自 SAPRead(type="VERSIONS") 的修订 ID,或 /sap/bc/adt/ 修订 URI。 |
| grep | string | 否 | 用于在对象源代码中搜索的正则表达式(不区分大小写)。仅返回匹配行及其 1-based 行号和 ±3 行上下文,而不返回完整源代码,以节省 token。对于 CLAS,匹配结果会标注所属类/方法;可结合 include= 限定范围,但不要与 method= 组合使用(先用 grep 查找,再用 method= 读取)。适用于带源代码的类型(CLAS、INTF、DDLS、DCLS、BDEF、SRVD、SRVB、SKTD/KTD、DDLX、TABL、PROG、FUNC、FUGR、INCL、VIEW)。如果模式不是有效的正则表达式,则退回到字面搜索。 |
| name | string | 否 | 对象名称(例如 ZTEST_PROGRAM、ZCL_ORDER、MARA) |
| type | enum | 是 | 对象或元数据类型。TABL 包含 DDIC 结构;KTD 是 SKTD(知识传输文档)的别名。SYNTAX 检查 objectType+name。服务器驱动型对象使用由发现机制门控的 XML 元数据和 AFF JSON 源码(DTSC/DSFD/DTDC/DRTY 使用 DDL 文本)。DESD 逻辑外部架构;EVTB 事件绑定;EVTO 事件对象;CSNM CSN 模型;COTA 通信目标;DTSC 静态缓存;DTDC 动态缓存;DSFD 标量函数;UIAD launchpad 描述符;DRTY CDS 类型;APLO 日志对象;SAJC/SAJT 作业目录/模板。已弃用:MESSAGES→MSAG。FTG2→FEATURE_TOGGLE。ENQU 锁对象以 JSON 格式返回。PROG | CLAS | INTF | FUNC | FUGR | INCL | DDLS | DCLS | DDLX | BDEF | SRVD | SRVB | SKTD | KTD | TABL | VIEW | DOMA | DTEL | TRAN | TTYP | ENQU | TABLE_CONTENTS | TABLE_QUERY | DEVC | SOBJ | SYSTEM | COMPONENTS | MSAG | MESSAGES | TEXT_ELEMENTS | VARIANTS | BSP | BSP_DEPLOY | API_STATE | INACTIVE_OBJECTS | SYNTAX | AUTH | FEATURE_TOGGLE | FTG2 | ENHO | VERSIONS | VERSION_SOURCE | DESD | DTSC | CSNM | EVTB | EVTO | COTA | DSFD | DTDC | UIAD | DRTY | APLO | SAJC | SAJT |
| group | string | 否 | 用于 FUNC、VERSIONS 或 objectType=FUNC 的 API_STATE 的函数模块功能组。省略时通过 SAPSearch 自动解析。 |
| where | array | 否 | 对于 TABLE_QUERY:结构化 WHERE 条件,条件之间使用 AND 连接。每项:{field, op, value?}。运算符:=、<>、<、<=、>、>=、LIKE、NOT LIKE、IN、NOT IN、IS NULL、IS NOT NULL;758 会拒绝 !=,因此请使用 <>。对于 IN/NOT IN:使用不带引号、以逗号分隔的值。请勿给它们加引号。ARC-1 会为值加引号并转义,例如 "261,262"。不支持子查询。示例:[{"field":"MATNR","op":"=","value":"300006888"},{"field":"BUDAT_MKPF","op":">=","value":"20250101"}]。 |
| action | enum | 否 | 设为 "diff",以生成两个源码版本之间的统一差异(使用 from/to)——比获取两个源码更省成本。仅支持以下源码类型:PROG、CLAS、INTF、FUNC、FUGR、INCL、DDLS、DCLS、BDEF、SRVD、DDLX、TABL。diff |
| format | enum | 否 | 默认:text。editable:用于受保护 SAPWrite 的新鲜 {source, sourceHash};省略 version/method/grep,选择 CLAS include。structured:CLAS 元数据+includes、DEVC {objects,listing},或 action=diff JSON。DEVC text 返回数组及其后的 listing 元数据;diff text 返回补丁。text | structured | editable |
| method | string | 否 | 对于 CLAS:读取某个方法(例如 "get_name"、"zif_order~process"、"lhc_travel~accept"),或使用 "*" 列出方法。未指定 include= 时,lhc_*/lcl_* 使用 implementations,ltc_* 使用 testclasses,其他名称使用 MAIN;显式指定 include= 时优先。对于 SOBJ:要读取的 BOR 方法名称。省略时返回完整的 BOR 方法目录。其他类型不使用此参数。 |
| source | string | 否 | 仅适用于 SYNTAX:待检查的源码,不会保存。省略则检查已存储的版本(默认检查 active;inactive 检查 draft)。对象必须存在;不支持 version=auto。 |
| columns | array | 否 | TABLE_QUERY 用:要 SELECT 的列(默认:全部)。示例:["MATNR","BWART","BUDAT","MENGE"]。 |
| include | string | 否 | CLAS:省略 include 或使用 main 表示全局声明+实现;definitions/implementations 选择本地辅助类,macros/testclasses 选择各自的部分。显式 include 优先于按 method 自动路由。对于 DDLS:使用 include="elements" 获取 CDS 字段目录(键字段、别名、关联、表达式类型),而非原始 DDL。对于 VERSIONS(CLAS):include 选择要查询的类 include 历史记录(main、definitions、implementations、macros、testclasses)。BSP:区分大小写的路径;name 也可以是 APP/path。TEXT_ELEMENTS:symbols|selections|headings;省略则使用 pool(CLAS:symbols)。 |
| maxRows | number | 否 | TABLE_CONTENTS/TABLE_QUERY 的行数上限(默认 100,最大 10,000;可能会先达到字节数限制)。在 758 上,TABLE_CONTENTS 返回 N+1 行;要精确限制行数,请使用 TABLE_QUERY。 |
| toLabel | string | 否 | action="diff" 中可选的显示标签,用于摘要和补丁标头中的新侧,例如 "active" 或 "inactive draft"。不影响源码解析。 |
| version | enum | 否 | 源码默认使用 active;inactive 请求 draft(若无 draft,SAP 可能返回 active);auto 选择 developer view。DTEL/ENQU/服务器驱动型类型默认使用 developer view。如果 SAP 无法确认显式指定的版本(例如没有 draft),服务器驱动型类型会返回错误。active | inactive | auto |
| fromLabel | string | 否 | action="diff" 中可选的显示标签,用于摘要和补丁标头中的旧侧,例如 "DNT-6-6: Validate discounts (DS7K900123)"。不影响源码解析。 |
| sqlFilter | string | 否 | 仅适用于 TABLE_CONTENTS 的条件表达式(不含 WHERE、SELECT);在 758 上不可用(SAP 需要 SELECT)。请改用 TABLE_QUERY 的 where。 |
| maxResults | number | 否 | DEVC 对象数量限制(默认 200,限制在 [1, 1000] 范围内)。Listing 元数据会报告生效的限制和可能的截断情况。总数和完整存储库是否完整仍未知。 |
| objectType | string | 否 | SYNTAX:必需的存储库类型(例如 CLAS、PROG、DDLS)。API_STATE:省略时推断。VERSIONS:type 选择端点;根据 CL_/IF_/CX_ 推断,否则为 PROG。TEXT_ELEMENTS:PROG(默认)、CLAS 或 FUGR。 |
| versionUri | string | 否 | VERSION_SOURCE:来自 VERSIONS .revisions[].uri 的规范源码/修订 URI;拒绝无关的 ADT 端点、绝对 URL、路径遍历、查询参数和片段。 |
| force_refresh | boolean | 否 | 对于源码读取:读取前绕过缓存的源码和 inactive 列表状态。已知对象在 ARC-1 之外发生更改时使用。 |
| expand_includes | boolean | 否 | 仅适用于 FUGR 类型。为 true 时,递归展开函数组 include 树——主源码以及所有嵌套 INCLUDE(FUNCTION...ENDFUNCTION 主体位于嵌套的 LZ<grp>U01/U02 include 中,因此只遍历一层会遗漏它们)。每个代码块前都有一个 "=== name ===" 标记;深度和数量均有限制。不包括 Dynpro 和 GUI 状态(ADT 不会通过 REST 提供这些内容)。 |
| includeSignature | boolean | 否 | 仅适用于 FUNC 类型。为 true 时,响应为 JSON:{source, signature: {importing[], exporting[], changing[], tables[], exceptions[], raising[]}, processingType?, updateTaskKind?}——每个参数都会解析为 {kind, name, type, byValue?, default?, optional?};processingType 报告 rfc/update/normal。默认 false(返回纯源码正文)。 |
详细介绍
ARC-1 — SAP ADT MCP 服务
ARC-1(读作 arc one [ɑːrk wʌn])——面向企业的 SAP ABAP 系统 MCP 服务。默认安全,可部署到 BTP 或本地环境,并通过大量单元、集成和端到端测试强化可靠性。
ARC-1 通过 ADT REST API 将 AI 助手(Claude、GitHub Copilot、Copilot Studio 以及任何 MCP 客户端)连接到 SAP 系统。它以 npm 包和 Docker 镜像的形式发布。
完整文档 | 快速入门 | 工具参考 | ARC-1 更新 | 博客系列
📬 了解 ARC-1 最新动态——获取重大版本发布、升级和安全说明、实用指南,以及偶尔征集反馈的问题,您的反馈或许能影响未来的发展。订阅 ARC-1 更新 →
📖 全新:AI ABAP 开发博客系列——深入探讨 ABAP AI 应用、ARC-1 设计,以及 BTP / Copilot Studio / Joule 的真实场景实践。阅读系列文章 →
为什么选择 ARC-1?
专为需要在安全防护下开展 AI 辅助 SAP 开发的组织打造。ARC-1 的灵感来自 abap-adt-api、mcp-abap-adt 和 vibing-steampunk 的开创性工作,并在此基础上加入生产环境运行所需的功能:
安全与管理员控制
- 默认安全 — 只读,不允许自由 SQL、不提供表预览、不允许通过传输写入,也不允许 Git 写入。使用显式的
SAP_ALLOW_*标志启用各项能力 - 操作拒绝列表 — 使用
SAP_DENY_ACTIONS屏蔽特定工具操作(例如SAPWrite.delete),无需向管理员暴露底层操作代码 - 软件包限制 — 将 AI 写入操作(创建、更新、删除)限制在特定软件包中,支持通配符(
--allowed-packages "Z*,$TMP")。读操作不受软件包限制——请使用 SAP 原生授权控制读取权限 - 数据访问控制(默认关闭) — 表预览、已保存的 SAPscript 文本和 SLG1 消息需要
SAP_ALLOW_DATA_PREVIEW=true;自由形式的 SQL 则需要单独设置SAP_ALLOW_FREE_SQL=true。请根据 SAP API Policy、SAP 协议和内部数据治理规则,审查已启用的用法。 - 实验性数据源紧急制动 — 经批准的数据/SQL 部署可设置
SAP_BLOCKED_DATA_SOURCES=USR02,PA0002。ARC-1 随后会解析每个 SQL 请求,并在执行前解析活动 CDS 及替换对象的沿袭关系,拒绝直接或传递的精确名称匹配;若沿袭关系不受支持或无法证实,则默认拒绝。默认值为空,不会增加元数据调用。此拒绝列表属于纵深防御,不是生产环境的允许列表,也不能替代 SAP 授权/CDS DCL;详见授权与角色。 - 传输安全 — 可读取传输内容以供审查;修改传输则必须同时设置
--allow-writes和--allow-transport-writes。如果未显式指定传输,更新/删除操作会自动使用锁定更正编号 - Git 工作流安全 — 默认禁用 Git 操作。使用
--allow-git-writes/SAP_ALLOW_GIT_WRITES=true显式启用 - API 密钥配置文件 — 多密钥 HTTP 部署可为每个密钥分配
viewer、viewer-data、viewer-sql、developer、developer-data、developer-sql或admin - 启用写入时仅允许写入
$TMP— 仅允许本地/临时对象;要写入可传输的软件包,必须显式设置--allowed-packages - 默认启用 HTTP 安全标头(helmet) — HSTS、CSP、X-Frame-Options、CORP、X-Content-Type-Options。特意不设置 COOP,以确保基于弹出窗口的 OAuth 流程(Copilot Studio)正常运行。没有禁用标志。
- 浏览器 MCP 客户端可选择启用 CORS —
ARC1_ALLOWED_ORIGINS(以逗号分隔,精确匹配)。默认关闭;原生 MCP 客户端无需此设置 - 分层速率限制 — 开箱即用,包含三层:按 IP 限制 OAuth 和共享 MCP HTTP 边缘流量(第 1 层;MCP 继承历史派生上限,除非
ARC1_MCP_HTTP_RATE_LIMIT覆盖该值)、按用户限制 MCP 配额(第 2 层,默认关闭——多用户部署可通过ARC1_RATE_LIMIT=60启用),以及服务器范围的 SAP 并发信号量(第 3 层,默认值为 10,已启用)。遵循 SAP / BTP 网关对 429/503 响应中的Retry-After。详见速率限制指南 - 供应链安全 — Dependabot(npm + GitHub Actions + Docker,每周运行,并处理当天发布的安全公告)、
npm audit --audit-level=highPR 门禁、每个 PR 的 GitHub Dependency Review、CodeQL SAST、Trivy 容器扫描(定期执行多架构 HIGH/CRITICAL 门禁,并进行公告发布时及开发期间的扫描);所有第三方 GitHub Actions 均固定到提交 SHA;SECURITY.md策略按严重程度设定 SLA。镜像和 npm 软件包均附带来源证明,发布工作流还会尽力为生产环境的 npm 依赖关系图发布 CycloneDX SBOM。详见安全指南 §13
身份验证
- API key — 用于内部部署的简单 Bearer 令牌
- OIDC / JWT — Entra ID、Keycloak 或任何 OpenID Connect 提供商
- OAuth 2.0 — 基于本地浏览器的登录,用于 BTP ABAP Environment 服务密钥开发
- XSUAA — SAP BTP 原生身份验证,为 MCP 客户端自动提供令牌代理
- 按用户 SAP 身份 — BTP Destination Service 将 MCP 用户转发到 SAP:对于本地部署的 SAP,使用 Cloud Connector 主体传播;对于 BTP ABAP Environment,使用
OAuth2UserTokenExchange
BTP Cloud Foundry 部署
将 ARC-1 部署为 SAP BTP 上的 Cloud Foundry 应用,并实现完整的平台集成:
- Destination Service — 通过托管目标连接到 SAP 系统
- 实验性多目标模式 — 默认关闭的 BTP 模式会发现标记为
arc1.enabled=true的目标,并公开固定 SID/客户端及只读聚合端点; 限定范围的固定 PP 写入 需要单独启用目标/IAM (设置, 管理) - 可选目标筛选 — 适用于团队需要不同目标列表的共享多系统网关。通过 XSUAA 角色分配系统/客户端; IAS 更改为可选操作。此功能仅筛选通过 IAM 分配的目标,不会自动发现 SAP 账户。
- Cloud Connector — 通过连接代理访问本地部署的系统
- 按用户目标 — 对于本地部署的 SAP,通过 X.509 证书端到端转发用户身份;对于 BTP ABAP Environment,则将其交换为 ABAP Bearer 令牌
- XSUAA OAuth 代理 — MCP 客户端通过标准 OAuth 进行身份验证,ARC-1 负责 BTP 令牌交换
- 审计日志 — 将结构化事件写入 stderr、文件或 BTP Audit Log Service
令牌效率
- 12 个基于意图的工具,取代 200 多个独立工具 — 简化工具选择;通过 CI 预算控制架构载荷,并提供专为紧凑上下文窗口设计的超聚焦 1 工具模式
- 按方法读取/编辑 — 读取或更新单个类方法,而不是整个源代码(最多减少 20 倍令牌)
- 聚焦源代码和依赖项上下文 — 使用有针对性的
SAPRead获取准确的实现行为。对于业务目的、审查或测试设计,先使用SAPContext(action="deps", type=..., name=...)查找可用的知识转移文档(SKTD/KTD)和依赖项契约,然后将需求与源代码进行比较。若没有已记录的需求,则意图未经验证。
内置对象缓存
- 由服务端验证的源代码缓存 — 每次读取 SAP 对象都会将其缓存在内存(stdio)或 SQLite(http-streamable)中。重复读取会使用
If-None-Match/ETag 条件 GET;SAP 确认304 Not Modified后,未更改的对象便会从缓存返回。 - 复用依赖项解析结果 — 未更改且已授权的源代码可以复用内存中的已解析依赖项和契约。不会缓存聚合依赖关系图;SAP 授权和源代码验证仍会执行。
- 感知 KTD 的上下文 — 知识转移文档使用源代码缓存,并在组合到
SAPContext(action="deps")时重新验证。 - 实时 where-used 查询 —
SAPContext(action="usages")和 CDS 影响分析会使用调用者的身份查询 SAP 当前的仓库索引;无需在启动时扫描仓库。 - 活动/非活动源代码视图 —
SAPRead接受version="active" | "inactive" | "auto";如果活动源代码存在尚未激活的草稿,则会发出警告。 - 写入失效 —
SAPWrite或SAPActivate修改对象时,会清除活动和非活动源代码缓存条目;下次读取时会重新验证或获取最新源代码。
完整文档请参阅 docs/caching.md。
测试
- 3,474 个单元测试(
104个单元测试文件,HTTP 请求均已模拟) - 默认集成测试配置文件包含 262 个测试,针对在线 SAP 系统运行;缺少凭据或测试夹具时会明确说明跳过原因
- 默认 E2E 测试配置文件包含 141 个测试,针对正在运行的 ARC-1 服务和在线 SAP 系统执行真实的 MCP 工具调用
- 手动慢速 SAP 配置文件将广泛的 where-used、RAP 全栈和递归 CTS 发布覆盖排除在 PR 流程之外(
test:integration:slow、test:e2e:slow、GitHub SAP 慢速测试工作流) - 包含 CRUD 生命周期和 BTP 冒烟测试通道(
test:integration:crud、test:integration:btp:smoke) - CI 矩阵覆盖 Node
22和24;在线 SAP 集成测试和 E2E 测试会在内部 PR 和手动触发时运行,文档/杂项 PR 和外部 fork 不会运行 SAP 任务 - 可靠性遥测和覆盖率作为信息性 CI 信号发布(不阻塞流程)
为真实场景打磨的工具
这 12 个工具基于真实 LLM 交互反馈设计:
| 工具 | 功能 |
|---|---|
| SAPRead | 读取精确的 ABAP 源代码、方法体、grep 匹配项、表数据、CDS 视图、访问控制(DCLS)、元数据扩展(DDLX)、服务绑定(SRVB)、知识传递文档(SKTD 或友好别名 KTD)、消息类(MSAG)、修订历史(VERSIONS/VERSION_SOURCE)、非活动对象状态、BOR 对象、已部署的 UI5/Fiori 应用(BSP、BSP_DEPLOY),以及 ABAP Platform 2025 服务端驱动对象(DESD、EVTB、EVTO、DTSC、CSNM、COTA)。对于“这个对象有什么作用?”,请先使用 SAPContext,再使用 SAPRead 获取精确源代码。增强实现(ENHO)在本地部署和 BTP 上均可读取;授权字段(AUTH)和功能开关(FEATURE_TOGGLE)仅支持本地部署。类的结构化格式会以 JSON 返回元数据和拆分后的 include。可选的 grep 正则表达式只返回匹配的源代码行(附带上下文;对于类还会标注方法),以节省搜索用量。(在一个次要版本中仍接受已弃用的别名 MESSAGES/FTG2。) |
| SAPSearch | 在系统中搜索对象和源代码全文 |
| SAPWrite | 创建/更新/删除 ABAP 源代码和 DDIC 元数据,并自动加锁/解锁(PROG、CLAS、INTF、FUNC、FUGR、INCL、DDLS、DCLS、DDLX、BDEF、SRVD、SRVB、SKTD/KTD、TABL、DOMA、DTEL、MSAG;可用性会根据 BTP 情况调整)。类更新可针对本地 include(definitions、implementations、macros、testclasses);类区段编辑(edit_class_definition、add_method、edit_method_signature、delete_method、change_method_visibility)允许 LLM 编辑全局类签名,而无需重新发送 /source/main;RAP 行为池框架代码可在注入签名/存根前自动创建 lhc_* 框架。批量创建支持在末尾激活,以用于相互依赖的多对象工作流(例如,在一次调用中创建 RAP 堆栈,或创建域和数据元素) |
| SAPActivate | 激活 ABAP 对象——支持单个或批量操作(对 RAP 堆栈至关重要),并针对 S/4HANA ED064 批处理异常提供带保护的重试。发布/取消发布 OData 服务绑定(SRVB) |
| SAPNavigate | 跳转到定义、查找引用、代码补全 |
| SAPQuery | 读取已保存的 SAPscript 长文本或执行 ABAP SQL;每种路径都需要单独启用 |
| SAPTransport | CTS 传输管理(列出/获取/创建/释放/删除/重新分配/递归释放)、传输层/目标查询、软件包传输要求检查,以及反向查询历史记录(action="history") |
| SAPGit | 基于 Git 的 ABAP 工作流,支持 gCTS 和 abapGit(列出/克隆/拉取/推送/提交/分支/取消关联),并自动选择后端且设有安全门控(--allow-git-writes) |
| SAPContext | 依赖关系 API(action="deps"):可选的 KTD 加上有界的、从源代码推导的契约,并非完整的关系清单。还支持实时使用位置查询(action="usages")、CDS 影响分析(action="impact")以及 TABL includes/附加结构(action="structure") |
| SAPLint | 本地 ABAP lint(感知系统/版本的预设、自动修复、写入前验证)+ ADT PrettyPrint(服务端格式化) |
| SAPDiagnose | 语法检查、ABAP Unit 测试、ATC 代码质量检查、CDS 测试用例建议、活动/非活动对象状态比较、通用 ADT 快速修复建议/应用差异、网关/系统消息诊断、短转储、性能分析器跟踪,以及本地部署的授权跟踪(SUAUTHVALTRC,需启用数据预览) |
| SAPManage | 功能探测、缓存统计、软件包生命周期/更改软件包操作,以及 FLP 目录/组/磁贴辅助工具 |
工具定义会自动适配目标系统(BTP 或本地部署),移除不可用类型并调整说明,以确保 LLM 不会尝试不受支持的操作。
功能检测
ARC-1 会在启动时探测 SAP 系统并调整自身行为:
- 检测 HANA、gCTS、abapGit、RAP/CDS、AMDP、UI5 和传输功能是否可用
- 自动检测系统是 BTP 还是本地部署
- 根据 SAP_BASIS 版本映射到正确的 ABAP 语言版本
- 每项功能都可以强制启用、强制关闭,或设为自动检测
- 在共享凭据模式(技术用户)下,启动时只运行一次身份验证预检;如果出现 401/403,则阻止 SAP 工具调用并显示明确错误,以避免重复登录失败和潜在的用户锁定
ADT API 状态与策略
对于 ARC-1 这类自定义 MCP 服务,我们建议将 SAP 的 第三方 MCP 访问参考架构 作为主要设计和控制基线。对于共享服务,请从 BTP Cloud Foundry、XSUAA 和严格的主体传播入手。SAP 的 API 政策常见问题 Q56 允许在特定条件下使用自定义 MCP 服务;Q32 确认 Integration Suite 并非强制要求。
SAP API 政策与架构一致性 说明 了这一路径、ARC-1 已支持的控制措施以及剩余差距。常见问题 Q33 将 ADT API 归类为内部 API,并将其使用范围限制在认可的开发渠道;ARC-1 的直接 TypeScript ADT 客户端 并未被明确认定为此类渠道。采用前,请与 SAP 确认该渠道以及预期的 AI 辅助开发用途,包括开发和测试环境。仅托管在 BTP 上并配置安全控制,并不能证明完全符合政策。按用户使用 SAP 身份适用于 PP;共享 Basic 模式则保留共享的 SAP 身份。
ARC-1 的两项功能可能会暴露业务数据或执行临时 SQL。两者均为默认关闭,且需要明确设置 opt-in 环境变量,因此操作员必须先有意识地作出决定,这些功能才会开放访问:
| 功能 | 环境变量 | 默认值 | 政策说明 |
|---|---|---|---|
表预览(SAPRead(type=TABLE_CONTENTS/TABLE_QUERY))、已保存的 SAPscript 文本和 SLG1 消息(SAPQuery 操作 long_text / application_log) | SAP_ALLOW_DATA_PREVIEW=true | false(关闭) | 读取应用程序数据;经过身份验证的调用方还需要 data 作用域。 |
自由格式 ABAP SQL(SAPQuery(action=sql)) | SAP_ALLOW_FREE_SQL=true | false(关闭) | 执行临时 ABAP SQL;经过身份验证的调用方还需要 sql 作用域。 |
| 精确源代码阻止列表(实验性) | SAP_BLOCKED_DATA_SOURCES=USR02,PA0002 | 空(关闭) | 拒绝精确匹配的直接或传递表依赖项或 CDS 依赖项;启用后会有意采用失败时默认拒绝策略,且速度较慢。 |
启用任一功能时,每次工具调用中成功的数据预览正文都会累计限制大小(默认 2 MiB),并且每个进程最多只允许两次数据结果调用进入解析和序列化阶段。SAPQuery.maxRows 另行限制为 10,000,但较宽的行可能会更早达到字节数限制。调整
ARC1_MAX_DATAPREVIEW_RESPONSE_BYTES 或 ARC1_MAX_CONCURRENT_DATA_RESULTS 前,请参阅配置。
在两个标志均保持默认值时,ARC-1 的数据和 SQL 行不可访问。常见问题 Q33 将读取应用程序表、导出业务数据以及后端 SQL 排除在 ADT 预期的开发工具范围之外。除非相关用途已获书面许可,或已根据适用协议获得 SAP 授权,否则请保持这些标志关闭;仅有内部批准或技术层面的 opt-in 并不足够。业务数据集成请使用已发布的业务 API。
ARC-1 将功能发现与保守的默认设置及集中式授权相结合。功能发现只能确认技术可用性,并不代表获得 API 政策许可。请遵循参考架构,并核实是否同时满足特定 API 的许可要求和已部署控制措施。
版本控制与稳定性
从 1.0 开始,ARC-1 遵循语义化版本:补丁版本修复错误,次要版本增加向后兼容的功能,而 MCP 工具接口、配置或身份验证约定中的破坏性变更会提升主要版本号。
默认关闭的实验性功能在正式纳入前不受此保证约束——这些功能会明确标注,其接口仍可能在次要版本中变更。目前包括多目标 BTP 模式(ADR-0006 / ADR-0007)和数据源屏蔽列表。
各版本的变更内容:发行说明注释了每个版本的影响和升级操作;CHANGELOG.md列出了所有已合并的 PR。
快速开始
作为 Agent 插件安装——一次可移植安装,即可在 GitHub Copilot、VS Code、Cursor、Codex 及其他兼容客户端中使用 MCP 服务和所有内置 SAP 技能:
copilot plugin marketplace add arc-mcp/arc-1
copilot plugin install arc-1@arc-1
Agent Plugins 1.0 未定义机密信息提示,因此在连接 SAP 前,请在已安装插件的持久化数据目录中创建 ARC-1 .env。有关针对不同客户端的安装、安全配置和验证,请参阅**Agent 插件指南**。
在 Claude 中安装——选择你的使用方式(完整指南:在 Claude 中安装):
-
Claude Desktop——从 Releases 下载最新的
arc-1-*.mcpb并双击安装(或前往设置 → 扩展)。Claude 会提示你配置 SAP 连接。(.mcpb会自动附加到发行版;如果最新版本还没有,请参阅在 Claude 中安装。) -
Claude Code——一次安装即可使用 MCP 服务以及所有 SAP 技能:
/plugin marketplace add arc-mcp/arc-1 /plugin install arc-1@arc-1 -
任意 MCP 客户端 / 手动安装——直接运行:
npx arc-1@latest --url https://your-sap-host:44300 --user YOUR_USER -
想在笔记本电脑上试用? → 快速入门
-
需要完整的本地开发环境(Docker、Cookie 提取器、客户端配置)? → 本地开发
-
要为团队 / BTP 部署? → 部署
博客系列 — AI ABAP 开发
blog.zeis.de 上的长篇系列文章,涵盖 ABAP 开发中的 AI、ARC-1 的设计以及真实案例演练:
- 我如何使用 AI 进行开发,以及上下文为何重要
- ABAP 与 Agentic AI:真实项目中的隐性问题
- ARC-1 介绍:面向企业 SAP 开发的安全 ADT MCP 服务
- SAP BTP 上的 ARC-1:超越笔记本电脑的安全 ABAP Agentic 开发
- ARC-1 与 Copilot Studio:为开发者之外的用户提供 SAP 系统上下文
- ARC-1 与 Joule Studio:将真实 ABAP 系统上下文引入 Joule
- 借助 ARC-1 从 SEGW 和旧版 UI5 迁移到 RAP
完整列表和最新文章 → blog.zeis.de/tags/ai-abap-development-series。
文档
完整文档请访问 docs.arc-1-mcp.com。
| 指南 | 说明 |
|---|---|
| 快速入门 | 5 分钟完成 npx + Claude Desktop 设置 |
| Agent 插件 | 适用于 Copilot、VS Code、Cursor、Codex 和兼容客户端的便携式服务 + 全部技能 |
| 在 Claude 中安装 | 桌面 .mcpb、Claude Code 插件(服务 + 技能)和远程 BTP 连接器 |
| 本地开发 | 完整的本地开发指南 — 所有安装方式、MCP 客户端配置、SSO Cookie 提取器 |
| 部署 | 多用户部署 — Docker、BTP Cloud Foundry、BTP ABAP |
| SAP BTP:从这里开始 | 选择 BTP 拓扑,并参照正确的部署、身份验证、目标和运维指南 |
| BTP Cloud Foundry | MTA 部署、拓扑决策、角色交接和安全验收 |
| BTP 管理 | 变更、角色、密钥、扩展、升级、回滚和客户交接 |
| 多系统设置 | BTP 多目标部署、目标、角色和限定范围的固定 PP 写入 |
| 配置 | 所有标志和环境变量,汇总于一张表 |
| 更新 | 各安装方式的更新流程 |
| 企业身份验证 | Layer A / Layer B 身份验证内部机制、共存矩阵 |
| 工具参考 | 全部 12 个工具的完整参考 |
| 扩展(自定义工具) | 无需派生项目即可添加自己的 Custom_* 工具(FEAT-61)—读取、受限的非 ADT 写入、类/报告执行 |
| 架构 | 附带图示的系统架构 |
| AI 使用模式 | Agent 工作流模式和最佳实践 |
| 技能 | 可复用的 ARC-1 Agent 技能,包括 Eclipse 中的 GitHub Copilot 和 VS Code ADT 设置 |
| 博客系列 | 关于 ABAP 开发中的 AI、ARC-1 内部机制和实际操作演练的长篇文章 |
开发
npm ci && npm run build && npm test
代码库结构、测试命令和贡献指南请参阅 CLAUDE.md。
致谢
| 项目 | 作者 | 贡献 |
|---|---|---|
| vibing-steampunk | oisee | 原始 Go MCP 服务 — ARC-1 的起点 |
| abap-adt-api | Marcello Urbani | TypeScript ADT 库,权威 API 参考 |
| mcp-abap-adt | Mario Andreschak | 首个 ABAP ADT MCP 服务 |
| abaplint | Lars Hvam | ABAP 解析器/代码检查工具(通过 @abaplint/core 使用) |
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。