内容
sap-notes-mcp
MCP服务器,用于在**受保护的**SAP支持区域搜索SAP Notes / KBAs。
由于SAP没有提供官方的Notes API,服务器使用身份验证的浏览器会话(Playwright):
1. **一次性**交互式登录(`npm run login`)— 包括MFA,在可见的浏览器中。
2. 会话(Cookies + localStorage)存储在`~/.sap-notes-mcp/session.json`(模式0600)。
3. 然后MCP服务器**无头**运行并使用此会话。
4. 如果会话过期,工具将提供明确的错误消息 → 再次执行`npm run login`。
## 设置
```bash
npm install
npx playwright install chromium
npm run build
npm test # 离线单元测试,不需要SAP会话
npm run login 可见浏览器:S-User,然后在终端中按Enter
# 可选的Smoke测试(stdio,等待MCP客户端)
```
## 集成到Claude Desktop / Claude Code
`claude_desktop_config.json`或`.mcp.json`:
```json
{
"mcpServers": {
"sap-notes": {
"command": "node",
"args": ["/绝对路径/sap-notes-mcp/dist/server.js"]
}
}
}
```
配置文件中不需要凭证 — 服务器仅使用存储的会话。
## 工具
| 工具 | 参数 | 返回值---|---|---|
| `sap_notes_search` | `query`(字符串),`limit`(1-25,默认10) |编号,标题,每个匹配结果的| `sap_note_get` |`(4-10位数字) | 完整的笔记内容为Markdown |
## 配置()
| 变量 | 用途 |
| `SAP_STATE_PATH`~/.sap-notes-mcp/session.json` | 会话存储路径 `SAP_SEARCH_URL` |://me.sap.com/search?q={query}&tab=notes`搜索URL(`{query |
| `SAP_COVEG` | `sapamericaproductiontyfzmfz0` | Coveo组织 |
| `SAP_COVEO_TOKEN_URL` | SAP-for-Me令牌端点 | 短令牌端点 |
| `SAP_COVEO_SEARCH_URL` | Coveo REST搜索v2 | 搜索端点,包括组织 |
| `SAP_COVEO_SEARCH_HUB` | `SAP for Me` | Coveo搜索中心/管道上下文 |
| `SAP_NOTE_URL` | `https://me.sap.com/notes/{id}` | 详细URL(`{id}`) |
| `SAP_PROBE_URL` | `me.sap.com/notes/2170696` | 会话检查页面 |
| `SAP_NAV_TIMEOUT_MS` | `60000` |超时 |
| `SAP_NETWORK_IDLE_TIMEOUT_MS` | `400 | 网络空闲超时 |
| `SAP_RENDER_SETTLE_MS`0` | SPA渲染延迟超时 |
| `SAP_USERNAME` | 仅用于登录CLI填充(密码从不读取) |
## 如果SAP门户
服务器**不硬编码的CSS类* 搜索 = 所有链接href`指向笔记编号(`/notes/<n>`,`/knowledge>`,...)。
* = 最大内容容器(`,`article`,`[role=main]`,...)→ Markdown。
如果SAP更改路由,通常只需要调整`SAP_SEARCH_URL`SAP_NOTE_URL`(在浏览器中复制URL,将搜索词替换为`{query}`,编号替换为`{id}`)。
## 限制
* 仅用于**个人**使用**自己的**S-User。集中托管的服务器与技术S-User一起使用,实际上分发了许可的门户内容 — 这需要在使用SAP使用条款之前进行检查。
* 没有批量爬取:工具调用将针对每个服务器进程序列化。搜索最多读取三个Coveo结果页面,直到达到请求的限制。
* 不读取校正指令(ABAP);这需要针对Note Assistant服务进行额外的OData调用。
## 开发和诊断
```bash
npm run typecheck
npm test
node dist/test-search.js "HANA Revision" # 需要有效的会话
node dist/diagnose-search.js "HANA Revision" # 交互式
```
诊断脚本在写入之前删除访问令牌和Cookie标头,并以文件模式`0600`存储`diagnose-coveo.json`。录音可能仍包含受保护的SAP搜索结果,不应分享或提交。