mcpField
A
ARC-1

ARC-1

本地服务
docs.arc-1-mcp.com开发工具2392 天前更新

关于 ARC-1

ARC-1 是通过 ADT REST API 将 AI 助手连接到 SAP ABAP 系统的 MCP 服务,面向需要管控式 AI 辅助 SAP 开发的组织。它提供可配置的访问限制、多种身份验证方式,并可部署在 BTP 或本地环境。

主要功能

  1. 01管控 SAP 读取与写入操作
  2. 02提供 12 个意图型工具
  3. 03支持多种身份验证方式
  4. 04支持 BTP 与本地部署
  5. 05缓存 SAP 源码

适用场景

  1. 01检查和编辑 SAP ABAP 对象
  2. 02查看依赖关系与对象用法
  3. 03通过 BTP 将 AI 客户端接入 SAP
  4. 04按软件包和操作限制 SAP 写入

MCP 相关

ARC-1 通过 12 个工具向 MCP 客户端提供 SAP ABAP 操作和上下文。它支持 MCP 客户端使用 API 密钥和基于 OAuth 的身份验证流程。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"arc-mcp-arc-1": {
"command": "npx",
"args": [
"-y",
"arc-1"
],
"env": {
"SAP_URL": "<SAP_URL>",
"SAP_USER": "<SAP_USER>",
"SAP_PASSWORD": "<SAP_PASSWORD>",
"SAP_CLIENT": "<SAP_CLIENT>",
"SAP_LANGUAGE": "<SAP_LANGUAGE>",
"SAP_INSECURE": "<SAP_INSECURE>",
"SAP_ALLOW_WRITES": "<SAP_ALLOW_WRITES>",
"SAP_TRANSPORT": "<SAP_TRANSPORT>"
}
}
}
}
启动命令npx -y arc-1
需要配置的环境变量
SAP_URLSAP system URL (e.g., http://host:50000)
SAP_USERSAP username
SAP_PASSWORD密钥SAP password
SAP_CLIENTSAP client number
SAP_LANGUAGESAP logon language
SAP_INSECURESkip TLS certificate verification
SAP_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmarc-11.9.0
ocighcr.io/arc-mcp/arc-1:1.9.0

工具

9

收录的工具列表 · 更新于 5 天前

参数类型必填说明
tostring否action="diff" 的 NEW 侧(默认 "inactive" = 待激活的更改)。与 from 的取值相同。
fromstring否action="diff" 的 OLD 侧:"active"(默认)、"inactive"、来自 SAPRead(type="VERSIONS") 的修订 ID,或 /sap/bc/adt/ 修订 URI。
grepstring否用于在对象源代码中搜索的正则表达式(不区分大小写)。仅返回匹配行及其 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)。如果模式不是有效的正则表达式,则退回到字面搜索。
namestring否对象名称(例如 ZTEST_PROGRAM、ZCL_ORDER、MARA)
typeenum是对象或元数据类型。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
groupstring否用于 FUNC、VERSIONS 或 objectType=FUNC 的 API_STATE 的函数模块功能组。省略时通过 SAPSearch 自动解析。
wherearray否对于 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"}]。
actionenum否设为 "diff",以生成两个源码版本之间的统一差异(使用 from/to)——比获取两个源码更省成本。仅支持以下源码类型:PROG、CLAS、INTF、FUNC、FUGR、INCL、DDLS、DCLS、BDEF、SRVD、DDLX、TABL。diff
formatenum否默认: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
methodstring否对于 CLAS:读取某个方法(例如 "get_name"、"zif_order~process"、"lhc_travel~accept"),或使用 "*" 列出方法。未指定 include= 时,lhc_*/lcl_* 使用 implementations,ltc_* 使用 testclasses,其他名称使用 MAIN;显式指定 include= 时优先。对于 SOBJ:要读取的 BOR 方法名称。省略时返回完整的 BOR 方法目录。其他类型不使用此参数。
sourcestring否仅适用于 SYNTAX:待检查的源码,不会保存。省略则检查已存储的版本(默认检查 active;inactive 检查 draft)。对象必须存在;不支持 version=auto。
columnsarray否TABLE_QUERY 用:要 SELECT 的列(默认:全部)。示例:["MATNR","BWART","BUDAT","MENGE"]。
includestring否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)。
maxRowsnumber否TABLE_CONTENTS/TABLE_QUERY 的行数上限(默认 100,最大 10,000;可能会先达到字节数限制)。在 758 上,TABLE_CONTENTS 返回 N+1 行;要精确限制行数,请使用 TABLE_QUERY。
toLabelstring否action="diff" 中可选的显示标签,用于摘要和补丁标头中的新侧,例如 "active" 或 "inactive draft"。不影响源码解析。
versionenum否源码默认使用 active;inactive 请求 draft(若无 draft,SAP 可能返回 active);auto 选择 developer view。DTEL/ENQU/服务器驱动型类型默认使用 developer view。如果 SAP 无法确认显式指定的版本(例如没有 draft),服务器驱动型类型会返回错误。active | inactive | auto
fromLabelstring否action="diff" 中可选的显示标签,用于摘要和补丁标头中的旧侧,例如 "DNT-6-6: Validate discounts (DS7K900123)"。不影响源码解析。
sqlFilterstring否仅适用于 TABLE_CONTENTS 的条件表达式(不含 WHERE、SELECT);在 758 上不可用(SAP 需要 SELECT)。请改用 TABLE_QUERY 的 where。
maxResultsnumber否DEVC 对象数量限制(默认 200,限制在 [1, 1000] 范围内)。Listing 元数据会报告生效的限制和可能的截断情况。总数和完整存储库是否完整仍未知。
objectTypestring否SYNTAX:必需的存储库类型(例如 CLAS、PROG、DDLS)。API_STATE:省略时推断。VERSIONS:type 选择端点;根据 CL_/IF_/CX_ 推断,否则为 PROG。TEXT_ELEMENTS:PROG(默认)、CLAS 或 FUGR。
versionUristring否VERSION_SOURCE:来自 VERSIONS .revisions[].uri 的规范源码/修订 URI;拒绝无关的 ADT 端点、绝对 URL、路径遍历、查询参数和片段。
force_refreshboolean否对于源码读取:读取前绕过缓存的源码和 inactive 列表状态。已知对象在 ARC-1 之外发生更改时使用。
expand_includesboolean否仅适用于 FUGR 类型。为 true 时,递归展开函数组 include 树——主源码以及所有嵌套 INCLUDE(FUNCTION...ENDFUNCTION 主体位于嵌套的 LZ<grp>U01/U02 include 中,因此只遍历一层会遗漏它们)。每个代码块前都有一个 "=== name ===" 标记;深度和数量均有限制。不包括 Dynpro 和 GUI 状态(ADT 不会通过 REST 提供这些内容)。
includeSignatureboolean否仅适用于 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 镜像的形式发布。

