Skip to main content
Glama
marianfoo

SAP Documentation MCP Server

by marianfoo

MCP SAP Docs (Upstream)

An MCP server that gives AI assistants (Claude, Cursor, ChatGPT, etc.) access to SAP documentation through a unified search and fetch interface. It combines local full-text search and optional semantic ranking over git-cloned SAP docs with optional live queries to SAP Help, SAP Community, and Software Heroes — all exposed as MCP tools.

Install

Add to Werkbank

Or add it to any MCP client that supports streamable HTTP:

{
  "mcpServers": {
    "sap-docs": {
      "type": "http",
      "url": "https://mcp-sap-docs.marianzeis.de/mcp"
    }
  }
}

No API key or login required — the server is public and read-only.

Related MCP server: ABAP MCP Server

Public Hosted Endpoint

Ready to use — no setup required

Variant

URL

SAP Docs

http://mcp-sap-docs.marianzeis.de/mcp

ABAP

https://mcp-abap.marianzeis.de/mcp

Variants

mcp-sap-docs is the upstream repository for two MCP server variants that share one codebase and differ by configuration (MCP_VARIANT / .mcp-variant):

Variant

Scope

Extra tools

sap-docs

Broad SAP docs: UI5, CAP, Cloud SDK, ABAP, BTP, AI, Terraform

Discovery Center tools

abap

ABAP-focused: ABAP keyword docs, RAP, cheat sheets, style guides

abap_lint

Documentation Sources

Offline sources (local index, always available)

Source

Description

abap-docs-standard

Official ABAP Keyword Documentation — on-premise / full syntax

abap-docs-cloud

Official ABAP Keyword Documentation — ABAP Cloud / BTP (restricted syntax)

abap-cheat-sheets

Practical ABAP/RAP code snippets and examples

abap-fiori-showcase

Annotation-driven RAP + OData V4 + Fiori Elements feature showcase

abap-platform-rap-opensap

openSAP "Building Apps with RAP" course samples

cloud-abap-rap

ABAP Cloud + RAP example projects

abap-platform-reuse-services

RAP reuse services examples (number ranges, mail, Adobe Forms, …)

sap-styleguides

SAP Clean ABAP Style Guide and best practices

dsag-abap-leitfaden

DSAG ABAP Leitfaden (German) development guidelines

btp-cloud-platform

SAP BTP concepts, development, security, administration

sap-artificial-intelligence

SAP AI Core and SAP AI Launchpad documentation

ui5

SAPUI5 / OpenUI5 framework documentation

cap

SAP Cloud Application Programming Model (CAP) documentation

cloud-sdk

SAP Cloud SDK documentation

terraform-provider-btp

SAP Terraform Provider for BTP — resources and data sources

architecture-center

SAP Architecture Center reference architectures and guidance

wdi5

wdi5 (WebdriverIO + UI5) testing framework documentation

Additional SAP Docs sources

The sap-docs profile also indexes the following official documentation. These sources use the existing Markdown/MDX pipeline and link to their upstream files.

Source IDs

Coverage

btp-connectivity

Destinations, Cloud Connector, principal propagation, HTTP/RFC

cloud-sdk-python, cloud-sdk-ai-python

Python BTP and AI SDK documentation and examples

odata-vocabularies

OData annotation terms and types; experimental labels are retained

btp-job-scheduling-service, btp-cloud-logging

Application jobs and observability

btp-cloud-identity-services, btp-cloud-identity-integration

Identity Authentication, Identity Provisioning, and system integration

btp-integration-suite, btp-event-mesh

Consolidated Integrations and APIs guide, plus Event Mesh

btp-business-application-studio

Dev spaces, development, and troubleshooting

btp-continuous-integration-and-delivery, btp-cloud-transport-management

Managed pipelines and cloud transports

Integration Suite indexes docs/ISuite_Integrations_APIs and docs/ISuite_Event_Mesh. Parallel Cloud Integration/API Management guide copies are excluded to avoid repeated content and mixed navigation terminology. Python SDK sources include current docs-python content; historical version folders are excluded.

SAP-docs repositories carry CC-BY-4.0 notices; SAP Cloud SDK, AI SDK, and OData vocabularies carry Apache-2.0 notices. The source checkouts retain their upstream license files, and search/fetch results link to the original documents. See source expansion plan for validation and scope.

Online sources (live queries, enabled by default)

Source

Description

SAP Help Portal

Official SAP product documentation (broad scope)

SAP Community

Community blogs, Q&A, and troubleshooting posts

Software Heroes

ABAP/RAP articles and tutorials (EN + DE, deduplicated)

Available Tools

Shared tools (both variants)

Tool

Description

search

Unified search (BM25 with optional semantic ranking) across offline docs and optional online sources. Supports query, k, includeOnline, includeSamples, abapFlavor, sources parameters.

fetch

Retrieve full document content by ID returned from search.

abap_feature_matrix

Check ABAP feature availability across SAP releases (7.40–LATEST) using the Software Heroes feature matrix.

sap_community_search

Dedicated SAP Community search via the Khoros LiQL API — returns full content of top posts. Use when search results are insufficient for specific errors or workarounds.

sap_search_objects

Search SAP released objects (classes, interfaces, tables, CDS views, …) by name/component/type from the official SAP/abap-atc-cr-cv-s4hc release state repo. Useful for clean core compliance discovery.

sap_get_object_details

Full release state details for a specific SAP object including clean core level (A/B/C/D), successor objects, and optional compliance verdict.

sap-docs variant only

Tool

Description

sap_discovery_center_search

Search the SAP Discovery Center service catalog for BTP services by keyword, category, or license model.

sap_discovery_center_service

Get comprehensive BTP service details: pricing plans, product roadmap, documentation links, and key features. Accepts a service UUID or name.

ui5_version_diff

