sap-note-search-mcp
An MCP server over SAP Notes and Knowledge Base articles: search finds a note, fetch returns it whole, and a scripted browser does the S-user login the content sits behind.
SAP Notes are where the answer to a specific failure is written down, and they are behind me.sap.com rather than a public API, so an agent cannot reach them. This logs in as the caller's own S-user, by username and password or an SAP Passport certificate, and caches the session cookies with a configurable lifetime. fetch returns a note's text together with the metadata it carries beside it: validity ranges, support packages and patches, references, prerequisites, side effects, correction summaries and attachments, and fetch(includeCorrections=true) adds the ABAP correction instructions through a further OData call. Two tools, no writing anywhere. It is published to npm on its own as sap-note-search-mcp, developed in the sap-mcp-servers monorepo beside sap-api-hub-mcpsap-api-hub-mcpA read-only MCP server over the SAP Business Accelerator Hub catalogue: categories, search, metadata, resources, specs and packages, reached as the caller's own SAP user.independent, btp and sap-roadmap-mcpsap-roadmap-mcpAn MCP server over SAP Road Map Explorer, so an agent can read what SAP has announced as planned rather than inferring it from a release that has shipped.independent, btp, and it is the successor to the archived marianfoo/mcp-sap-notes repository.
Facts
Where it sits
Who is behind it
In the atlas: maintains 35, contributes to 86, wrote 25@marianfoomaintaineradam0thmanContributes to this
In the atlas: maintains 1, contributes to 3@adam0thmanDavid SlugaContributes to this
In the atlas: contributes to 4@army1132 contributors
Before choosing this
Conditions
PracticalFunctional boundary
It needs an S-user with SAP Support Portal access, so there is nothing to search without a support contract behind the login. The maintainer states it uses private SAP APIs behind authentication, asks the reader to check whether that use breaches SAP's terms of service, and disclaims both liability and any guarantee that it keeps working. MFA is handled only by typing the code into a visible browser, so a headless deployment cannot complete a login that demands one.
What it declares
Every artifact
- Type
- MCP server
- Origin
- Independently maintained
- Runtime
- Node.js
As an MCP server
- Type declarations
- declared
- Runs as
- local process
- Transport
- stdioHTTP
- Authentication
- user and passwordX.509
- Tools
- 2
Connections
Finding answers in written documentation, and writing what is missing
Skill assessing API usage against the SAP API Policy
Download
Install
npm add sap-note-search-mcpDerived from the package name. No recipe recorded; the README has the configuration.
Architecture
Download
README
quoted from marianfoo/sap-mcp-servers under Apache-2.0, readSAP Note Search MCP Server
Part of the sap-mcp-servers monorepo (npm workspaces) — published to npm independently as
sap-note-search-mcpwith build provenance.
MCP server for searching and retrieving SAP Notes / KB articles with full metadata extraction
Caution
This MCP Server uses private APIs from SAP behind authentication. Please check whether the use violates SAP's ToS. The author assumes no liability for this. Because of this i do not guarantee that the server will always work.
This Model Context Protocol (MCP) server gives AI coding assistants (Cursor, Claude Desktop, VS Code, etc.) direct access to SAP Notes and Knowledge Base articles. It authenticates with SAP via username/password or SAP Passport certificate and uses Playwright browser automation to retrieve actual note content.
Live Preview in Cursor