测试 CodeQL 依赖项审查

完整文档 | 快速入门 | 工具参考 | 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=high PR 门禁、每个 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;每种路径都需要单独启用
SAPTransportCTS 传输管理(列出/获取/创建/释放/删除/重新分配/递归释放)、传输层/目标查询、软件包传输要求检查,以及反向查询历史记录(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=truefalse(关闭)读取应用程序数据;经过身份验证的调用方还需要 data 作用域。
自由格式 ABAP SQL(SAPQuery(action=sql))SAP_ALLOW_FREE_SQL=truefalse(关闭)执行临时 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 的设计以及真实案例演练:

  1. 我如何使用 AI 进行开发,以及上下文为何重要
  2. ABAP 与 Agentic AI:真实项目中的隐性问题
  3. ARC-1 介绍:面向企业 SAP 开发的安全 ADT MCP 服务
  4. SAP BTP 上的 ARC-1:超越笔记本电脑的安全 ABAP Agentic 开发
  5. ARC-1 与 Copilot Studio:为开发者之外的用户提供 SAP 系统上下文
  6. ARC-1 与 Joule Studio:将真实 ABAP 系统上下文引入 Joule
  7. 借助 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 FoundryMTA 部署、拓扑决策、角色交接和安全验收
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-steampunkoisee原始 Go MCP 服务 — ARC-1 的起点
abap-adt-apiMarcello UrbaniTypeScript ADT 库,权威 API 参考
mcp-abap-adtMario Andreschak首个 ABAP ADT MCP 服务
abaplintLars HvamABAP 解析器/代码检查工具(通过 @abaplint/core 使用)

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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