List all matching FEATURE / FIX / DEPRECATED changes and SAPUI5 What's New entries for a version or range from a local all-changes bundle (dist/data/ui5-lib-diff/all-changes.json). npm run setup refreshes it automatically; use npm run download:ui5-lib-diff during setup/rebuild for a manual refresh. Pair with the ui5-version-upgrade skill and @ui5/mcp-server for a full upgrade workflow.

abap variant only

Tool

Description

abap_lint

Run static code analysis on ABAP source code using abaplint. Auto-detects file type from code patterns. Returns findings with line numbers, severity, and rule keys.

Architecture Overview

  • Upstream source of truth: mcp-sap-docs

  • One-way sync target: abap-mcp-server

  • Search defaults to BM25 keyword ranking; optional semantic scores are combined via Reciprocal Rank Fusion (RRF)

  • Embeddings model: Xenova/all-MiniLM-L6-v2 (~90 MB, cached in dist/models/)

Variant Selection

Resolution order:

  1. MCP_VARIANT environment variable

  2. .mcp-variant file in repo root

  3. fallback: sap-docs

Examples:

# 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 Behavior

search performs fused retrieval over:

  • Offline FTS index (local submodule content)

  • Optional online sources (includeOnline=true):

    • SAP Help

    • SAP Community

    • Software Heroes content search (EN/DE merge + dedupe)

Ranking and filtering highlights:

  • BM25 search with optional semantic ranking — keyword and meaning, fused via RRF

  • Reciprocal Rank Fusion (RRF) across offline and online sources

  • Source-level boosts from metadata

  • includeSamples can remove sample-heavy sources

  • abapFlavor (standard / cloud / auto) filters official ABAP docs libraries while keeping non-ABAP sources

  • sources can restrict offline libraries explicitly

Fetch content limits

Community post bodies are returned as Markdown, including code, links, images and tables. Clients that previously parsed raw Community HTML must consume Markdown. Document IDs, source URLs and response schemas are unchanged. If conversion fails, that post keeps its original HTML with a notice; other posts in the same batch are still returned.

SAP Help and Community fetches default to 75,000 characters. Shortened results include metadata.truncation with exact loss counts. Self-hosted servers can set MAX_CONTENT_LENGTH before startup; see content size limits.

Offline search defaults to BM25 keyword ranking. Optional semantic ranking uses Xenova/all-MiniLM-L6-v2 to reorder the lexical candidates; it does not search outside that candidate pool. Enable it explicitly with EMBEDDING_WEIGHT=0.7 after building complete document and section embeddings and evaluating your own queries.

Embeddings are stored in docs.sqlite, with the model cached in dist/models/. Old or partial embedding artifacts fall back to lexical ranking with a rebuild warning. See docs/HYBRID-SEARCH.md for setup, limitations and costs.

Offline-Only Mode

search includes online sources by default. To run offline-only, use:

  • local index/submodules only (npm run setup + npm run build)

  • includeOnline=false in each search request

Example search request body:

{
  "query": "RAP draft",
  "k": 8,
  "includeOnline": false
}

Docker (offline-only)

Run the container with host binding and call search with 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

For strict air-gapped execution, disable container networking:

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

Notes:

  • With --network none, online fetches are impossible by runtime isolation.

  • Startup may log warnings for online prefetch attempts (for example ABAP feature matrix); this does not prevent offline search usage.

Quick Start (Local)

npm ci
npm run setup
npm run build

npm run setup updates the selected variant's documentation sources to their configured branch tips and builds the index, including embeddings. Nested submodules stay at the commits recorded by those sources. To omit optional nested repositories (for example when their upstream URLs require SSH credentials), use SKIP_NESTED_SUBMODULES=1 npm run setup in Bash, including Git Bash on Windows.

npm run setup:submodules instead checks out the repository's recorded source commits. It does not fetch the latest documentation or apply variant filtering. Run npm run setup when refreshing an existing installation.

Start server modes:

# MCP stdio
npm start

# HTTP status/dev server
npm run start:http

# MCP streamable HTTP
npm run start:streamable

Default ports by variant:

  • sap-docs: HTTP 3001, streamable 3122

  • abap: HTTP 3002, streamable 3124

Health checks:

curl -sS http://127.0.0.1:3122/health | jq .
curl -sS http://127.0.0.1:3001/status | jq .

Use variant-specific ports when running abap profile.

Build and Setup Scripts

Script names remain shared (setup, build, start, start:streamable). Behavior changes by variant config:

  • setup.sh only initializes variant-allowed submodules

  • build-index only includes variant-allowed libraries

  • build-fts only indexes variant-allowed libraries

This keeps abap faster and smaller without maintaining a separate build script set.

Docker

Build image for a variant:

# 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 .

Run streamable 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

SAP BTP Cloud Foundry

For BTP CF, the recommended sap-docs path is to deploy the maintained ghcr.io/marianfoo/mcp-sap-docs:sap-docs image with MTA. Cloud Foundry only pulls and runs the prepared image, including embedding artifacts. Ranking remains lexical unless a positive EMBEDDING_WEIGHT is explicitly configured.

See docs/BTP-CF-DEPLOYMENT.md for the public-first deployment guide. Start with Deployment Options and Tradeoffs to choose between MTA, direct cf push, custom registry images, and refresh setup.

One-Way Sync to abap-mcp-server

This repository contains direct sync automation:

  • Workflow: .github/workflows/sync-to-abap-main.yml

  • Script: scripts/sync-to-abap.sh

Flow:

  1. Release Please publishes a release in mcp-sap-docs after its release PR is merged

  2. The release workflow explicitly dispatches the ABAP sync workflow

  3. The sync workflow clones abap-mcp-server

  4. Tracked upstream files are synced (with exclude rules), then the ABAP overlay is applied

  5. .mcp-variant is forced to abap and ABAP package identity is patched

  6. A sync commit is pushed to abap-mcp-server/main

  7. That push triggers the ABAP deployment workflow

The sync workflow also supports manual runs, including dry runs and a custom target branch. Only pushes to the downstream main branch trigger automatic deployment.