Features
- Search and fetch — find notes and retrieve full content with metadata over stdio or HTTP
- Attachment downloads —
fetch_attachmentsaves referenced files locally over stdio, without overwriting existing files - Enriched metadata — validity ranges, support packages and patches, references, prerequisites, side effects, correction summaries, attachments
- Optional correction details —
fetch(includeCorrections=true)retrieves detailed ABAP correction instructions (affected objects, per-correction prerequisites) via an additional OData call - Two auth methods — username/password (recommended) or SAP Passport certificate
- MFA/2FA support — manual code entry in headful mode
- Smart caching — session cookies cached locally (configurable TTL)
- Docker support — pre-built image with all Playwright dependencies
Quick Start
Prerequisites
- Node.js 22.12+ — Download here
- SAP S-User — with access to SAP Support Portal / me.sap.com
- An MCP client — Cursor, Claude Desktop, VS Code with Copilot, etc.
Installation
For a one-click Claude Desktop installation, download sap-notes.mcpb from the matching
SAP Notes GitHub release and open it.
The Add to Werkbank button uses the same MCPB. Werkbank downloads the bundle, reads its manifest, and shows the command and configuration form before installing it.
For other MCP clients, run the npm package directly with npx:
{
"mcpServers": {
"sap-notes": {
"command": "npx",
"args": ["-y", "sap-note-search-mcp"]
}
}
}
To develop from source, clone the sap-mcp-servers monorepo and build from its root:
git clone https://github.com/marianfoo/sap-mcp-servers.git
cd sap-mcp-servers
npm install # installs all workspaces + links @marianfoo/sap-mcp-auth locally
npm run build # builds auth first, then the servers → this one lands in packages/notes/dist
Build just this package with npm run build -w sap-note-search-mcp (after auth is built).
Authentication
The server supports two methods. Choose whichever is easier for you.
Option 1: Username / Password (Recommended)
The simplest approach — no certificate management required.
SAP_USERNAME=your.email@company.com
SAP_PASSWORD="your_sap_password"
When using a .env file, quote any value containing #; dotenv otherwise treats # and everything after it as a comment. For example, use SAP_PASSWORD="My#Pass". The same applies to PFX_PASSPHRASE.
Or pass credentials directly in your MCP client config (no .env file needed):
{
"mcpServers": {
"sap-notes": {
"command": "npx",
"args": ["-y", "sap-note-search-mcp"],
"env": {
"SAP_USERNAME": "your.email@company.com",
"SAP_PASSWORD": "your_sap_password"
}
}
}
}
Option 2: SAP Passport Certificate
Uses a .pfx client certificate for TLS-level authentication.
- Download your certificate from SAP Passport
- Place the
.pfxfile incerts/:mkdir -p certs cp ~/Downloads/sap.pfx certs/ - Configure:
PFX_PATH=./certs/sap.pfx PFX_PASSPHRASE="your_certificate_passphrase"
Auto Mode (Default)
When AUTH_METHOD=auto (the default), the server picks the first available method:
- Password — if
SAP_USERNAME+SAP_PASSWORDare set - Certificate — if
PFX_PATH+PFX_PASSPHRASEare set - Error — if neither is configured
You can force a method with AUTH_METHOD=password or AUTH_METHOD=certificate.
MFA / 2FA
If your SAP account uses two-factor authentication:
HEADFUL=true # show the browser window so you can enter the code
MFA_TIMEOUT=120000 # wait up to 2 minutes for code entry (ms)
The server detects TOTP, passcode, and verification pages automatically and waits for you to complete the challenge.
Token Caching
After successful login, session cookies are cached to token-cache.json (default TTL: 12 hours, configurable via MAX_JWT_AGE_H). Delete the file to force re-authentication.
Connect to your MCP Client
Cursor / Claude Desktop
Add to your MCP settings (settings.json or claude_desktop_config.json):
With username/password (recommended):
{
"mcpServers": {
"sap-notes": {
"command": "npx",
"args": ["-y", "sap-note-search-mcp"],
"env": {
"SAP_USERNAME": "your.email@company.com",
"SAP_PASSWORD": "your_sap_password"
}
}
}
}
With certificate (via .env file):
{
"mcpServers": {
"sap-notes": {
"command": "npx",
"args": ["-y", "sap-note-search-mcp"],
"env": {
"ENV_FILE": "/full/path/to/.env"
}
}
}
}
Note: When using
ENV_FILE, replace the path with the absolute path to your.envfile.
After adding the config, restart your MCP client. The tools will appear in the AI assistant.
Available Tools
search
Search SAP Notes by keyword, error code, component, or note number.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
q | string | Yes | — | Search query (2-200 chars) |
lang | EN | DE | No | EN | Language |
Examples:
Search for SAP Notes about "OData gateway error 415"
Find SAP Note 2744792
fetch
Retrieve full content and enriched metadata for a specific SAP Note.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
id | string | Yes | — | Note ID (alphanumeric) |
lang | EN | DE | No | EN | Language |
includeCorrections | boolean | No | false | Fetch detailed ABAP correction instructions via OData |
Returns (beyond the basic content):
- Software component validity ranges
- Support packages and patches
- Cross-references (to/from other notes)
- Prerequisites, side effects
- Correction instruction summaries and counts
- Manual activity instructions
- Attachments and SNOTE download URL
- (with
includeCorrections=true) Detailed correction entries with affected ABAP objects (TADIR) and per-correction prerequisites
If SAP responds with HTTP 429, fetch returns an error; pause before retrying.
Generic HTML and fallback JSON without note text are not returned as successful notes.
Examples:
Get the full content of SAP Note 2744792
Show me note 3481252 with correction details
fetch_attachment (stdio)
Pass an attachment URL returned by fetch to download that file locally. Optional outputDir
selects an existing directory; otherwise the tool creates a private temporary directory. Optional
filename overrides the server-provided name. Existing files are never overwritten.
The result contains the saved path, filename, content type, byte count and SHA-256. Downloads are
limited to 100 MiB, 60 seconds per download attempt and five checked redirects. If SAP Documents
requires a separate sign-in, the tool uses your configured SAP credentials once, then retries the
download. Later calls reuse the document cookies, including after restart. The working Notes session
is preserved. If SAP rejects the sign-in, correct the credentials or use interactive login and restart
the server before retrying. Set HEADFUL=true if your account requires interactive sign-in or MFA. See the tool reference for details.
Docker
A Dockerfile is included with all Playwright/Chromium dependencies pre-installed:
docker build -t mcp-sap-notes .
docker run -it \
-e SAP_USERNAME="your.email@company.com" \
-e SAP_PASSWORD="your_sap_password" \
mcp-sap-notes
Configuration Reference
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
SAP_USERNAME | * | — | SAP login username (email) |
SAP_PASSWORD | * | — | SAP login password |
PFX_PATH | * | — | Path to SAP Passport .pfx certificate |
PFX_PASSPHRASE | * | — | Certificate passphrase |
AUTH_METHOD | No | auto | auto, password, or certificate |
MFA_TIMEOUT | No | 120000 | 2FA wait timeout in ms |
MAX_JWT_AGE_H | No | 12 | Token cache lifetime in hours |
HEADFUL | No | false | Show browser window (for debugging / 2FA) |
LOG_LEVEL | No | info | debug, info, warn, error |
HTTP_PORT | No | 3123 | Port for HTTP MCP transport |
ACCESS_TOKEN | No | — | Bearer token for HTTP server auth |
* At least one auth pair is required: either SAP_USERNAME + SAP_PASSWORD or PFX_PATH + PFX_PASSPHRASE.
HTTP Server
An HTTP/SSE transport is also available for remote or multi-client setups:
npm run serve:http # start HTTP server
npm run serve:http:debug # with debug logging
Protect with a bearer token:
ACCESS_TOKEN=your-secret-token
Clients must then include Authorization: Bearer your-secret-token in every request.
Testing & Development
npm run test:auth # test authentication flow
npm run test:api # test SAP Notes API
npm run test:mcp # test full MCP server
npm run test # run all tests
Debug mode:
HEADFUL=true LOG_LEVEL=debug npm run test:auth
Project Structure
mcp-sap-notes/
├── src/
│ ├── mcp-server.ts # Main MCP server (stdio transport)
│ ├── http-mcp-server.ts # HTTP/SSE MCP transport
│ ├── auth.ts # SAP authentication (password + certificate)
│ ├── sap-notes-api.ts # SAP Notes API client + OData corrections
│ ├── html-utils.ts # HTML-to-text parsing
│ ├── schemas/
│ │ └── sap-notes.ts # Zod schemas + tool descriptions
│ ├── types.ts # TypeScript definitions
│ └── logger.ts # Logging
├── docs/
│ ├── tools.md # Detailed tool reference
│ ├── authentication.md # Auth deep dive
│ ├── architecture.md # Architecture overview
│ └── setup.md # Setup guide
├── test/ # Test scripts
├── dist/ # Compiled JS
├── certs/ # Certificate directory
├── Dockerfile # Docker image
├── env.example # Environment template
└── README.md
Troubleshooting
Authentication
| Symptom | Fix |
|---|---|
| "Could not find username field" | SAP login page may have changed — try HEADFUL=true to inspect |
| "Authentication timed out" | Check connectivity; increase MFA_TIMEOUT if using 2FA |
| "Certificate load failed" | Verify .pfx path + passphrase; check expiry |
Browser
| Symptom | Fix |
|---|---|
| "Browser launch failed" | Run npx playwright install chromium |
| Hangs during auth | Use HEADFUL=true to see what's happening |
MCP Client
| Symptom | Fix |
|---|---|
| Tools not showing | Restart client; verify absolute path in config |
| "MCP server failed to start" | Check npm run build succeeded; check deps with npm install |
See docs/authentication.md for detailed troubleshooting.
Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
License
History
Features 1, Fixes 5
Notes
Features
Bug Fixes
- auth: recover malformed SSO state and validate Notes sessions (#87) (565145c)
- deps: refresh SDK and vulnerable dependency resolutions (#83) (e20284b)
- notes: escape Unicode line breaks in SSE responses (#86) (6ca692a)
- notes: honour HEADFUL=true over stdio and on Windows (#82) (267b0f4)
- shared SSO state path on Windows, real notes version, keep SSO state on session expiry (#81) (b9ffee1)
Others providing
Compare all 6 on the Documentation page →- abap2UI5 Playgroundabap2UI5 PlaygroundABAP in the editor on the left and the abap2UI5 app it builds on the right, both inside one browser tab: the framework is transpiled to JavaScript at build time and the class in the editor is compiled when Run is pressed.community org, abapIn-browser ABAP editor beside the abap2UI5 app it builds
- mcp-sap-docsmcp-sap-docsAn MCP server over seventeen cloned SAP documentation repositories — ABAP keyword docs, capire, OpenUI5, Cloud SDK, BTP — searched with BM25 and prebuilt embeddings fused by reciprocal rank fusion.independent, capMCP server searching seventeen SAP documentation repositories
- abap-docabap-docA Node.js command that reads an ABAP package and its sub-packages over ADT and writes one PDF documenting every object in it, with an LLM writing the prose.independent, abapNode.js command writing PDF documentation for an ABAP package
- Clean-Core.ioClean-Core.ioA free hosted workspace that reads one piece of custom ABAP, redraws its business process as BPMN with a line anchor on every element, grades the SAP objects it uses Level A–D and ends in a keep, rebuild, move-to-standard or retire decision.independent, abapHosted workspace redrawing custom ABAP as BPMN and grading it
- abapdocs-code-scannerabapdocs-code-scannerReads the abapDoc comments of a class or interface's public methods and type definitions and returns their text at runtime.independent, abapReads the abapDoc comments of a class or interface's public methods and type definitions and returns their text at runtime.
Details
Sources
Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.
Compatibility and provenance
Contributors
History in the atlas
- The decline recorded for candidate:marianfoo/mcp-sap-notes on 2026-09-10 named this as the successor and as an open gap: "SAP Notes search is a real gap in the corpus and the thing that fills it has to be found some other way." Entered from the monorepo package rather than the archived repository, and from the package's own README.
- First seen.
For your agent
- Ref
artifact:marianfoo-sap-note-search-mcp- JSON
- /artifacts/marianfoo-sap-note-search-mcp.json
- MCP
- Connecting an agent