MCP SAP文档(上游)
一个MCP服务器,通过统一的搜索和获取界面,让AI助手(Claude、Cursor、ChatGPT等)访问SAP文档。它将git克隆的SAP文档上的本地全文+语义索引与对SAP帮助、SAP社区和软件英雄的可选实时查询相结合,所有这些都作为MCP工具公开。
公共托管端点
即用型——无需设置 |变量|URL| |---------|-----| |SAP文档|http://mcp-sap-docs.marianzeis.de/mcp| |ABAP|https://mcp-abap.marianzeis.de/mcp|
变体
mcp-sap-docs 是共享一个代码库且配置不同的两个MCP服务器变体的上游存储库(MCP_VARIANT / .mcp-variant):
| 变体 | 范围 | 额外工具 |
|---|---|---|
sap-docs | 广泛的SAP文档:UI5、CAP、Cloud SDK、ABAP、BTP、AI、Terraform | 探索中心工具 |
abap | ABAP重点:ABAP关键字文档、RAP、备忘单、样式指南 | abap_lint |
文档来源
离线来源(本地索引,始终可用)
| 来源 | 描述 |
|---|---|
abap-docs-standard | ABAP官方关键字文档——内部/完整语法 |
abap-docs-cloud | ABAP官方关键字文档--ABAP Cloud/BTP(受限语法) |
abap-cheat-sheets | 实用ABAP/RAP代码片段和示例 |
abap-fiori-showcase | 注释驱动的RAP+OData V4+Fiori Elements功能展示 |
abap-platform-rap-opensap | openSAP“使用RAP构建应用程序”课程示例 |
cloud-abap-rap | ABAP Cloud+RAP示例项目 |
abap-platform-reuse-services | RAP重用服务示例(数字范围、邮件、Adobe Forms等) |
sap-styleguides | SAP Clean ABAP风格指南和最佳实践 |
dsag-abap-leitfaden | DSAG ABAP Leitfaden(德国)开发指南 |
btp-cloud-platform | SAP BTP概念、开发、安全、管理 |
sap-artificial-intelligence | SAP AI Core和SAP AI Launchpad文档 |
ui5 | SAPUI5/OpenUI5框架文档 |
cap | SAP云应用程序编程模型(CAP)文档 |
cloud-sdk | SAP Cloud SDK文档 |
terraform-provider-btp | SAP面向BTP的Terraform提供商——资源和数据源 |
architecture-center | SAP架构中心参考架构和指导 |
wdi5 | wdi5(WebdriverIO+UI5)测试框架文档 |
在线资源(实时查询,默认启用)
| 来源 | 描述 |
|---|---|
| SAP帮助门户 | SAP官方产品文档(范围广泛) |
| SAP社区 | 社区博客、问答和故障排除帖子 |
| 软件英雄 | ABAP/RAP文章和教程(EN+DE,重复数据消除) |
可用工具
共享工具(两种变体)
| 工具 | 说明 |
|---|---|
search | 跨离线文档和可选在线源的统一混合搜索(BM25+语义)。支持 query, k, includeOnline, includeSamples, abapFlavor, sources 参数。 |
fetch | 按返回的ID检索完整文档内容 search. |
abap_feature_matrix | 使用以下工具检查SAP版本(7.40–最新版本)中ABAP功能的可用性 软件英雄特征矩阵. |
sap_community_search | 通过Khoros LiQL API进行专门的SAP社区搜索-返回热门文章的完整内容。使用时 search 结果不足以解决特定的错误或解决方法。 |
sap_search_objects | 从官方网站按名称/组件/类型搜索SAP发布的对象(类、接口、表、CDS视图等) SAP/abap-atc-cr-cv-s4hc 释放状态仓库。可用于清洁核心合规性发现。 |
sap_get_object_details | 特定SAP对象的完整发布状态详细信息,包括干净核心级别(a/B/C/D)、后续对象和可选合规性判定。 |
sap-docs 仅限变体
| 工具 | 说明 |
|---|---|
sap_discovery_center_search | 按关键字、类别或许可证型号在SAP Discovery Center服务目录中搜索BTP服务。 |
sap_discovery_center_service | 获取全面的BTP服务详细信息:定价计划、产品路线图、文档链接和关键功能。接受服务UUID或名称。 |
abap 仅限变体
| 工具 | 说明 |
|---|---|
abap_lint | 使用abaplint对ABAP源代码运行静态代码分析。自动从代码模式中检测文件类型。返回带有行号、严重性和规则键的结果。 |
架构概述
- 真相的上游来源:
mcp-sap-docs - 单向同步目标:
abap-mcp-server - 搜索用途 混合BM25+语义(嵌入) 互序融合(RRF)
- 嵌入模型:
Xenova/all-MiniLM-L6-v2(约90 MB,缓存在dist/models/)
变体选择
解决顺序:
MCP_VARIANT环境变量.mcp-variantrepo根目录中的文件- 退路:
sap-docs
示例:
# Run as full sap-docs profile
MCP_VARIANT=sap-docs npm run setup
MCP_VARIANT=sap-docs npm run build
MCP_VARIANT=sap-docs npm run start:streamable
# Run as ABAP profile
MCP_VARIANT=abap npm run setup
MCP_VARIANT=abap npm run build
MCP_VARIANT=abap npm run start:streamable搜索行为
search 通过以下方式执行融合检索:
- 离线FTS索引(本地子模块内容)
- 可选在线资源(
includeOnline=true):
- SAP帮助 - SAP社区 - 软件英雄内容搜索(EN/DE合并+重复数据消除)
排名和过滤亮点:
- 混合BM25+语义(嵌入)搜索 --关键字和含义,通过RRF融合
- 跨离线和在线来源的互惠排名融合(RRF)
- 元数据的源代码级别提升
includeSamples可以去除样本重源abapFlavor(standard/cloud/auto)过滤官方ABAP文档库,同时保留非ABAP源sources可以明确限制脱机库
混合搜索
离线搜索结合了BM25(FTS5关键字匹配)和语义相似性 (通过密集嵌入 Xenova/all-MiniLM-L6-v2).这使得自然语言和 即使缺少确切的关键字,也可以对查询进行意译以查找相关文档。
例子: _“如何检查用户是否有权限”_ 发现 AUTHORITY-CHECK 文档。
嵌入在构建时预先计算并存储在 docs.sqlite. 模型(约90 MB)缓存在 dist/models/ (gitignored,在项目中)。
看 docs/HYBRID-SEARCH.md 了解完整细节、尺寸影响和调整。
仅离线模式
search 默认情况下包括在线资源。要仅脱机运行,请使用:
- 仅限本地索引/子模块(
npm run setup+npm run build) includeOnline=false每一个search请求
示例 search 请求正文:
{
"query": "RAP draft",
"k": 8,
"includeOnline": false
}Docker(仅离线)
运行具有主机绑定的容器并调用 search 随着 includeOnline=false:
docker run --rm -p 3122:3122 \
-e MCP_VARIANT=sap-docs \
-e MCP_PORT=3122 \
-e MCP_HOST=0.0.0.0 \
mcp-sap-docs对于严格的气隙执行,请禁用容器网络:
docker run --rm --network none -p 3122:3122 \
-e MCP_VARIANT=sap-docs \
-e MCP_PORT=3122 \
-e MCP_HOST=0.0.0.0 \
mcp-sap-docs笔记:
- 随着
--network none,由于运行时隔离,在线获取是不可能的。 - 启动可能会记录在线预取尝试的警告(例如ABAP功能矩阵);这不会阻止脱机
search使用。
快速入门(本地)
npm ci
npm run setup
npm run build启动服务器模式:
# MCP stdio
npm start
# HTTP status/dev server
npm run start:http
# MCP streamable HTTP
npm run start:streamable按变量列出的默认端口:
sap-docs:HTTP3001,可流式传输3122abap:HTTP3002,可流式传输3124
健康检查:
curl -sS http://127.0.0.1:3122/health | jq .
curl -sS http://127.0.0.1:3001/status | jq .运行时使用特定于变体的端口 abap 轮廓。
构建和设置脚本
脚本名称保持共享(setup, build, start, start:streamable). 不同配置的行为变化:
setup.sh仅初始化变量允许的子模块build-index仅包括允许使用的变体库build-fts只有索引变量允许库
这保持 abap 更快、更小,而无需维护单独的构建脚本集。
码头工人
为变体构建映像:
# sap-docs image
docker build --build-arg MCP_VARIANT=sap-docs -t mcp-sap-docs .
# abap image
docker build --build-arg MCP_VARIANT=abap -t abap-mcp-server .运行可流式传输服务器:
# sap-docs
docker run --rm -p 3122:3122 \
-e MCP_VARIANT=sap-docs \
-e MCP_PORT=3122 \
mcp-sap-docs
# abap
docker run --rm -p 3124:3124 \
-e MCP_VARIANT=abap \
-e MCP_PORT=3124 \
abap-mcp-server单向同步到 abap-mcp-server
此存储库包含直接同步自动化:
- 工作流程:
.github/workflows/sync-to-abap-main.yml - 脚本:
scripts/sync-to-abap.sh
流量:
- 推至
mcp-sap-docs/main - 工作流克隆
abap-mcp-server - 同步跟踪的上游文件(使用排除规则)
- 应用ABAP覆盖
.mcp-variant被迫abap- ABAP包标识已修补
- 提交被推到
abap-mcp-server/main
需要保密 mcp-sap-docs 回购:
ABAP_REPO_SYNC_TOKEN
提交消息控件:
[skip-sync]跳过同步工作流
部署模型
mcp-sap-docs:上游实现+同步触发abap-mcp-server:部署触发器仍将推送到该存储库中的main
这保留了ABAP部署自动化,同时保留了一个共享的上游代码库。
PM2运行时间
ecosystem.config.cjs 了解变体并解决:
- 进程名称
- 端口
- 部署路径
从 config/variants/*.json.
验证命令
npm run build:tsc
npm run test:url-generation
npm run test:integration
npm run test:software-heroes
npm run test:sap-objects # SAP Released Objects unit tests
# Variant-specific build checks
MCP_VARIANT=sap-docs npm run build:index
MCP_VARIANT=abap npm run build:index
MCP_VARIANT=sap-docs npm run build:fts
MCP_VARIANT=abap npm run build:fts附加文档
docs/ARCHITECTURE.mddocs/DEV.mddocs/TESTS.mddocs/UPSTREAM-ONE-WAY-SYNC-IMPLEMENTATION.mdREMOTE_SETUP.md