Required secret in mcp-sap-docs repo:

  • ABAP_REPO_SYNC_TOKEN: a dedicated token with access to push code and workflow changes to abap-mcp-server. Keep this separate from GITHUB_TOKEN, whose pushes do not trigger subsequent workflows.

Deployment Model

  • mcp-sap-docs: owns release versions and dispatches its deployment and ABAP sync when a release is created

  • abap-mcp-server: deploys on pushes to main, including upstream sync commits, or via workflow_dispatch

The downstream repository does not publish GitHub releases. Its deployment must therefore listen for sync pushes, not release: published. Upstream releases control when automatic syncs occur.

The ABAP deployment workflow is maintained in sync/abap.overlay/.github/workflows/deploy-abap-mcp-server.yml. Change that upstream overlay so the fix persists across future syncs.

After merging a deployment fix, publish the next upstream release or manually run sync-to-abap-main.yml against upstream main. Confirm that the downstream deploy run succeeds and that https://mcp-abap.marianzeis.de/health reports the version in the synced ABAP package.json; a successful sync alone does not confirm deployment.

PM2 Runtime

ecosystem.config.cjs is variant-aware and resolves:

  • process names

  • ports

  • deploy path

from config/variants/*.json.

Validation Commands

npm run build:tsc
npm run test:url-generation
npm run test:integration
npm run test:software-heroes
npm run test:discovery-center # mocked Discovery Center REST contract tests
npm run test:discovery-center:live # opt-in live API smoke test
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

Additional Docs

  • docs/ARCHITECTURE.md

  • docs/DEV.md

  • docs/TESTS.md

  • docs/UPSTREAM-ONE-WAY-SYNC-IMPLEMENTATION.md

  • REMOTE_SETUP.md

Curated SAP tutorials

The SAP Docs profile includes 32 additional official tutorials in sap-tutorials-ai, sap-tutorials-hana, and sap-tutorials-integration: AI Core orchestration V2 and grounding, HANA Cloud SQLScript and CAP, Integration Suite MCP Gateway, and Cloud Transport Management. The existing Fiori OPA guide is still available separately.

Use product and task terms, for example SAP HANA Cloud SQLScript stored procedure tutorial or SAP Integration Suite MCP Gateway tutorial. Use sources to narrow an ambiguous search; leave it unset for cross-source discovery. Tutorials provide worked examples and retain their prerequisites; product and SDK documentation remain the reference for detailed API behavior.

The explicit selection is in config/tutorials.json. Fetched tutorials include readable option labels, absolute asset/prerequisite links, and their published page URL. The unpublished transport overview links to its official GitHub source. Source content and its original attribution are preserved; the original tutorial repository's license still applies.

Available Tools

9 tools
abap_feature_matrixA

ABAP FEATURE MATRIX: abap_feature_matrix(query="feature keywords")

FUNCTION NAME: abap_feature_matrix

Search the Software Heroes ABAP Feature Matrix to check feature availability across SAP releases. The matrix shows which ABAP features are available in different SAP releases (7.40, 7.50, 7.52, 7.54, 7.55, 7.56, 7.57, 2020, 2021, 2022, 2023, LATEST).

DATA SOURCE: https://software-heroes.com/en/abap-feature-matrix Full matrix is fetched in English and cached for 24 hours. Filtering is done locally.

STATUS MARKERS: • ✅ available - Feature is available in the release • ❌ unavailable - Feature is not available • ⭕ deprecated - Feature is deprecated • ❔ needs_review - Status needs verification • 🔽 downport - Feature was backported from a newer release

PARAMETERS: • query (optional): Feature keywords to search for (e.g., "inline declaration", "CORRESPONDING", "mesh"). If empty, returns all features. • limit (optional): Maximum number of results. If not specified, returns all matching features.

RETURNS JSON with: • matches: Array of matching features with:

  • feature: Feature name

  • section: Category (e.g., "ABAP SQL", "ABAP Statements")

  • link: URL to more information (if available)

  • statusByRelease: Object mapping release versions to status

  • score: Relevance score • meta: Matrix metadata (totalFeatures, totalSections, sections) • sourceUrl: Attribution URL to Software Heroes • legend: Explanation of status markers

EXAMPLES: abap_feature_matrix(query="inline declaration") abap_feature_matrix(query="CORRESPONDING") abap_feature_matrix() - returns all features abap_feature_matrix(query="CDS", limit=10)

USE CASES: • Check if a feature is available in your target SAP release • Find when a specific ABAP feature was introduced • Compare feature availability across releases • Get full matrix and let LLM interpret/filter results

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results. If not specified, returns all matching features.
queryNoFeature keywords to search for, in ENGLISH (matrix is English). If empty or not provided, returns all features.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaYes
legendYes
matchesYes
sourceUrlYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the burden. It discloses the data source, caching behavior (24-hour cache), local filtering, and status markers. It also describes the return structure with JSON fields. No destructive or auth-related information is needed as it is a read-only query tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (FUNCTION NAME, DESCRIPTION, DATA SOURCE, STATUS MARKERS, PARAMETERS, RETURNS, EXAMPLES, USE CASES). It is somewhat verbose but every section adds value. The key purpose is front-loaded in the first line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 optional parameters, no required params, output schema present), the description is complete. It explains all possible behaviors, return fields, status meanings, and provides multiple usage examples. An agent can use this tool without ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both query and limit are defined). The description adds significant value: it clarifies query expects English keywords, provides concrete examples (inline declaration, CORRESPONDING, CDS), shows how to use limit with an example, and demonstrates empty query behavior. This greatly aids correct parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it searches the ABAP Feature Matrix to check feature availability across SAP releases. It clearly distinguishes itself from sibling tools that search SAP community or discovery center, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'USE CASES' section lists four specific scenarios for when to use this tool (check feature availability, find introduction, compare releases, get full matrix). While it doesn't explicitly state when not to use or mention alternatives, the scenarios are clear and comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchA

GET FULL DOCUMENT CONTENT: fetch(id="result_id")

FUNCTION NAME: fetch

Retrieves the full content of a document from search results.

USAGE:

  1. First use search() to find relevant documents

  2. Use the 'id' from search results to fetch full content

  3. Returns complete document text with metadata

PARAMETERS: • id (required): Document ID from search results. Use the exact ID returned by search.

RETURNS: • id: Document identifier • title: Document title • text: Full document content (markdown or code) • url: Link to online documentation (if available) • metadata: Source information and content details

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDocument ID from search results. Use exact IDs returned by search.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
textYes
titleYes
metadataNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so description carries full burden. It states returns full document text with metadata and lists return fields. Implies safe read operation, but could disclose potential costs or limits. Still, adequate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with headers (usage, parameters, returns). Front-loaded with purpose. A bit verbose but every sentence adds value. Minor redundancy could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple 1-param tool with output schema. Description covers workflow, parameter usage, and return fields. Nothing missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already has 100% coverage with description and examples. Description adds crucial context: ID must come from search results and be exact. Adds meaning beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Retrieves the full content of a document from search results.' The verb 'fetch' and resource 'full content of a document' are specific. Distinguishes from sibling 'search' by outlining the workflow: use search first, then fetch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage instructions provided: '1. First use search() to find relevant documents, 2. Use the 'id' from search results to fetch full content.' Also emphasizes using exact IDs. Clearly guides when to use and implies prerequisite.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sap_discovery_center_serviceA

GET SAP BTP SERVICE DETAILS: sap_discovery_center_service(serviceId="abc-123-def")

FUNCTION NAME: sap_discovery_center_service

Get comprehensive details for a specific SAP BTP service from the SAP Discovery Center, including pricing plans with per-unit costs, product roadmap, documentation links, and key features.

Use this tool when you need to:

  • Get pricing information for a BTP service (plans, metrics, costs per unit, free tier availability)

  • View the product roadmap and upcoming features planned for a service

  • Find official documentation, tutorials, and community resources for a service

  • Understand service plans and their differences (free tier vs. standard vs. extended)

  • Get the SAP cost calculator link or SAP Store link for a service

  • Learn about key features and capabilities of a specific service (headlines)

  • Check what billing metrics a service uses (e.g., Capacity Units, API Calls)

You can pass either a UUID from search results OR the service name directly (e.g., "SAP Build Code", "SAP AI Core", "SAP HANA Cloud"). The tool will auto-resolve names to UUIDs.

PARAMETERS: • serviceId (required): Service UUID from search results OR the service name (e.g., "SAP Build Code"). Names are auto-resolved via search. • currency (optional, default "USD"): Pricing currency code (e.g., "EUR", "USD", "GBP"). • include_roadmap (optional, default true): Include product roadmap data with planned features by quarter. • include_pricing (optional, default true): Include pricing plans with per-unit costs and billing metrics.

RETURNS (JSON): • Core: name, description, category, productType, licenseModelType, tags, csnComponent • links: calculator, sapStore, featureDescription, discoveryCenter URLs • headlines[]: Key feature highlights with descriptions • resources: Documentation links grouped by type (documentation, tutorials, community, support, calculator) • metrics[]: Billing metric definitions (name, description, code) • pricing[]: Service plans with planName, planCode, description, usageType, features, and commercialModels (model, metric, chargingPeriod, pricePerUnit, blockSize). The pricing section contains actual per-unit prices from the SAP Discovery Center (e.g., "1.04 EUR" per Capacity Unit/month). • roadmap: Planned features organized by quarter with categories and deliverables (or null if no roadmap exists)

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoPricing currency code (default 'USD').
serviceIdYesService UUID from search results OR service name (e.g., 'SAP Build Code'). Names are auto-resolved.
include_pricingNoInclude pricing plans (default true).
include_roadmapNoInclude product roadmap (default true).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description carries full burden. It discloses auto-resolution of serviceId, default parameter values, and detailed return structure. Does not mention error handling or rate limits, but overall transparent for a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is front-loaded with a concise function signature, then organized into use-case bullets and detailed sections. Slightly verbose in the return structure but well-structured and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description provides a comprehensive return structure (JSON fields). Covers use cases, parameter details, auto-resolution, and defaults. Complete for a moderately complex tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and description adds valuable semantics: auto-resolution for serviceId, default currency 'USD', and defaults for boolean flags. All parameters are explained beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'GET SAP BTP SERVICE DETAILS' and lists specific data returned (pricing, roadmap, documentation). This clearly distinguishes it from sibling tools like sap_discovery_center_search (search) and sap_get_object_details (general details).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a bulleted list of when to use, covering pricing, roadmap, docs, service plans, etc. It does not explicitly state when not to use, but it implies context (e.g., needing a service name or UUID). Lacks explicit alternatives but clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sap_get_object_detailsA

GET SAP OBJECT DETAILS: sap_get_object_details(object_type="CLAS", object_name="CL_ABAP_REGEX")

Get complete release state details by actual object type and name, with TADIR fallback for compatibility. A TADIR container can contain multiple objects; use the actual type/name to select a specific member. A TADIR lookup returns one member. To list all members, use sap_search_objects with its TADIR type as object_type, name as query, and clean_core_level="D".

Use this tool when you: • Know a specific SAP object name and need to verify if it is released/deprecated/internal • Want to check Clean Core compliance: is this object allowed in BTP ABAP or S/4HANA Cloud? • Need to find the recommended successor object when a deprecated SAP API should be replaced • Want the full context of an object: software component, application component, Clean Core level (A/B/C/D), and release state • Are checking whether a specific table (MARA, VBAK), class (CL_*), interface (IF_*), or CDS view is safe to use in a clean core / cloud-ready ABAP development scenario

Clean Core levels: A=Released API (safe for cloud/BTP), B=Classic API (on-premise only), C=Internal/Stable (not for customer use), D=No API

Optionally pass target_clean_core_level to receive an explicit compliance verdict for that object.

PARAMETERS: • object_type (required): Actual or TADIR type, e.g. "FUNC", "BADI_DEF", "CDS_STOB", "CLAS", "DDLS", "FUGR" • object_name (required): Exact object name, e.g. "CL_ABAP_REGEX", "EKKO", "IF_OS_TRANSACTION" • system_type (optional, default: "public_cloud"): "public_cloud" | "btp" | "private_cloud" | "on_premise" • target_clean_core_level (optional): "A" or "B" — receive a compliance verdict against this target

RETURNS (JSON with): • found: boolean • objectType, objectName: Actual identity (TADIR identity for legacy records) • tadirObject, tadirObjName: Original TADIR container identity when available • state, cleanCoreLevel, cleanCoreLevelLabel • applicationComponent, softwareComponent • successor: successor classification and recommended replacement objects • successorObjects: full details of successor objects (if available in the dataset) • complianceStatus (if target_clean_core_level given): "compliant" | "non_compliant"

ParametersJSON Schema
NameRequiredDescriptionDefault
object_nameYesExact object name, e.g. CL_ABAP_REGEX, EKKO, IF_OS_TRANSACTION.
object_typeYesActual or TADIR object type, e.g. FUNC, BADI_DEF, CDS_STOB, CLAS, DDLS, FUGR.
system_typeNoTarget SAP system type. Default: public_cloud.public_cloud
target_clean_core_levelNoOptional compliance target level. Returns complianceStatus: compliant or non_compliant.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does well: it discloses the TADIR fallback behavior, that a TADIR lookup resolves to a single member while multiple members may exist, and enumerates the returned JSON fields including successor and complianceStatus. It does not cover error/not-found behavior or any auth or rate constraints, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with a concrete invocation example followed by scoping rules, a use-when list, a level glossary, parameter notes, and a returns block. It is long, and the RETURNS block plus parameter bullet list partially duplicate the schema, but the structure keeps each section scannable and purposeful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must describe returns, and it does so field by field (found, objectType, tadirObject, state, cleanCoreLevel, applicationComponent, successor, complianceStatus). Combined with the Clean Core level glossary and system_type semantics, an agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains the distinction between 'actual' vs TADIR type for object_type selection and clarifies that target_clean_core_level triggers an explicit compliance verdict. Only minor value-add, but it goes past restating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get complete release state details by actual object type and name') and immediately distinguishes itself from the sibling sap_search_objects by describing the TADIR fallback and the one-member-per-lookup behavior. An agent can tell what this returns (release state, Clean Core level, successor) without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit bulleted 'Use this tool when you:' list covering verification, Clean Core compliance, successor lookup, and full object context. It also names the alternative route explicitly ('To list all members, use sap_search_objects with its TADIR type as object_type, name as query, and clean_core_level="D"'), so the routing decision is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sap_search_objectsA

SEARCH SAP RELEASED OBJECTS: sap_search_objects(query="CL_ABAP_REGEX")

Search SAP released objects from the official SAP API Release State repository (SAP/abap-atc-cr-cv-s4hc).

Use this tool when you need to: • Find which SAP objects (classes, interfaces, tables, CDS views, function modules, BAdIs, etc.) are available and released for a given topic or application area • Discover released APIs in a specific application component (e.g., MM-PUR, FI-GL, SD-SLS) • Browse what objects exist in a system type (S/4HANA Cloud Public, BTP ABAP, Private Cloud) • Filter by Clean Core compliance level: A=Released APIs only, B=includes Classic APIs, C=includes internal/stable, D=all objects • Find alternative released objects when looking for functionality in a specific domain

Do NOT use this for documentation content, code examples, or general SAP help — use the search tool for those. Use this specifically for API release status and clean core compliance discovery.

PARAMETERS: • query (optional): Object name or keyword to search (e.g. "CL_ABAP_REGEX", "purchase order", "MM") • system_type (optional, default: "public_cloud"): "public_cloud" | "btp" | "private_cloud" | "on_premise" • clean_core_level (optional, default: "A"): "A" | "B" | "C" | "D" — cumulative: B includes A+B, C includes A+B+C • object_type (optional): Actual or TADIR type, e.g. "FUNC", "BADI_DEF", "CDS_STOB", "CLAS", "DDLS", "FUGR" • app_component (optional): Application component prefix, e.g. "MM-PUR", "FI-GL" • state (optional): "released" | "deprecated" | "classicAPI" | "stable" | "notToBeReleased" | "noAPI" • limit (optional, default: 25, max: 100): Number of results per page • offset (optional, default: 0): Pagination offset

RETURNS (JSON with): • objects: Array of SAP objects containing:

  • objectType, objectName: Actual identity (TADIR identity for legacy records)

  • tadirObject, tadirObjName: Original TADIR container when available; also searchable

  • state, cleanCoreLevel, applicationComponent, softwareComponent • total: Total matching count • hasMore: Whether more results exist • nextOffset: Offset to use for next page

[PRE-LOADED CONTEXT] Context loading — data will be available on first use.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoResults per page. Default: 25. Max: 100.
queryNoObject name or topic keyword to search, in ENGLISH.
stateNoFilter by release state.
offsetNoPagination offset. Default: 0.
object_typeNoActual or TADIR object type filter, e.g. FUNC, BADI_DEF, CDS_STOB, CLAS, DDLS, FUGR.
system_typeNoTarget SAP system type. Default: public_cloud.public_cloud
app_componentNoApplication component prefix, e.g. MM-PUR, FI-GL, SD-SLS.
clean_core_levelNoMaximum Clean Core level to include. A=Released only, B=+Classic, C=+Internal, D=all. Default: A.A

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely succeeds: it names the data source, discloses the return shape (objects/total/hasMore/nextOffset) and pagination, and explains the cumulative nature of clean_core_level. It omits auth/permission requirements and rate limits, which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the intent and a usage/anti-usage section, which is efficient for an agent scanning for routing. The trailing parameter enumeration duplicates structured schema data and is the one part that does not fully earn its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter filter tool with no output schema, the description compensates by documenting the return object, pagination fields, the data source, and the semantics of the trickier filters. It is largely complete, with only operational details (auth, freshness of release data) left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all eight parameters. The description's parameter block largely restates the schema (query examples, defaults, enums), and the cumulative clean-core note adds only marginal meaning over the schema's 'A=Released only ... D=all'. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: searching SAP released objects from the official SAP API Release State repository. It explicitly names the sibling it is not for (use `search` for docs/code/help), so an agent can separate it from the other search tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit bulleted list of when-to-use scenarios (topic discovery, application component lookup, system-type browsing, clean-core filtering) plus a negative instruction routing documentation queries to the `search` tool. Both the selecting condition and the alternative are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui5_version_diffA

UI5 VERSION DIFF: ui5_version_diff(library="SAPUI5", from_version="1.108.0", to_version="1.130.0")

FUNCTION NAME: ui5_version_diff

List the new features, fixes, deprecations, and SAPUI5 What's New entries that landed between two UI5 releases, or inspect one exact release. Use this when planning or executing an upgrade so you know which workarounds can be dropped, which APIs are now deprecated, and which fixes might replace local patches.

DATA SOURCE: local all-changes bundle at UI5_LIB_DIFF_BUNDLE_PATH (default: dist/data/ui5-lib-diff/all-changes.json). The runtime tool is local-only and does not fetch hosted URLs. Refresh the bundle during setup with npm run download:ui5-lib-diff. If a requested release is newer than the local bundle, the response includes meta.notes and meta.generatedAt so the caller can tell setup data is stale.

RANGE SEMANTICS: returns changes that landed AFTER from_version up to and including to_version (i.e. what you gain by upgrading from from_version to to_version). If a requested patch version is unavailable, the tool uses the nearest lower available version with the same major.minor, matching the web app. For one release, pass version instead of a range.

PARAMETERS: • library (optional, default "SAPUI5"): "SAPUI5" or "OpenUI5". • version (optional): exact release to inspect, e.g. "1.130.0". Can also be supplied as the only from_version or only to_version. • from_version + to_version (optional range pair): version you are upgrading FROM/TO, e.g. "1.108.0" -> "1.130.0". • types (optional): subset of ["FEATURE", "FIX", "DEPRECATED"]. Defaults to all three. • ui5_library (optional): case-insensitive substring filter on the UI5 library, e.g. "sap.m", "sap.ui.core", "sap.fe". • query (optional): case-insensitive substring filter on change text and What's New title/description, e.g. "Table", "ObjectStatus", "ManagedObject".

RETURNS JSON with: • mode, library, from_version, to_version, version? • versionsInRange: versions covered by the range (newest first) • counts: { FEATURE, FIX, DEPRECATED } totals across the full range • totalEntries: sum of counts • entries: [{ version, date, library, type, text, commit_url? }] • whatsNewEntries, whatsNewTotalEntries: SAPUI5 What's New entries for the same version/range • meta: { availableVersions, minVersion, maxVersion, generatedAt, sourceDataPath, cacheSource, requested, resolved, notes? } — "notes" is a list of soft signals (version resolution, stale-bundle hints, out-of-range hints, coercion warnings) • sourceUrl: browser URL for human inspection of the same range

USE CASES: • Upgrade planning: "What deprecations should I clean up before moving 1.108 -> 1.130?" • Workaround cleanup: filter by query="" to find the fix that replaces a local patch • Library-scoped review: ui5_library="sap.m" to focus on a single library • Combine with @ui5/mcp-server tools (run_ui5_linter, run_manifest_validation, get_api_reference) for code-level follow-up

EXAMPLES: ui5_version_diff(from_version="1.108.0", to_version="1.130.0", types=["DEPRECATED"]) ui5_version_diff(version="1.130.0", ui5_library="sap.m") ui5_version_diff(library="OpenUI5", from_version="1.120.0", to_version="1.130.0", ui5_library="sap.m") ui5_version_diff(from_version="1.96.0", to_version="1.120.0", query="ObjectStatus")

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoCase-insensitive substring filter on change text and What's New title/description.
typesNoFilter to a subset of change types. Defaults to all three.
libraryNoWhich UI5 flavour to diff. Defaults to SAPUI5.SAPUI5
versionNoSingle UI5 release to inspect, e.g. "1.130.0". If unavailable, resolves to the nearest lower available patch with the same major.minor.
to_versionNoVersion you are upgrading to (inclusive bound), e.g. "1.130.0". If unavailable, resolves to the nearest lower available patch with the same major.minor.
ui5_libraryNoCase-insensitive substring filter on UI5 library name (e.g. "sap.m", "sap.ui.core").
from_versionNoVersion you are upgrading from (exclusive bound), e.g. "1.108.0". If unavailable, resolves to the nearest lower available patch with the same major.minor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
metaNo
modeYes
countsYes
entriesYes
libraryYes
versionNo
sourceUrlYes
to_versionYes
from_versionYes
totalEntriesYes
versionsInRangeYes
whatsNewEntriesYes
whatsNewTotalEntriesYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It clearly discloses the data source (local all-changes bundle), runtime behavior (local-only, no hosted URLs), version resolution logic (nearest lower available patch), and signals like meta.notes for stale data. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections, front-loaded purpose, and clear examples. However, it is quite verbose; some information could be condensed without losing clarity. Still, the structure aids readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (7 parameters, no required, output schema exists), the description is highly complete. It covers data source, version resolution, return structure, and use cases. The presence of output schema does not reduce the need because description still adds context on meta fields and version resolution.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), but the description significantly adds value: it explains range semantics (exclusive from, inclusive to), details each parameter's role, provides examples, and clarifies edge cases like single version usage. This goes well beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool lists new features, fixes, deprecations, and What's New entries between two UI5 releases or for one release. It also specifies the use case of upgrade planning. This makes the purpose distinct from sibling tools which cover ABAP, community search, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool for upgrade planning and gives concrete use cases (upgrade planning, workaround cleanup, library-scoped review). It also mentions combining with other @ui5/mcp-server tools. However, it does not explicitly contrast with alternative tools or state when not to use it, so it's slightly below perfect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.3.62
    • Changedsearch2 fields changed
      • changedInput schema / properties / query / description
        Previous value: -"Search terms for ABAP/RAP documentation, in ENGLISH (corpus is primarily English). Be specific and use technical terms."New value: +"Search terms for SAP documentation, in ENGLISH (corpus is primarily English). Be specific and include the product and technical terms."
      • changedInput schema / properties / sources / description
        Previous value: -"Optional: specific source IDs to search. If not provided, searches all ABAP sources."New value: +"Optional: specific source IDs to search. If not provided, searches all sources configured for the active profile."
  2. 2 tool updatesv0.3.57
    • Changedsap_get_object_details1 field changed
      • changedInput schema / properties / object_type / description
        Previous value: -"TADIR object type, e.g. CLAS, TABL, INTF, DDLS, FUGR, BDEF."New value: +"Actual or TADIR object type, e.g. FUNC, BADI_DEF, CDS_STOB, CLAS, DDLS, FUGR."
    • Changedsap_search_objects1 field changed
      • changedInput schema / properties / object_type / description
        Previous value: -"TADIR object type filter, e.g. CLAS, INTF, TABL, DDLS, FUGR, BDEF, SRVD."New value: +"Actual or TADIR object type filter, e.g. FUNC, BADI_DEF, CDS_STOB, CLAS, DDLS, FUGR."
  3. 11 tool updatesv0.3.50
    • Addedabap_feature_matrix
    • Changedfetch3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Unique document ID from search results. Use exact IDs returned by search."New value: +"Document ID from search results. Use exact IDs returned by search."
      • changedInput schema / properties / id / examples
        Previous value: -[
        -  "/cap/guides/domain-modeling",
        -  "/sapui5/controls/button-properties",
        -  "/openui5-api/sap/m/Button",
        -  "/abap-docs-758/inline-declarations",
        -  "community-12345"
        -]New value: +[
        +  "/abap-docs-standard/abapselect",
        +  "/abap-docs-cloud/abaploop",
        +  "/abap-cheat-sheets/rap",
        +  "/sap-styleguides/clean-abap"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "id": {
        +      "type": "string"
        +    },
        +    "metadata": {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    "text": {
        +      "type": "string"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "url": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "title",
        +    "text",
        +    "url"
        +  ],
        +  "type": "object"
        +}
    • Changedsap_community_search5 fields changed
      • addedInput schema / properties / k
        Added value: +{
        +  "default": 30,
        +  "description": "Number of results to return. Default: 30.",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / minKudos
        Added value: +{
        +  "default": 1,
        +  "description": "Minimum kudos (likes) a post must have. Default 1 (filters zero-engagement posts). Set 0 for broadest search (niche/recent topics). Set higher (5-10) for well-received, community-validated content only.",
        +  "maximum": 100,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / query / description
        Previous value: -"Search terms for SAP Community. Include error codes and specific technical details."New value: +"Search terms for SAP Community, in ENGLISH (corpus is primarily English). Be specific - use error messages, symptoms, or technical terms."
      • removedInput schema / properties / query / examples
        Removed value: -[
        -  "CAP action parameter binary file upload 415 error",
        -  "wizard implementation best practices",
        -  "fiori elements authentication",
        -  "UI5 deployment issues",
        -  "wdi5 test automation problems"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "results": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "id": {
        +            "type": "string"
        +          },
        +          "metadata": {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          "score": {
        +            "type": "number"
        +          },
        +          "snippet": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Addedsap_discovery_center_search
    • Addedsap_discovery_center_service
    • Addedsap_get_object_details
    • Removedsap_help_get
    • Removedsap_help_search
    • Addedsap_search_objects
    • Changedsearch10 fields changed
      • addedInput schema / properties / abapFlavor
        Added value: +{
        +  "default": "auto",
        +  "description": "Filter by ABAP flavor: 'standard' (on-premise), 'cloud' (BTP), or 'auto' (detect from query). Default: auto. Offline: picks the abap-docs library. Online: an EXPLICIT 'standard'/'cloud' also scopes the SAP Help leg to the matching ABAP product, removing cross-product noise. QUERY-DOMAIN signal ('this is an ABAP-language question'), NOT a system flag. Route by domain: ABAP language → 'standard'/'cloud'; FUNCTIONAL/config → 'auto' + the `product` param (e.g. SAP_S4HANA_ON-PREMISE); CAP/UI5/Fiori → 'auto' (offline corpus is authoritative; the online leg stays unscoped for these). Forcing 'standard' on a non-ABAP query buries the relevant docs.",
        +  "enum": [
        +    "standard",
        +    "cloud",
        +    "auto"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / includeOnline
        Added value: +{
        +  "default": true,
        +  "description": "Include online sources (SAP Help, SAP Community, Software Heroes). Default: true. Only turn off if online search is blocked/slow/unreliable or you explicitly want offline-only sources.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / includeSamples
        Added value: +{
        +  "default": true,
        +  "description": "Include sample-heavy offline sources (cheat sheets, showcases, example repos). Default: true. Turn off if you want fewer code examples and more reference/guidance docs.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / k
        Added value: +{
        +  "default": 50,
        +  "description": "Number of results to return. Default: 50.",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / product
        Added value: +{
        +  "description": "Optional SAP Help product-id scope, applied ONLY to the online SAP Help leg (offline unaffected). Routes the online query to ONE product's docs — use it for FUNCTIONAL/configuration questions that `abapFlavor` cannot express (e.g. 'SAP_S4HANA_ON-PREMISE' for Asset Accounting, Grants, sales customizing). Takes precedence over the abapFlavor auto-mapping. DISCOVER valid values exactly like `version`: run the search once WITHOUT product and copy a result's `metadata.productId` EXACTLY — that is the scope facet, NOT `metadata.product`, which is the human display label (e.g. 'SAP S/4HANA') and will NOT filter. Never invent a slug (e.g. 'ABAP_PLATFORM' is wrong; the real facet is 'ABAP_PLATFORM_NEW'). An unknown product safely falls back to unscoped, so nothing is lost.",
        +  "type": "string"
        +}
      • changedInput schema / properties / query / description
        Previous value: -"Search terms using natural language. Be specific and include technical terms."New value: +"Search terms for ABAP/RAP documentation, in ENGLISH (corpus is primarily English). Be specific and use technical terms."
      • removedInput schema / properties / query / examples
        Removed value: -[
        -  "CAP binary data LargeBinary MediaType",
        -  "UI5 button properties",
        -  "wdi5 testing locators",
        -  "ABAP SELECT statements 7.58",
        -  "415 error CAP action parameter"
        -]
      • addedInput schema / properties / sources
        Added value: +{
        +  "description": "Optional: specific source IDs to search. If not provided, searches all ABAP sources.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Optional SAP release filter, applied ONLY to online SAP Help (help.sap.com) — offline docs are unaffected. Omit it for the latest content (the right default for most queries). To pin an older release, copy a result's `versionId` value EXACTLY and pass it back here — it is case-sensitive and its format varies by product (e.g. '2025.001', '2.0.08', '10.0', '2211', 'Cloud', '2026_06'). Discover valid values in one step: run the same search WITHOUT version first; every result shows its `versionId`. Never invent, reformat, or guess the token (a bare year like '2025' is usually a different release). If a version matches nothing, the latest results are returned instead, so no results are lost.",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "properties": {
        +    "results": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "id": {
        +            "type": "string"
        +          },
        +          "library_id": {
        +            "type": "string"
        +          },
        +          "metadata": {
        +            "additionalProperties": true,
        +            "type": "object"
        +          },
        +          "score": {
        +            "type": "number"
        +          },
        +          "snippet": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "topic": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Addedui5_version_diff
  4. 7 tool updatesv1.0.0
    • Addedfetch
    • Changedsap_community_search2 fields changed
      • changedInput schema / properties / query / description
        Previous value: -"What to search for in the SAP Community. Examples: 'wizard implementation', 'button best practices', 'authentication', 'deployment', 'fiori elements', or any SAP development topic. Searches both post titles and content for comprehensive results."New value: +"Search terms for SAP Community. Include error codes and specific technical details."
      • addedInput schema / properties / query / examples
        Added value: +[
        +  "CAP action parameter binary file upload 415 error",
        +  "wizard implementation best practices",
        +  "fiori elements authentication",
        +  "UI5 deployment issues",
        +  "wdi5 test automation problems"
        +]
    • Removedsap_docs_get
    • Removedsap_docs_search
    • Changedsap_help_get2 fields changed
      • changedInput schema / properties / result_id / description
        Previous value: -"The ID from sap_help_search results (e.g., 'sap-help-12345abc'). This ID is used to fetch the complete page content including metadata."New value: +"Exact ID from sap_help_search results. Copy the ID exactly as returned."
      • addedInput schema / properties / result_id / examples
        Added value: +[
        +  "sap-help-12345abc",
        +  "sap-help-98765def"
        +]
    • Changedsap_help_search2 fields changed
      • changedInput schema / properties / query / description
        Previous value: -"What to search for in SAP Help Portal. Examples: 'S/4HANA configuration', 'Fiori Launchpad setup', 'BTP integration', 'ABAP development', 'SAP Analytics Cloud', or any SAP product or technical topic. Searches across all SAP Help content."New value: +"Search terms for SAP Help Portal. Include product names and specific topics."
      • addedInput schema / properties / query / examples
        Added value: +[
        +  "S/4HANA configuration",
        +  "Fiori Launchpad setup",
        +  "BTP integration",
        +  "ABAP development guide",
        +  "SAP Analytics Cloud setup"
        +]
    • Addedsearch
  5. 5 tool updates
    • First observedsap_community_search
    • First observedsap_docs_get
    • First observedsap_docs_search
    • First observedsap_help_get
    • First observedsap_help_search

TDQS

A4.4/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target clearly distinct resources (BTP service catalog, ABAP released objects, UI5 release diffs, ABAP feature matrix, docs), and the descriptions explicitly resolve the trickiest overlap between `search` and `sap_community_search` ('use this dedicated tool only when...'). The `sap_discovery_center_search`/`sap_discovery_center_service` and `sap_search_objects`/`sap_get_object_details` search-vs-detail pairs are clearly delineated, leaving only mild potential confusion between the general `search` and the specialized search tools.

Naming Consistency3/5

All names use snake_case, which is consistent, but the prefixing and verb placement are mixed: some tools carry a `sap_` domain prefix (`sap_search_objects`, `sap_get_object_details`), others carry a sub-domain prefix (`ui5_version_diff`, `abap_feature_matrix`), and the core `search`/`fetch` have no prefix at all. The conventions remain readable but there is no single predictable pattern.

Tool Count5/5

Nine tools is well within the ideal 3-15 range and each earns its place: coherent search+detail pairs for BTP services and ABAP objects, a docs search+fetch workflow, plus two self-contained reference tools (UI5 diff, ABAP feature matrix). No obvious redundancy or filler.

Completeness4/5

Core workflows are complete: docs use a search→fetch pattern, and both the BTP service catalog and ABAP object lookup have matching search + detail tools. Minor gaps exist (the standalone `ui5_version_diff` and `abap_feature_matrix` have no complementary tools, and there's no source/listing/browse operation), but agents can work around these.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Provides AI models with direct access to documentation for over 600 technologies from DevDocs.io, including popular languages, frameworks, and tools. It enables comprehensive searching, content retrieval, and offline access via an intelligent local caching system.
    12
    2
    -
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides unified ABAP and RAP documentation search, document retrieval, and ABAP feature matrix lookups. It also enables local ABAP linting to streamline development and documentation workflows via the Model Context Protocol.
    -