内容
# ABAP MCP 服务器
独立的MCP服务器,用于主动式ABAP开发 — 通过ADT REST API提供67种工具。
---
## 顶级功能 — 这款MCP的不同之处
ABAP-MCP环境从纯只读ADT包装器到大型工具集合不等。这款服务器注重不同的重点:不是尽可能多的工具,而是**高质量、主动式开发,针对可达的系统**。以下三个特点是其他ABAP-MCP服务器所没有的:
### 🧹 Clean ABAP作为强制工作流 — 而不是Linter后thought
其他服务器充其量提供可选的Linter调用。这里,Clean Code在开发过程中**内置**:`abap_develop`提示强制执行**6步工作流**(上下文分析→参考研究→Clean-ABAP检查→代码放置→实现→质量检查)。此外,还附带了一个Claude代码技能`clean-abap`,它在编写或审查代码时自动应用[Clean-ABAP风格指南](https://github.com/SAP/styleguides),以及`review_clean_abap`和`search_clean_abap`作为工具。结果:代理生成符合风格指南的代码 — 无需您不断提醒。
### 🔍 DDIC验证在编码前 — 从源头上杜绝幻觉
使用`validate_ddic_references`,代理在代码中使用表、结构和字段名称之前,**检查它们是否与真实的数据字典匹配**。这消除了ABAP生成中最常见的幻觉源头 — 即编造的字段名称,这些名称通常在激活时才会被发现。其他服务器仅在事后通过语法检查或ATC进行代码检查;在这里,错误源头在**事先**被切断。
### 🌐 四种网络路由模式 — 到达其他服务器无法到达的系统
大多数ADT桥梁仅支持直接HTTPS。这款服务器按固定顺序尝试四种模式,并采用第一个已配置的模式:**BTP Connectivity Proxy → SAProuter-NI-Tunnel → HTTP-CONNECT-Proxy → 直接HTTPS**。这样,您就可以在经典的B2B-VPN(仅开放端口3299)和混合CAP/Cloud连接场景中访问ABAP系统 — 而纯HTTPS包装器则无法做到这一点。
### 其他强大的功能
- **🚀 本地`.abap`文件 + 批量推送 — 15分钟 → 秒** — 其他AI方法逐个字符地将ABAP代码写入ADT系统;对于大型程序,这可能需要**每写入一次就花费多达15分钟**。这款服务器改为使用本地`.abap`文件:代理在本地编辑,`write_abap_source`将完整的状态推送到ADT API的单个调用中 — **在几秒钟内**。对于10次迭代性修正,这可以节省**多达150分钟**每 session。
- **🔁 递归编码直到成功激活** — 编写工作流运行`lock → write → 语法检查 → 激活 → 解锁`,并且**仅在干净的语法检查时激活**。如果某些操作失败,代理会收到具体的错误列表,并进一步迭代修正,直到对象无错误激活。您获得的是可激活、可运行的代码,而不是带有红色标记的草稿。
- **🎯 延迟工具 — 约75-80% Token节省** — 服务器不会将所有67种工具加载到每个上下文中,而是从**13种核心工具**开始。根据需要,可以通过元工具`find_tools`激活(`find_tools(category=…)`或`find_tools(query=…)`)。
- **✂️ 方法级手术** — `read_abap_method` / `edit_abap_method`读取或替换单个`METHOD…ENDMETHOD`块。代理不会再输出整个类来修改方法 — 服务器在源代码级别分割新主体,并通过正常编写工作流。
- **🗜️ 依赖契约** — `get_abap_contract`(和`analyze_abap_context(mode=contract)`)将类/接口压缩为其公共签名接口 — 通常为源代码大小的5-10%。这样,代理可以在编码前廉价地获取依赖关系的API。
- **⚡ 源代码缓存** — `getObjectSource`的TTL缓存(`SOURCE_CACHE_TTL_MS`,默认为30秒);重复读取会命中缓存,写入/删除会自动使缓存失效 — 变更后永远不会有过时的源代码。
- **🧰 意图界面** — 四个综合动词`SAPRead`/`SAPWrite`/`SAPSearch`/`SAPDiagnose`供客户端使用,它们希望有一个小型工具界面而不是67个独立工具。纯路由层 — 所有安全防护措施仍然有效。
- **🛂 治理(角色 + 审计)** — 角色`viewer`/`developer`/`admin`(`SAP_ROLE`)除了ALLOW_*标志外,还限制了访问;每个变更操作都会作为JSON审计行记录到STDERR(和可选的`AUDIT_LOG_FILE`)。
- **🕸️ 影响分析** — `get_call_graph`将递归的Where-Used图渲染为Mermaid图表;`find_dead_code`将没有传入引用的对象标记为删除候选。
- **🧠 编写前提供完整上下文** — `analyze_abap_context`,`where_used`和`read_abap_source(includeRelated=true)`递归读取所有连接的对象(包括、函数模块、类),以便代理在修改代码前理解整个程序。
- **⚡ 安全的临时执行** — `execute_abap_snippet`在临时`$TMP`程序中执行代码,并**始终删除它**(即使在运行时错误时)。静态禁止列表(`COMMIT WORK`,DB-`INSERT/UPDATE/DELETE`等)预先阻止数据更改操作。
- **🛡️ 默认安全防护** — 编写、删除和执行默认情况下**禁用**,必须显式启用。客户命名空间强制(Z/Y)和`BLOCKED_PACKAGES`保护SAP自己的对象。生产环境完全禁用。
- **🔒 并发安全** — 串行写入锁定和具有自动锁定恢复的带状态会话防止并行写入操作之间的冲突。
- **📚 集成SAP文档搜索** — `search_sap_web`,`fetch_url`(读取任意URL,包括SPA,如SAP帮助门户)和版本相关的help.sap.com引用(`SAP_ABAP_VERSION`)为代理提供当前、正确的引用,而不是过时的训练知识。
### 高效使用Token — 示例
```jsonc
// 仅获取依赖关系的API接口(而不是整个类):
get_abap_contract({ objectUrl: "/sap/bc/adt/oo/classes/zcl_billing" })
// 读取或替换单个方法(而不是整个类):
read_abap_method({ objectUrl: "/sap/bc/adt/oo/classes/zcl_billing", methodName: "calculate" })
edit_abap_method({ objectUrl: "/sap/bc/adt/oo/classes/zcl_billing",
methodName: "calculate", source: " rv_total = iv_net * ( 1 + iv_tax )." })
// 上下文压缩为契约而不是全文:
analyze_abap_context({ objectUrl: "...", mode: "contract" })
// 变更前的影响分析:
get_call_graph({ objectUrl: "/sap/bc/adt/oo/classes/zcl_billing", depth: 2 })
// 通过意图动词的小型工具界面(委派给粒度工具):
SAPRead({ operation: "method", args: { objectUrl: "...", methodName: "calculate" } })
```
---
## 快速入门
**1. 安装依赖并构建**
```bash
npm install
npm run build
```
**2. 配置**
```bash
cp .env.example .env
# 打开.env并填写SAP_URL、SAP_USER、SAP_PASSWORD
```
**3. 启动**
```bash
npm start
# 或直接:
node dist/index.js
```
如果一切顺利,您将看到:
```
╔══════════════════════════════════════════╗
║ ABAP MCP Server v2.0 — Extended ║
╚══════════════════════════════════════════╝
系统 : https://<SAP_SYSTEM>:<PORT>
用户 : <USERNAME> 客户端:<CLIENT> 语言:EN
写入 : ❌ 禁用
删除 : ❌ 禁用
工具 : 13 个初始(67 个总计,延迟)
文档 : help.sap.com 最新版
提示 : 1 (abap_develop)
ADT : ✅ 已连接
✅ MCP 服务器在stdio上运行 — 已准备好连接
```
---
## 比较:此MCP与SAP的官方“ABAP MCP Server”(2026年Q2 GA)
> ⚠️ **名称冲突:** SAP的官方产品与该项目使用相同的名称 — “ABAP MCP Server”。该项目**不是**SAP产品,与SAP无关;`package.json`名称`abap-mcp-server`可能与SAP产品名称冲突,如果该包被发布到npm。
SAP已交付类似的概念 — 一个建立在ABAP语言服务器上的ABAP MCP服务器(一种独立于IDE的ABAP开发功能抽象层)。第三方代理如GitHub Copilot和Amazon Q通过它连接。比较显示了差异:
| 功能 | 此MCP | SAP的ABAP MCP服务器 |
|---|---|---|
| **工具数量** | **67种工具** | ~10种能力类别 |
| **IDE绑定** | 无 — 每个MCP客户端 | Eclipse + VS Code(ADT核心);GitHub Copilot/Amazon Q作为代理 |
| **系统支持** | ECC 6.0+,S/4HANA本地部署,BTP | BTP + 本地部署(RFC);第一个版本聚焦于ABAP云 |
| **经典ABAP** (程序,函数组,BAPI,消息) | ✅ 完整 | ❌ 尚未(计划在后续版本中支持函数组/程序) |
| **SAP业务工作流(SWDD)** | ✅ `analyze_workflow`(定义/实例/步骤/代理) | ❌ |
| **CDS视图(DDLS)** | ✅ | ✅ |
| **CDS元数据扩展(DDLX)** | ✅ | ✅ |
| **服务定义(SRVD)** | ✅ | ✅ |
| **服务绑定(SRVB)+发布** | ✅ | ✅ |
| **数据控制语言(DCLS)** | ✅ | ✅ |
| **行为定义(BDEF)** | ✅ `create_behavior_definition` | ✅ |
| **行为实现(ABP)** | ✅ 通过类工具 | ✅ |
| **方法级手术** | ✅ `read/edit_abap_method` | ❌ |
| **上下文压缩(契约)** | ✅ `get_abap_contract` | ❌ |
| **调用图/死代码检测** | ✅ | ❌ |
| **并行批量读取** | ✅ `batch_read` | ❌ |
| **ABAP代码片段执行** | ✅ 临时 + 清理 | ❌ |
| **延迟工具加载** | ✅ 75-80% Token节省 | 不适用 |
| **审计日志** | ✅ 结构化JSON | ❌ |
| **基于角色的访问控制** | ✅ 查看者/开发者/管理员 | ❌ |
| **包保护 + 命名空间强制** | ✅ | ❌ |
| **SAProuter / BTP代理 / HTTP代理** | ✅ 所有4种路由模式 | BTP + 直接 |
| **Web搜索** | ✅ `search_sap_web` + `fetch_url`(Tavily) | ❌ |
| **Clean ABAP Linter** | ✅ `review_clean_abap` + 技能 | ✅ ATC clean-core |
| **单元测试** | ✅ 执行 + 包含创建 | ✅ 生成 + 执行 |
| **DDIC字段验证(写入前)** | ✅ 静态分析写入前 | ❌ |
| **RAP BDEF知识** | ✅ `rap-bdef`技能 | ✅ SAP自己的模型 |
| **专用ABAP LLM** | ❌ (使用客户端模型) | ✅ SAP-ABAP-1 |
| **本地VS Code UX** | ❌ (故意IDE无关) | ✅ |
| **企业SLA** | ❌ 开源 | ✅ |
| **许可成本** | **免费** | AI单位(BTP订阅) |
**结论:** SAP有一个较窄的初始产品(聚焦于BTP,Eclipse + VS Code,~10类别),具有专有的ABAP模型。这款服务器更广泛(所有SAP系统,所有ABAP工件,每个MCP客户端),更深入(67种工具,治理,审计,上下文压缩),并且是免费的。唯一的真正差距是专有的SAP-ABAP-1语言模型。
**来源(截至2026-06-14):** [SAP社区博客 – “进入ABAP开发的代理AI新时代"](https://community.sap.com/t5/technology-blog-posts-by-sap/entering-the-new-era-of-agentic-ai-for-abap-development/ba-p/14394643) ·
[SAP新闻中心DE](https://news.sap.com/germany/2026/06/mit-agentic-ai-erreicht-abap-die-naechste-stufe-der-evolution/).
---
## MCP客户端配置
**重要:** 您通常不会手动启动服务器 — 它由MCP客户端(Claude Desktop,Claude Code等)自动启动。您只需在配置中添加一次:
### Claude Desktop
`%APPDATA%\Claude\claude_desktop_config.json`(Windows):
```json
{
"mcpServers": {
"abap": {
"command": "node",
"args": ["/path/to/abap-mcp-server/dist/index.js"],
"env": {
"SAP_URL": "https://<SAP_SYSTEM>:<PORT>",
"SAP_USER": "<USERNAME>",
"SAP_PASSWORD": "<PASSWORD>",
"SAP_CLIENT": "<CLIENT>",
"ALLOW_WRITE": "true"
}
}
}
}
```
然后重启Claude Desktop — 服务器在您打开会话时在后台运行。
### Claude Code
在项目文件夹`.claude/mcp.json`中:
```json
{
"mcpServers": {
"abap": {
"command": "node",
"args": ["/path/to/abap-mcp-server/dist/index.js"]
}
}
}
```
#### Clean ABAP技能(可选,Claude Code)
存储库包含一个Claude Code技能`clean-abap`(`.claude/skills/clean-abap/SKILL.md`),它在编写或审查ABAP代码时自动应用Clean-ABAP风格指南。它已经入库 — 克隆后重启Claude Code项目文件夹,它将自动生效。详情请参见`DOCUMENTATION.md` → “Claude技能”。
### Cline(VS Code扩展)
在VS Code中,打开Cline设置(Cline图标 → 设置),进入“MCP服务器配置”。在那里添加:
```json
{
"mcpServers": {
"ABAP Server": {
"autoApprove": [
"search_abap_objects",
"read_abap_source",
"where_used",
"write_abap_source",
"analyze_abap_context",
"abap_develop"
],
"disabled": false,
"timeout": 60,
"type": "stdio",
"command": "node",
"args": [
"/path/to/abap-mcp-server/dist/index.js"
],
"env": {
"SAP_URL": "https://<SAP_SYSTEM>:<PORT>",
"SAP_USER": "<USERNAME>",
"SAP_PASSWORD": "<PASSWORD>",
"SAP_CLIENT": "<CLIENT>",
"SAP_LANGUAGE": "EN",
"ALLOW_WRITE": "true",
"ALLOW_DELETE": "false",
"ALLOW_EXECUTE": "true",
"BLOCKED_PACKAGES": "SAP,SHD,SMOD",
"DEFAULT_TRANSPORT": "",
"SYNTAX_CHECK_BEFORE_ACTIVATE": "true",
"SAP_ALLOW_UNAUTHORIZED": "true",
"MAX_DUMPS": "20",
"DEFER_TOOLS": "true",
"SAP_ABAP_VERSION": "latest",
"NODE_TLS_REJECT_UNAUTHORIZED": "0",
"TAVILY_API_KEY": "<TAVILY_KEY>"
}
}
}
}
```
**注意:**
- `autoApprove`列出了允许在没有用户确认的情况下执行的工具。根据需要扩展列表(例如`search_abap_syntax`,`validate_ddic_references`,`get_object_info`,`find_tools`)。
- `timeout`:每个工具调用的最大运行时间(以秒为单位)(推荐60秒用于ATC检查等)。
- `SAP_ALLOW_UNAUTHORIZED=true` / `NODE_TLS_REJECT_UNAUTHORIZED=0`:仅在自签名证书(开发系统)时设置!
- `TAVILY_API_KEY`:可选 — 用于`fetch_url`和`search_sap_web`工具。从[tavily.com](https://tavily.com)获取API密钥。
- 所有`env`变量也可以在服务器目录中的`.env`文件中配置。
保存后:重启Cline或重新加载MCP连接。
---
## 配置凭证
服务器从项目中的`.env`文件加载凭证:
```bash
# 必需
SAP_URL=https://<SAP_SYSTEM>:<PORT>
SAP_USER=<USERNAME>
SAP_PASSWORD=<PASSWORD>
SAP_CLIENT=<CLIENT>
SAP_LANGUAGE=EN
# 安全(默认为安全)
ALLOW_WRITE=false
ALLOW_DELETE=false
ALLOW_EXECUTE=false
BLOCKED_PACKAGES=SAP,SHD,SMOD
# 治理(角色和审计)
# SAP_ROLE限制访问除了ALLOW_*标志之外(只能进一步限制,不能打开)。
SAP_ROLE=admin
# 可选的JSON审计日志记录所有更改操作(除了STDERR)。
AUDIT_LOG_FILE=
# 选项
SYNTAX_CHECK_BEFORE_ACTIVATE=true
DEFER_TOOLS=true
SAP_ABAP_VERSION=latest
DEFAULT_TRANSPORT=
MAX_DUMPS=20
# 源代码缓存TTL(毫秒),用于getObjectSource(默认30000;0 = 关闭)。
# 写入/删除会自动使缓存失效。
SOURCE_CACHE_TTL_MS=30000
# 网络搜索(可选 — 用于fetch_url和search_sap_web工具)
TAVILY_API_KEY=
```
您不需要在MCP配置中重复凭证 — 服务器在启动时自动加载它们。
**每种环境的推荐设置:
| 变量 | DEV | QAS/TEST | PROD |
|---|---|---|---|
| `ALLOW_WRITE` | `true` | `false` | `false` |
| `ALLOW_DELETE` | `false` | `false` | `false` |
| `ALLOW_EXECUTE` | `true` | `false` | `false` |
| `SAP_ROLE` | `admin`/`developer` | `viewer` | `viewer` |
---
## 为什么服务器不需要端口?
ABAP MCP服务器在**stdio模式**(标准输入/输出)下运行,而不是在HTTP模式下:
- **stdio模式**(此服务器)✅
- 服务器通过stdin/stdout直接与客户端通信
- 无需HTTP服务器,无需TCP端口
- 这是MCP(模型上下文协议)的标准
- 由客户端在需要时自动启动
- 适用于:Claude Desktop,Claude Code,Cline
- **HTTP模式**(可选,例如用于外部客户端)
- 服务器监听TCP端口(例如4847)
- 客户端通过HTTP连接
- 需要多个客户端进程或外部集成时需要
**简而言之:** 您不需要端口,因为您的客户端(Claude,Cline)直接启动服务器并通过stdio与之通信。这样更快、更安全。
## 网络路由
ABAP 系统必须可以从运行 MCP 服务器的计算机上访问。服务器支持四种路由模式 — 按以下顺序尝试,并使用**第一个已配置的模式**:
| 优先级 | 模式 | 何时适用 |
|---|---|---|
| 1 | **BTP 连接代理** | 混合 CAP 开发;仅通过云连接器可访问 ABAP 系统 |
| 2 | **SAProuter NI 隧道** | 经典 B2B VPN,仅允许外部访问端口 3299 |
| 3 | **HTTP-CONNECT 代理** | 企业代理或本地 SSH/socat 隧道 |
| 4 | **直接 HTTPS** | DNS 和防火墙允许直接访问 |
### 模式 1 — BTP 连接代理(推荐用于 CAP 开发)
通过 BTP 子账户信任的云连接器路由 HTTPS。MCP 服务器利用 Cloud-Foundry 应用程序的本地转发连接代理,该应用程序已绑定 `connectivity` 服务。
**一次性准备工作:**
```bash
# 在单独的终端中 — 保持活动,直到 MCP 运行完成。
cf ssh <app> -N -L 20003:connectivityproxy.internal.cf.<region>.hana.ondemand.com:20003
# 在 CAP 项目中:绑定连接服务(一次性)
cds bind --to <connectivity-instance> --credentials '{"onpremise_proxy_host":"localhost"}' --for hybrid
```
**MCP 配置(`.env` 或 MCP 客户端 `env`):**
```env
SAP_URL=http://mdadneap1.example.com:44300 # http:// on port 20003!
SAP_BTP_CONNECTIVITY_PROXY=http://localhost:20003
SAP_BTP_CONNECTIVITY_LOCATION_ID= # 留空 = 默认 CC;如有需要,可使用诊断工具确定
SAP_BTP_CONNECTIVITY_CDS_BIND_FILE=/abs/path/<project>/.cdsrc-private.json
SAP_BTP_CONNECTIVITY_CDS_BIND_NAME=connectivity
SAP_BTP_CF_HOME=/abs/path/<project> # 可选,特定于项目的 cf 会话
```
按以下顺序尝试三种 JWT 来源:`*_CREDS_FILE` → `*_CDS_BIND_FILE` + `*_CDS_BIND_NAME` → 直接 `*_CLIENT_ID/_SECRET/_TOKEN_URL`。详细信息请参见 [.env.example](.env.example)。
**协议说明:**
- 端口 **20003** 上的连接代理是一个 HTTP 前向代理 → `SAP_URL` 必须为 `http://...`。云连接器负责后端 TLS。
- 端口 **20004** 上的代理支持 CONNECT 隧道 → `SAP_URL=https://...`。
- 云连接器必须允许 `/sap/bc/adt/*` 作为资源。
**诊断:**
```bash
npm run diag:btp-proxy # 对 SAP_URL/sap/bc/adt/discovery 进行端到端探测
npm run diag:btp-token # 显示 XSUAA JWT 声明(子账户、受众、范围)
npm run diag:btp-destination -- --list # 列出所有目标
npm run diag:btp-destination -- <DESTINATION_NAME> # 确定位置 ID 和虚拟主机
npm run diag:adt # 通过 getClient() 进行端到端测试
```
### 模式 2 — SAProuter NI 隧道
```env
SAP_URL=https://<target-host>:<port>
SAP_ROUTER=/H/saproutprd.example.com/S/3299 # 或简写为:host:port
# SAP_ROUTER_PASSWORD= # 如果 saprouttab 需要密码
# SAP_ROUTER_DEBUG=true # 在 stderr 上启用 NI 帧
```
前提条件:`saprouttab` 必须包含一个允许(您的源 → 目标主机:端口)的许可规则。否则,SAProuter 将使用 `NI_RTERR` 进行响应。后台主机还必须在指定的端口上接受 HTTPS(Web Dispatcher 或 ICM `icm/server_port`)。
### 模式 3 — HTTP-CONNECT 代理
```env
SAP_PROXY_URL=http://proxy.corp.example.com:8080 # 或 http://localhost:8443 (SSH 隧道)
```
还支持标准环境变量 `HTTPS_PROXY` / `HTTP_PROXY`。
### 模式 4 — 直接 HTTPS
无需额外变量。如果后端使用自签名证书,还可以设置 `SAP_ALLOW_UNAUTHORIZED=true`(仅限开发系统)。
### 不应放入 `SAP_URL` 的内容
- **SAProuter 路由** (`/H/.../S/...`):SAProuter 使用 SAP NI 二进制协议,而非 HTTP。应放入 `SAP_ROUTER`。
- **云连接器虚拟主机专用路径**:这是 `SAP_URL`。路径前缀映射由云连接器完成。
---
## 身份验证和连接 — 支持的机制
本服务器支持的身份验证和连接机制概述 — 以及与其他 ABAP-MCP 实现相比,不支持哪些机制(例如,还支持 RFC、mTLS 客户端证书、Kerberos/SPNEGO 或 SAP BTP 目标服务,带主体传播)。
### ✅ 支持
| 机制 | 适用范围 | 详细信息 |
|---|---|---|
| **基本身份验证**(用户名/密码) | ADT REST API | `SAP_USER` / `SAP_PASSWORD` — 唯一针对 ABAP 后端的身份验证机制 |
| **XSUAA 客户端凭证(JWT)** | BTP 连接代理 | 仅签名到云连接器的隧道(`Proxy-Authorization` 头),**不** 签名 ADT 会话本身 — 参见上面的“BTP 连接代理”章节 |
| **SAProuter NI 隧道**(可选,带路由器密码) | 传输层 | `SAP_ROUTER`,`SAP_ROUTER_PASSWORD` |
| **HTTP-CONNECT 代理** | 传输层 | `SAP_PROXY_URL` / `HTTPS_PROXY` / `HTTP_PROXY` |
| **自签名证书**(可禁用 TLS 验证) | ADT 连接 + Web 调用 | 分别控制:`SAP_ALLOW_UNAUTHORIZED`(ADT)vs. `WEB_ALLOW_UNAUTHORIZED`(Tavily) |
### ❌ 不支持(截至 v2.0)
| 机制 | 需要它的原因 | 此服务器的替代方案 |
|---|---|---|
| **mTLS 客户端证书** | 基于 X.509 的系统身份验证,而不是用户名/密码 | 基本身份验证;还可以通过 VPN/SAProuter 安全网络 |
| **Kerberos / SPNEGO(SSO)** | Windows AD 集成,无明文密码 | 基本身份验证 — 凭证存储在 `.env` 中 |
| **RFC/BAPI 直接连接**(`node-rfc`) | 无 ADT 包装器的功能模块调用 | `execute_abap_snippet` 可以通过 `CALL FUNCTION` 调用功能模块 |
| **SAP BTP 目标服务**(运行时查找,主体传播) | 集中凭证管理,用户身份转发到后端 | 静态 `.env` 凭证或 BTP 连接服务密钥(参见模式 1) |
| **SSE / HTTP-MCP 传输** | 多个客户端对一个正在运行的服务器进程 | 仅 **stdio** (参见“为什么服务器不需要端口?”)— 每个客户端启动一个单独的服务器进程 |
这些遗漏是 v2.0 的刻意范围决策(重点:针对 ADT 系统的单用户开发工作流)。对于具有集中身份验证的多用户/企业场景,集成 RFC、mTLS、Kerberos 或目标服务将是有意义的,但需要单独扩展。
---
## 故障排除
**"ADT 错误:用户当前正在编辑..."**
- 服务器尝试锁定已锁定的文件(例如,由于先前的错误)。
- 解决方案:打开 SAP Studio 并结束锁定会话,或重启服务器。
**包含激活错误**
- 包含文件无法独立激活。服务器会自动识别这一点,并在主程序的上下文中激活包含文件。如有必要,请在编写时指定 `mainProgram` 参数。
**"SAP_URL、SAP_USER 和 SAP_PASSWORD 必须设置"**
- 缺少 `.env` 文件或服务器从错误目录启动。对于命令行界面:检查 MCP 配置中的 `cwd` 字段。
**连接被拒绝 / `ENOTFOUND <host>`**
- VPN 激活?SAP 系统可访问?URL 正确?`nslookup <host>` 必须从此机器成功 — 如果不成功,则不是代码问题,而是 DNS/VPN 问题。
**BTP 连接代理:HTTP 503 "没有与请求的隧道匹配的 SAP 云连接器"**
- JWT 中的错误子账户受众(例如,来自其他子账户的服务密钥)或缺少/错误 `SAP_BTP_CONNECTIVITY_LOCATION_ID`。
- `npm run diag:btp-token` 显示令牌的 `zid`(子账户 ID)和 `aud`。
- `npm run diag:btp-destination -- --list` 显示您子账户中配置的所有位置 ID。
**BTP 连接代理:HTTP 405 "不支持 HTTPS 代理"**
- `SAP_URL` 为 `https://...`,但代理在 HTTP 前向端口(20003)上运行。或者,将 `SAP_URL` 更改为 `http://` 或将 SSH 转发设置为端口 20004。
**`cf service-key` 失败(登录过期 / 未定位组织)**
- 服务器使用带有 `cf` 命令建议的精确错误消息。通常,只需:`CF_HOME=<项目> cf login --sso`。
**自签名证书(仅限开发)**
- 设置 `SAP_ALLOW_UNAUTHORIZED=true`。请勿在生产环境中使用!
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器