Skip to main content
Glama

sapmcp

Ask DeepWiki

sapmcp es un servidor MCP para operar y consultar sistemas SAP ECC / SAP S/4HANA mediante SAP NetWeaver RFC SDK, sin pyrfc, exponiendo tools, resources y prompts seguros para clientes LLM como Codex, Claude Desktop u otros hosts compatibles con MCP.

El proyecto está pensado para trabajo Basis/DevOps diario: conexión multi-sistema, llamadas RFC controladas, health checks, auditoría JSONL, resources cacheables y playbooks de operación en castellano.

Estado actual: modo lectura por defecto, multi-destination, tools Basis, health check agregado y auditoría local.


Índice


Related MCP server: SAP OData to MCP Server

Qué resuelve

Con sapmcp, un asistente LLM puede:

  1. Validar conectividad RFC contra uno o varios sistemas SAP.

  2. Ejecutar lecturas Basis frecuentes: dumps, syslog, locks, workprocesses, updates, colas RFC, jobs y auditoría de usuario.

  3. Lanzar un sap_health_check con semáforo global ok / warn / crit / unknown.

  4. Consultar resources cacheables como interfaces RFC, esquemas DDIC, sistema activo y destinos configurados.

  5. Ejecutar RFCs genéricas bajo una política de seguridad explícita.

  6. Registrar auditoría local sin contraseñas ni payload sensible.

  7. Preparar demos reproducibles para Claude Desktop, Codex u otros hosts MCP, con prompts funcionales, Basis y ABAP.

El servidor no incluye un LLM propio. Expone capacidades MCP para que el LLM anfitrión las use.


Arquitectura resumida

flowchart LR
    C["Cliente MCP / LLM"] --> M["sapmcp FastMCP server"]
    M --> T["Tools"]
    M --> R["Resources cacheables"]
    M --> P["Prompts operativos"]
    T --> S["SafetyPolicy + Audit JSONL"]
    R --> S
    S --> X["SapRFCConnector ctypes"]
    X --> N["SAP NetWeaver RFC SDK"]
    N --> SAP["SAP ECC / S/4HANA"]

Módulos principales:

Ruta

Función

src/sapmcp/server.py

Registro MCP de tools, resources y prompts.

src/sapmcp/sap_rfc.py

Bridge ctypes contra SAP NetWeaver RFC SDK.

src/sapmcp/config.py

Variables de entorno, destinos, librería SDK y SafetyPolicy.

src/sapmcp/basis.py

Tools Basis read-only.

src/sapmcp/health.py

sap_health_check agregado.

src/sapmcp/resources.py

Resources cacheables y namespace por destino.

src/sapmcp/audit.py

Auditoría JSONL.

src/sapmcp/prompts.py

Playbooks MCP en castellano.


Requisitos

Software

  • Python >=3.10.

  • SAP NetWeaver RFC SDK instalado localmente.

  • Acceso de red desde la máquina donde corre sapmcp al sistema SAP.

  • Usuario SAP técnico con permisos RFC de lectura adecuados.

SAP NetWeaver RFC SDK

SAP distribuye el SDK bajo licencia. No se incluye en el repositorio y no debe subirse a GitHub.

Debes tener disponible la librería nativa:

Sistema operativo

Librería esperada

macOS

libsapnwrfc.dylib

Linux

libsapnwrfc.so

Windows

sapnwrfc.dll

Ejemplos de rutas habituales:

/usr/local/sap/nwrfcsdk/lib
/opt/sap/nwrfcsdk/lib
~/nwrfcsdk/lib
C:\nwrfcsdk\lib

Guía completa:


Librería SAP NetWeaver RFC SDK

Esta es la pieza crítica del proyecto. sapmcp evita pyrfc, pero necesita el SAP NetWeaver RFC SDK instalado en la máquina donde corre el servidor MCP.

Página oficial de SAP:

SAP indica que la información de descarga de la versión 7.50 está en la SAP Note 2573790:

Normalmente hace falta un S-user con autorización de descarga de software. Por licencia/compliance, el SDK no se vendorizá en este repositorio. Instálalo localmente y configura:

SAP_NWRFC_LIB_DIR=/opt/sap/nwrfcsdk/lib

o en macOS:

SAP_NWRFC_LIB_DIR=/usr/local/sap/nwrfcsdk/lib

Instalación rápida

cd /Users/eduardoariasbravo/Developer/sapmcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
cp .env.example .env

Si quieres usar keyring para no guardar passwords en .env:

pip install -e '.[keyring]'

En macOS/Linux puede hacer falta exportar la ruta del SDK antes de arrancar el servidor:

export DYLD_LIBRARY_PATH=/usr/local/sap/nwrfcsdk/lib:$DYLD_LIBRARY_PATH  # macOS
export LD_LIBRARY_PATH=/usr/local/sap/nwrfcsdk/lib:$LD_LIBRARY_PATH      # Linux

Arranque local:

source .venv/bin/activate
sapmcp

O directamente:

python -m sapmcp.server

Configurar un sistema SAP

La configuración base usa variables clásicas SAP_*. Este bloque define el destino lógico default y preserva compatibilidad con despliegues previos.

SAP_ASHOST=host.sap.local
SAP_SYSNR=00
SAP_CLIENT=100
SAP_USER=RFC_USER
SAP_PASS=********
SAP_LANG=ES
SAP_NWRFC_LIB_DIR=/usr/local/sap/nwrfcsdk/lib

Alternativa con message server / logon group:

SAP_MSHOST=message-server.sap.local
SAP_R3NAME=S4D
SAP_GROUP=PUBLIC
SAP_CLIENT=100
SAP_USER=RFC_USER
SAP_PASS=********
SAP_LANG=ES

SAProuter, si aplica:

SAP_SAPROUTER=/H/router.example.local/H/

SNC, si aplica:

SAP_SNC_MODE=1
SAP_SNC_LIB=/path/to/libsapcrypto.dylib
SAP_SNC_QOP=8
SAP_SNC_MYNAME=p:CN=client, OU=...
SAP_SNC_PARTNERNAME=p:CN=server, OU=...

Añadir varios sistemas: DEV/QAS/PRD

sapmcp soporta múltiples destinos nombrados. Cada tool que abre conexión SAP acepta destination opcional.

SAPMCP_DESTINATIONS=DEV,QAS,PRD
SAPMCP_DEFAULT_DESTINATION=DEV

Ejemplo completo:

# Destino clásico retrocompatible: default
SAP_ASHOST=classic.sap.local
SAP_SYSNR=00
SAP_CLIENT=100
SAP_USER=RFC_CLASSIC
SAP_PASS=********
SAP_LANG=ES

# Destino DEV
SAP_DEV_ASHOST=dev.sap.local
SAP_DEV_SYSNR=01
SAP_DEV_CLIENT=110
SAP_DEV_USER=RFC_DEV
SAP_DEV_PASS=********
SAP_DEV_LANG=ES

# Destino QAS
SAP_QAS_ASHOST=qas.sap.local
SAP_QAS_SYSNR=02
SAP_QAS_CLIENT=120
SAP_QAS_USER=RFC_QAS
SAP_QAS_PASS=********
SAP_QAS_LANG=ES

# Destino PRD vía message server
SAP_PRD_MSHOST=msg-prd.sap.local
SAP_PRD_R3NAME=PRD
SAP_PRD_GROUP=PUBLIC
SAP_PRD_CLIENT=100
SAP_PRD_USER=RFC_PRD
SAP_PRD_PASS=********
SAP_PRD_LANG=ES

Uso desde MCP:

{
  "tool": "sap_health_check",
  "arguments": {"destination": "QAS", "profile": "standard"}
}

Si omites destination, se usa:

  1. SAPMCP_DEFAULT_DESTINATION, si está definido.

  2. Si no, el destino clásico default con variables SAP_*.


Configurar usuarios y contraseñas

Usuario SAP técnico recomendado

Crea en SAP un usuario técnico RFC por entorno, por ejemplo:

Entorno

Usuario sugerido

DEV

RFC_SAPMCP_DEV

QAS

RFC_SAPMCP_QAS

PRD

RFC_SAPMCP_PRD

Recomendaciones:

  • Tipo de usuario: técnico/comunicación según política interna.

  • No usar usuarios personales para operación diaria automatizada.

  • Dar solo permisos read-only necesarios.

  • Separar usuarios por entorno.

  • En PRD, aplicar autorización más restrictiva y registrar responsable.

Permisos típicos a coordinar con Basis/Security:

  • S_RFC para RFCs/BAPIs usadas.

  • Permisos de lectura DDIC/tablas para RFC_READ_TABLE cuando proceda.

  • Permisos XBP para BAPI_XBP_JOB_SELECT si se usan jobs.

  • Permisos de administración/monitorización necesarios para TH_*, syslog, enqueue, dumps, updates, según release y política.

Opción 1: passwords en .env

SAP_DEV_USER=RFC_SAPMCP_DEV
SAP_DEV_PASS=********

Opción 2: keyring local

Instala el extra:

pip install -e '.[keyring]'

Guarda password genérica para el usuario clásico:

export SAP_USER=RFC_USER
sapmcp-credentials set

Activa keyring:

SAPMCP_USE_KEYRING=true

Para destinos nombrados, el código busca primero service="sapmcp", user="DESTINO:USUARIO", y si no existe cae a user="USUARIO".

Ejemplo para guardar una password específica de DEV:

python - <<'PY'
import getpass
import keyring
keyring.set_password("sapmcp", "DEV:RFC_SAPMCP_DEV", getpass.getpass("Password DEV: "))
PY

Seguridad y modo lectura

Por defecto, sapmcp arranca en modo conservador:

SAPMCP_READ_ONLY=true
SAPMCP_ALLOWED_RFC=
SAPMCP_ALLOW_DANGEROUS=false
SAPMCP_MAX_ROWS=200
SAPMCP_RFC_TIMEOUT=60

Comportamiento:

  • RFCs conocidas como lectura se permiten.

  • RFCs con nombres peligrosos (*CREATE*, *CHANGE*, *DELETE*, *UPDATE*, *POST*, etc.) se bloquean salvo confirmación doble.

  • RFC_READ_TABLE se limita con SAPMCP_MAX_ROWS.

  • SAPMCP_RFC_TIMEOUT controla el timeout de RfcInvoke.

Allowlist opcional:

SAPMCP_ALLOWED_RFC=RFC_PING,STFC_CONNECTION,RFC_READ_TABLE,RFC_GET_*,BAPI_*_GET*,Z_MI_RFC_LECTURA

Para cambios reales —no recomendado salvo entorno controlado— se exige:

SAPMCP_READ_ONLY=false
SAPMCP_ALLOW_DANGEROUS=true

y además la tool debe pasar confirm_dangerous=true.


Seguridad con LLMs locales

Para sistemas SAP reales o datos de cliente, consulta la guía específica:

La recomendación general es clara: aunque sapmcp opere en modo lectura, los datos SAP devueltos por las tools pueden ser sensibles. Para entornos reales, usa LLMs locales, on-prem o plataformas cloud privadas aprobadas; no envíes resultados SAP a LLMs públicos no autorizados.


Enterprise / piloto cliente

El Sprint 2 añade documentación y estructura para presentar sapmcp a SAP Basis, Security, arquitectura y dirección sin cambiar la lógica crítica del servidor:

Documento / artefacto

Uso

docs/matriz-autorizaciones-sap.md

Matriz por RFC/BAPI con riesgo, objeto de autorización probable y recomendación DEV/QAS/PRD.

docs/rol-pfcg-recomendado.md

Estrategia de roles Z_SAPMCP_READ_DEV, Z_SAPMCP_READ_QAS y Z_SAPMCP_READ_PRD.

docs/politica-destinos.md

Modelo recomendado de política por destino y convención futura de variables.

docs/gobierno-llm-sap.md

Gobierno LLM, compliance, trazabilidad, aprobación humana y prompt injection.

docs/matriz-compatibilidad.md

Estado validado/esperado/pendiente por plataforma SAP.

sap_zrfc/README.md

Estrategia ABAP companion para Z-RFCs read-only tipadas.

docs/docker.md

Ejecución Docker/demo local sin redistribuir el SAP NetWeaver RFC SDK.

Recomendación enterprise: usar RFC_READ_TABLE solo en DEV/QAS controlado; en PRD preferir RFCs estándar certificadas o Z-RFCs read-only revisadas por ABAP/Security, con roles PFCG mínimos y auditoría.


Herramientas MCP

Sistema y configuración

Tool

Uso

sap_config_status(destination=None)

Configuración activa sanitizada y destinos disponibles.

sap_safety_check(function_name)

Clasifica una RFC frente a la política de seguridad.

sap_resources_invalidate(prefix=None)

Limpia cache de resources.

sap_audit_tail(n=50)

Lee las últimas entradas de auditoría del día.

sap_catalog_search(kind, pattern)

Busca en snapshot offline sin tocar SAP.

sap_prompt_protocol(prompt)

Protocolo genérico para traducir una petición humana a pasos SAP seguros.

RFC genéricas

Tool

Uso

sap_ping(destination=None)

Prueba RFC_PING.

sap_describe_rfc(function_name, destination=None)

Describe interfaz con RFC_GET_FUNCTION_INTERFACE.

sap_read_table(table_name, fields=None, where=None, rowcount=None, ..., destination=None)

Lee tabla/vista vía RFC_READ_TABLE.

sap_rfc_call(function_name, ..., destination=None)

Llamada RFC genérica con import params, tablas y salidas explícitas.

sap_search_rfc(prefix, limit=50, destination=None)

Busca módulos RFC por prefijo en TFDIR.

sap_read_table(where=...) se conserva por compatibilidad como modo avanzado. Las tools internas de Basis/catalogo construyen OPTIONS con helpers seguros para campos/literales; para uso normal evita WHERE libre y prefiere tools específicas o filtros construidos por el servidor.

Operación Basis

Tool

Transacción mental

Uso

sap_get_short_dumps(date_from=None, date_to=None, user=None, destination=None)

ST22

Dumps ABAP por fecha/usuario.

sap_get_syslog(date_from=None, date_to=None, severity=None, destination=None)

SM21

Syslog con fallback de RFC estándar.

sap_get_locks(table=None, user=None, destination=None)

SM12

Locks activos.

sap_get_workprocesses(server=None, destination=None)

SM50/SM66

Workprocesses por servidor o todos.

sap_get_update_requests(status=None, user=None, destination=None)

SM13

Updates pendientes/erróneos.

sap_get_rfc_queue(queue_type="trfc", destination=None)

SM58/qRFC

tRFC, qRFC out, qRFC in.

sap_get_jobs(top_n=50, status=None, since_days=1, destination=None)

SM37

Jobs por estado y ventana.

sap_get_user_audit(user, destination=None)

SU01/SUIM

Perfiles, roles, bloqueo, vigencia, SAP_ALL y fallos de logon.

Health check

Tool

Uso

sap_health_check(destination=None, profile="standard")

Dashboard JSON con semáforo y métricas agregadas.


Resources MCP

Resources cacheables. Admiten URI legacy y URI con destino.

La cache es in-memory y thread-safe: usa single-flight por clave para que, ante misses concurrentes del mismo resource, solo una llamada SAP/RFC cargue el dato y el resto de callers reutilice ese resultado.

URI

TTL

Uso

sap://destinations

infinito

Lista destinos configurados, sin contraseñas ni rutas SDK.

sap://system/info

60s

Info del destino por defecto.

sap://{destination}/system/info

60s

Ping funcional STFC_CONNECTION + SAP params sanitizados.

sap://policy/allowlist

infinito

Política de seguridad activa.

sap://{destination}/policy/allowlist

infinito

Política namespaced por destino.

sap://function/{name}/interface

600s

Interfaz RFC cacheada.

sap://{destination}/function/{name}/interface

600s

Interfaz RFC por destino.

sap://table/{name}/schema

600s

Esquema DDIC.

sap://{destination}/table/{name}/schema

600s

Esquema DDIC por destino.

sap://catalog/rfc?prefix=...

300s

Catálogo RFC por prefijo.

sap://{destination}/catalog/rfc?prefix=...

300s

Catálogo RFC por destino.

sap://catalog/snapshot

archivo

Snapshot offline local.

Ejemplos:

read_resource("sap://destinations")
read_resource("sap://DEV/system/info")
read_resource("sap://QAS/function/BAPI_USER_GET_DETAIL/interface")
read_resource("sap://DEV/table/T000/schema")

Prompts MCP

Los prompts son playbooks; no ejecutan acciones por sí mismos.

Prompt

Uso

basis_triage_sistema

Triage inicial de sistema.

inspeccionar_pedido_venta

Inspección read-only de pedido SD.

seguimiento_idoc

Seguimiento read-only de IDoc.

revisar_jobs_largos

Revisión de jobs largos.

informe_sociedad

Informe financiero básico por sociedad/ejercicio.

pre_change_check

Checklist humano antes de cualquier RFC peligrosa.

health_check_response

Redacta en español una respuesta humana a partir del JSON de sap_health_check.


Ejemplos de prompts de demo

El repositorio incluye una guía oficial de prompts listos para copiar y pegar:

La guía está pensada para demostrar en directo la propuesta de valor de sapmcp:

  • SAP como interfaz conversacional mediante MCP.

  • Operación segura en modo SAPMCP_READ_ONLY=true.

  • Cruce de tablas y RFCs estándar sin depender de pyrfc.

  • Preflight, fallbacks y límites de lectura para evitar demos frágiles.


Health check

sap_health_check orquesta varias lecturas Basis. En perfiles standard y deep, usa paralelización con ThreadPoolExecutor(max_workers=4), pero cada check abre su propia conexión RFC.

Perfil

Tope global

Checks

quick

2s

Ping, locks, workprocesses básicos.

standard

15s

quick + dumps 24h, updates, tRFC, jobs cancelados 24h.

deep

45s

standard + usuarios activos, T000, servidores, muestra SNAP/syslog si autorizado.

Umbrales por defecto:

Check

Warn

Crit

Variables

dumps 24h

5

20

SAPMCP_HC_DUMPS_WARN, SAPMCP_HC_DUMPS_CRIT

locks total

50

200

SAPMCP_HC_LOCKS_WARN, SAPMCP_HC_LOCKS_CRIT

updates pendientes

1

10

SAPMCP_HC_UPDATE_PENDING_WARN, SAPMCP_HC_UPDATE_PENDING_CRIT

updates ERR

1

1

SAPMCP_HC_UPDATE_ERR_WARN, SAPMCP_HC_UPDATE_ERR_CRIT

tRFC pendiente

20

100

SAPMCP_HC_TRFC_WARN, SAPMCP_HC_TRFC_CRIT

jobs abortados 24h

1

5

SAPMCP_HC_JOBS_ABORTED_WARN, SAPMCP_HC_JOBS_ABORTED_CRIT

workprocess PRIV

1

2

SAPMCP_HC_WP_PRIV_WARN, SAPMCP_HC_WP_PRIV_CRIT

workprocess stopped

1

1

SAPMCP_HC_WP_STOPPED_WARN, SAPMCP_HC_WP_STOPPED_CRIT

Ejemplo:

{
  "tool": "sap_health_check",
  "arguments": {"destination": "DEV", "profile": "standard"}
}

Salida abreviada:

{
  "destination": "DEV",
  "sid": "S4D",
  "mandt": "100",
  "profile": "standard",
  "verdict": "warn",
  "checks": [
    {"name": "ping", "status": "ok", "value": {"RESPTEXT": "ok"}, "threshold": null, "duration_ms": 42.1, "error": null},
    {"name": "jobs_aborted_24h", "status": "warn", "value": 1, "threshold": {"warn": 1, "crit": 5}, "duration_ms": 120.4, "error": null}
  ],
  "summary": "DEV: verdict=warn; crit=0, warn=1, unknown=0. Revisar: jobs_aborted_24h."
}

Auditoría

Las tools que tocan SAP se auditan en JSONL:

~/.sapmcp/audit-YYYYMMDD.jsonl

Cada línea incluye:

ts, tool, function, destination, params_hash, rc, duration_ms,
sid, mandt, user, dangerous, confirmed, error_key, error_message

No se guarda payload completo ni contraseñas. params_hash se calcula sobre parámetros redactados.

Consulta desde MCP:

{
  "tool": "sap_audit_tail",
  "arguments": {"n": 50}
}

Snapshot offline

Puedes generar un catálogo local comprimido para búsquedas sin tocar SAP:

sapmcp-snapshot --page-size 500

Genera en ~/.sapmcp/ un fichero tipo:

catalog-{SID}.json.gz

Búsqueda offline:

{
  "tool": "sap_catalog_search",
  "arguments": {"kind": "rfc", "pattern": "BAPI_USER"}
}

Configuración MCP en cliente

Ejemplo genérico:

{
  "mcpServers": {
    "sapmcp": {
      "command": "/Users/eduardoariasbravo/Developer/sapmcp/.venv/bin/sapmcp",
      "cwd": "/Users/eduardoariasbravo/Developer/sapmcp"
    }
  }
}

Si el cliente no carga variables de entorno del shell, define env explícito o usa .env en el cwd del proyecto.


Documentación adicional


Desarrollo y tests

Instalar editable:

source .venv/bin/activate
pip install -e .

Ejecutar tests:

pytest -q
# o
.venv/bin/pytest -q

Resultado esperado actual:

68 passed

Eduardo Arias Bravo, Orjiva, Mayo 2026

Available Tools

20 tools
sap_audit_tailA

Return the last N JSON audit records from today's audit log.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Without annotations, the description carries the full burden. It discloses that the tool returns only today's records in JSON format, which is a behavioral constraint. However, it does not specify what occurs if no records exist or if n exceeds available entries.

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 extremely concise at one sentence, front-loaded with the action. However, it omits parameter details, which for a one-parameter tool could be more explicit without much added length.

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?

Given the tool's simplicity (one parameter, output schema present), the description covers the core functionality and scope. The output schema handles return details. Some context about error handling or edge cases is missing but not critical for this tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters. It mentions 'the last N' but does not explicitly link N to the parameter 'n' or describe its role beyond a count. The schema shows 'n' with default 50, but the description adds minimal semantic value.

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 clearly states 'Return the last N JSON audit records from today's audit log.' It specifies the verb (Return), resource (JSON audit records), and scope (today's log), making the tool's purpose distinct from siblings like sap_get_user_audit.

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

Usage Guidelines3/5

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

The description implies this tool is for recent, today-specific audit log entries but does not explicitly state when to use it vs. alternatives like sap_get_user_audit or sap_get_syslog. There is no guidance on exclusions or conditions.

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

sap_config_statusB

Show SAP MCP runtime configuration without exposing secrets.

ParametersJSON Schema
NameRequiredDescriptionDefault
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/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. It adds one behavioral trait ('without exposing secrets'), but omits other details like read-only nature, authentication requirements, or error handling. The disclosure is partial.

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 a single sentence that efficiently conveys the core purpose and a key constraint. It is front-loaded but could be improved by adding parameter context without bloating.

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

Completeness3/5

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

Given the presence of an output schema and low complexity (one optional param), the description is minimally adequate. However, it lacks parameter documentation and comparative guidance against sibling tools, which leaves some gaps.

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

Parameters1/5

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

The input schema has one parameter ('destination') with 0% description coverage, and the tool description does not explain its meaning or usage. The agent receives no semantic help beyond the parameter name.

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 clearly states 'Show SAP MCP runtime configuration', specifying a verb and resource, and distinguishes from sibling tools by focusing on configuration display, not other SAP operations like audit, RFC, or jobs.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. It only states what the tool does, leaving the agent to infer usage context.

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

sap_describe_rfcA

Try to describe a function module interface using RFC_GET_FUNCTION_INTERFACE.

Requires the RFC user to be authorized for RFC_GET_FUNCTION_INTERFACE. If unavailable, ask BASIS to allow it or provide the function interface manually.

ParametersJSON Schema
NameRequiredDescriptionDefault
function_nameYes
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that the tool internally uses RFC_GET_FUNCTION_INTERFACE, requires specific authorization, and may fail if unauthorized. It does not mention side effects (likely none) or output details, but the existence of an output schema mitigates the need for return description. The 'try to' phrasing honesty signals potential failure.

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 two sentences long, front-loading the core purpose in the first sentence and adding a key requirement in the second. It is concise and easy to parse, though the second sentence could be slightly more structured (e.g., bullet).

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

Completeness3/5

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

Given the tool's simplicity (2 params, output schema present), the description covers the primary action and a key prerequisite (authorization). However, it does not address error scenarios (e.g., function not found) or clarify the role of the destination parameter. The existence of the output schema partially compensates, but some gaps remain.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the description adds no explanation of the parameters beyond what the schema provides. The description does not mention 'function_name' or 'destination', leaving the agent to infer their purpose from the schema. The parameters are self-explanatory, but the description misses an opportunity to clarify that destination defaults to the current system.

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 clearly states the tool's purpose: to describe a function module interface using RFC_GET_FUNCTION_INTERFACE. It uses a specific verb ('describe') and resource ('function module interface'), and the purpose is distinct from sibling tools like sap_rfc_call (call) and sap_search_rfc (search).

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 clear usage guidance by specifying the authorization requirement for RFC_GET_FUNCTION_INTERFACE and advising to ask BASIS or provide the interface manually if unavailable. It implicitly tells when not to use (if no authorization), but does not explicitly compare to alternatives.

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

sap_get_jobsA

Read SAP background jobs via BAPI_XBP_JOB_SELECT, with TBTCO fallback.

In strict allowlist mode the fallback is intentional: if BAPI_XBP_JOB_SELECT is not allowed but RFC_READ_TABLE is allowed, sapmcp reads TBTCO instead of failing before the fallback path. If neither RFC is allowed, the original policy error is preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNo
statusNo
since_daysNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

Given no annotations are provided, the description fully bears the burden of behavioral disclosure. It transparently explains the fallback behavior and error preservation, but does not mention side effects or permissions needed.

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 concise (3 sentences) and front-loads the purpose. However, the second sentence could be simplified for clarity.

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

Completeness2/5

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

With 4 parameter descriptions missing and an output schema present but not described, the description leaves significant gaps. The agent lacks guidance on parameter values and expected output, making it incomplete for a tool of this complexity.

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

Parameters2/5

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

Schema description coverage is 0%, yet the description adds no detail about the four parameters (top_n, status, since_days, destination). The agent must infer their meaning from names alone, which is insufficient for correct 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 'Read SAP background jobs' and names the specific BAPI and fallback method (BAPI_XBP_JOB_SELECT, TBTCO). This clearly identifies the tool's function and differentiates it from sibling tools like sap_read_table or sap_get_locks.

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

Usage Guidelines3/5

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

The description explains the fallback mechanism when BAPI is not allowed, giving context on when the tool works. However, it does not explicitly state when to prefer this tool over alternatives or when not to use it.

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

sap_get_locksC

Read SAP enqueue locks via ENQUEUE_READ.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableNo
userNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only states 'Read', implying a safe operation, but fails to mention authorization needs, rate limits, output behavior, or whether results are limited.

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

Conciseness3/5

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

The description is a single, short sentence, which is concise but lacks detail. It is appropriately front-loaded, but the brevity sacrifices necessary clarity.

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

Completeness2/5

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

Given 3 optional parameters and an output schema, the description is insufficient. It does not explain the purpose of each parameter or the format of the response, leaving significant gaps for an agent to infer.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description does not explain any of the three parameters (table, user, destination) beyond their names. It adds no semantic value to help an agent correctly populate them.

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 clearly states the action ('Read'), the resource ('SAP enqueue locks'), and the method ('ENQUEUE_READ'). It effectively distinguishes from sibling tools that deal with other SAP entities like jobs, syslogs, or tables.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as sap_read_table or sap_get_jobs. There are no prerequisites, exclusions, or context-dependent suggestions.

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

sap_get_rfc_queueB

Read pending/error tRFC or qRFC queue entries from standard queue tables.

ParametersJSON Schema
NameRequiredDescriptionDefault
queue_typeNotrfc
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only states the tool reads entries, lacking details on side effects, permissions, or rate limits. The read nature is implied but not explicitly qualified as non-destructive.

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

Conciseness5/5

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

Single sentence, front-loaded with the verb 'Read', no unnecessary words. Efficient and to the point.

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

Completeness3/5

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

Minimally adequate for a tool with output schema. Description covers the general purpose but lacks detail on filtering, expected results, or behavior for different queue types. Adequate but with gaps.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain the meaning or impact of parameters 'queue_type' or 'destination'. It adds no value 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?

Description clearly states the tool reads pending/error tRFC or qRFC queue entries from standard queue tables. It specifies the verb 'Read' and resource, and differentiates from sibling tools like sap_describe_rfc and sap_rfc_call.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool over siblings or prerequisites. Usage is only implied from the purpose, with no exclusions or alternatives mentioned.

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

sap_get_short_dumpsC

Return ABAP short dumps via RFC_GET_SHORT_DUMP_LIST or SNAP fallback.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_fromNo
date_toNo
userNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries full transparency burden. It only reveals the internal mechanism (primary and fallback) but omits key behaviors like read-only nature, authentication requirements, or potential timeouts. The lack of safety or side-effect disclosure leaves agents guessing.

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 extremely concise (one sentence, 13 words), but this comes at the cost of missing essential information. It earns its place by stating purpose and mechanism, but could be improved by adding parameter details without becoming verbose.

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

Completeness2/5

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

Despite having an output schema, the description lacks usage guidelines, parameter semantics, and behavioral details. For a tool with four parameters and no annotations, the context is insufficient for an AI agent to use it correctly.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not compensate. It provides no explanation of the four parameters (date_from, date_to, user, destination), leaving agents to infer meaning solely from names. No format, range, or behavior info is given.

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 clearly states the tool returns ABAP short dumps, specifying the mechanism (RFC_GET_SHORT_DUMP_LIST or SNAP fallback). This distinguishes it from sibling tools like sap_get_syslog or sap_audit_tail.

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

Usage Guidelines2/5

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

No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives, such as in investigating ABAP application errors. The fallback mention is an implementation detail, not a usage cue.

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

sap_get_syslogB

Read SAP syslog using RSLG_READ_SYSLOG, falling back to BAPI_SYSLOG_READ.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_fromNo
date_toNo
severityNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

The description discloses the fallback mechanism between two function modules, which is a behavioral trait. However, it omits details like permission requirements, side effects, or rate limits. Given no annotations, the description partially covers 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?

The description is a single efficient sentence that front-loads the main purpose. It is appropriately concise but could benefit from additional structured details without becoming verbose.

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

Completeness2/5

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

Despite having an output schema, the description lacks parameter usage context, filtering behavior, and any explanation of the syslog content or format, making it incomplete for effective tool invocation.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not explain any of the four parameters (date_from, date_to, severity, destination), adding no semantic value 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 clearly states the verb 'Read' and the resource 'SAP syslog', mentioning specific function modules with fallback mechanism, making the purpose unambiguous and distinct from sibling tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like sap_audit_tail or sap_get_short_dumps; no prerequisites or conditions provided.

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

sap_get_update_requestsC

Read update requests via BAPI_UPDREQUEST_GETLIST.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
userNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

No annotations are provided, and the description only says 'read', implying idempotency but not explicitly stating safety, permissions, or side effects. A more thorough disclosure of behavioral traits is needed.

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

Conciseness3/5

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

The description is a single concise sentence, but it is too brief, sacrificing necessary detail. It is front-loaded but could include more information without becoming overly long.

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

Completeness1/5

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

Given three optional parameters with zero schema descriptions and no annotations, the description is highly incomplete. It does not explain parameter usage, return values, or any contextual hints, leaving the agent with insufficient information to use the tool correctly.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain any of the three parameters (status, user, destination). The description adds no meaning beyond the parameter names, failing to compensate for the missing schema descriptions.

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

Purpose4/5

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

The description clearly states the verb 'read' and resource 'update requests', specifying the BAPI used. It effectively conveys the core function, but does not differentiate from sibling tools like sap_get_jobs or sap_get_locks.

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

Usage Guidelines2/5

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

The description offers no guidance on when to use this tool versus alternatives, no context on prerequisites or exclusions. It simply states what it does without any usage instructions.

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

sap_get_user_auditC

Combine standard BAPIs and USR02 reads for a read-only user audit.

ParametersJSON Schema
NameRequiredDescriptionDefault
userYes
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

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

The description indicates the tool is read-only and non-destructive ('read-only user audit'), providing basic safety assurance. However, with no annotations, it does not disclose other behaviors like performance impact or error handling.

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

Conciseness3/5

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

The description is a single sentence, which is concise but lacks structure. It is front-loaded with purpose but misses details that would make it more informative.

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

Completeness2/5

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

Given the tool has an output schema, the description should provide context on what the audit data contains. It does not mention return values, pagination, or how the output relates to the input, leaving the agent with minimal context.

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

Parameters1/5

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

The description adds no meaning to the input schema parameters ('user' and 'destination'). With 0% schema description coverage, the description should compensate but fails to explain what these parameters do or their expected values.

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

Purpose4/5

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

The description clearly states it combines BAPIs and USR02 reads for a 'read-only user audit', specifying the verb (combines, reads) and resource (user audit). It distinguishes from siblings like sap_audit_tail by focusing on user-specific audit data.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, intended scenarios, or cases where other tools like sap_get_syslog might be more appropriate.

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

sap_get_workprocessesC

Read SAP work processes via TH_WPINFO, aggregating TH_SERVER_LIST when server is omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
serverNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations exist, so the description carries full burden. It indicates a read operation but does not disclose permissions, rate limits, or side effects. The aggregation behavior is mentioned, but other behavioral traits are missing.

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

Conciseness5/5

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

The description is a single sentence of 14 words, efficient and front-loaded with the core purpose. Every word adds value.

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

Completeness2/5

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

Despite having an output schema, the description lacks context on the tool's complexity, intended use cases, and dependency on SAP system state. It is too brief for a tool with two optional parameters and a potentially complex return structure.

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

Parameters1/5

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

Schema description coverage is 0%, and the description only indirectly mentions 'server' (when omitted). The 'destination' parameter is not explained at all, leaving both parameters without meaningful semantic context beyond the schema field names.

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

Purpose4/5

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

The description clearly states the tool reads SAP work processes and specifies the mechanism (TH_WPINFO) and aggregation behavior. It is specific to work processes, distinguishing it from sibling tools like sap_get_jobs or sap_get_locks, though no explicit differentiation is provided.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., other SAP tools). The description implies the server parameter can be omitted for aggregation, but lacks explicit context or exclusions.

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

sap_health_checkC

Run a SAP Basis health check dashboard with configurable thresholds.

ParametersJSON Schema
NameRequiredDescriptionDefault
destinationNo
profileNostandard

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided; description does not mention auth requirements, side effects, or whether the health check is read-only. Assumes agent knows it's non-destructive, but this is not confirmed.

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?

One clear sentence, no fluff. Could benefit from slightly more detail without becoming verbose.

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

Completeness2/5

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

Despite having an output schema, the description remains too vague for a tool with 2 unannotated parameters and no required fields. Does not explain what the dashboard contains or how thresholds affect results.

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

Parameters2/5

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

Schema coverage is 0% and description only vaguely mentions 'configurable thresholds' without linking to parameters. No explanation of 'destination' or the three profile levels.

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 it runs a SAP Basis health check dashboard with configurable thresholds, distinguishing it from sibling tools that perform more specific tasks like pinging, reading tables, or checking configs.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus the 18 siblings. The profile parameter (quick, standard, deep) suggests different levels but no explanation of when each is appropriate.

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

sap_pingC

Open a SAP RFC connection and call RFC_PING.

ParametersJSON Schema
NameRequiredDescriptionDefault
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior. It states it opens a connection and calls a ping, but omits details like side effects, error handling, required authentication, or whether the connection is persistent. Minimal transparency.

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

Conciseness3/5

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

The description is a single sentence, very concise. However, it lacks structure and is too terse; every word counts but there is no bullet points or additional context that would help an agent.

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

Completeness2/5

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

Despite having an output schema, the description does not explain return values or success/failure indicators. For a simple ping tool, it should at least indicate it returns connectivity status. The description is incomplete, especially given the presence of sibling tools that could overlap.

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

Parameters1/5

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

The input schema has one parameter (destination) with 0% description coverage. The description does not mention the parameter or its purpose, so it adds no meaning 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 clearly states it opens a SAP RFC connection and calls RFC_PING, a specific verb+resource. It distinguishes from siblings like sap_rfc_call and sap_health_check by specifying the exact RFC function.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. Does not mention it is for connectivity testing or how it differs from sap_health_check or sap_rfc_call. The agent is left to infer usage.

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

sap_prompt_protocolA

Return an execution protocol for a human SAP prompt.

The MCP server does not contain its own LLM. The host LLM should use this protocol plus the RFC tools to translate human intent into safe SAP actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/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 full burden. It discloses that the tool does not contain its own LLM and that the output is a protocol to be used with RFC tools. This is useful behavioral context beyond the parameter schema, but it does not detail any side effects, response format (though output schema exists), or permissions required. Still, for a tool with no annotations, this adds good transparency.

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

Conciseness5/5

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

The description is two sentences, concise and front-loaded with the core purpose. Every sentence adds value: the first states what the tool does, the second explains how to use its output. No unnecessary words.

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 has only one parameter, an output schema exists (so return values are covered), and no annotations, the description is complete enough. It explains the purpose, how to use the output, and the relationship to sibling tools. For a simple protocol-generation tool, this is thorough.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the 'prompt' parameter. It only says 'Return an execution protocol for a human SAP prompt,' which implies the parameter is the human prompt, but lacks details on format, length constraints, or example inputs. The description adds minimal value beyond the parameter name.

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 clearly states 'Return an execution protocol for a human SAP prompt,' specifying the verb and resource. It distinguishes the tool from siblings by explaining that the MCP server does not contain its own LLM, so the host LLM must use this protocol plus RFC tools, making its unique role clear.

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 tells when to use this tool: 'The host LLM should use this protocol plus the RFC tools to translate human intent into safe SAP actions.' This implies not for direct execution, but it does not explicitly mention when not to use it or list alternative tools. The context signals show sibling tools like 'sap_rfc_call' which handle direct execution, so the guidance is adequate but slightly implicit.

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

sap_read_tableA

Read a SAP transparent table/view via RFC_READ_TABLE with a row limit.

where is an advanced compatibility escape hatch containing raw SAP OPTION strings, e.g. ["BUKRS = '1000'", "AND GJAHR = '2026'"]. Prefer purpose-built tools/resources that build safe OPTIONS centrally. The default delimiter is a tab to reduce collisions with SAP text values. SAP truncates DATA-WA to 512 bytes server-side; for wide tables use a purpose-built Z-RFC/BAPI or /BODS/RFC_READ_TABLE2 when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
table_nameYes
fieldsNo
whereNo
rowcountNo
rowskipsNo
delimiterNo
no_dataNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses row limit, where clause format, default delimiter, and truncation to 512 bytes. It does not cover error handling or rate limits, but the disclosed behaviors are significant and useful.

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

Conciseness5/5

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

The description is succinct at three sentences with no redundancy. It front-loads the core purpose and adds clarifying details in minimal space. Every sentence earns its place.

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?

Given 8 parameters, no annotations, and output schema present, the description covers key behavioral aspects: purpose, where clause, delimiter, truncation, and alternatives. It lacks pagination or error handling info but is reasonably complete for a read tool.

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 coverage is 0%, so description must compensate. It explains the 'where' parameter with an example and mentions delimiter default. However, other parameters like 'fields', 'no_data', and 'destination' are not elaborated beyond their names. The description adds value but not fully.

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 clearly states it reads a SAP transparent table/view via RFC_READ_TABLE with a row limit. It identifies the specific RFC function and mentions a row limit, distinguishing it from sibling tools like sap_catalog_search or sap_rfc_call.

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 explicit guidance: suggests preferring purpose-built tools for safe OPTIONS, advises using alternatives for wide tables, and explains the where parameter as an advanced escape hatch. This tells agents when and when not to use the tool.

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

sap_resources_invalidateA

Invalidate the in-memory MCP resources cache, optionally by key prefix.

ParametersJSON Schema
NameRequiredDescriptionDefault
prefixNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description must carry behavioral transparency. It only says 'invalidate' but does not disclose side effects, permissions, safety, or destructive nature. Insufficient for an AI agent.

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

Conciseness5/5

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

Single sentence, no wasted words, front-loaded with action. Highly concise.

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

Completeness3/5

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

For a simple invalidation tool with one optional parameter and an output schema, the description is adequate but lacks context on effect, idempotency, or when to use. Could be more complete while remaining concise.

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 0% with no parameter descriptions. The description adds meaning by noting that prefix is optional and specifies key prefix filtering, beyond the schema's name and type.

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 clearly states the verb 'Invalidate' and the resource 'in-memory MCP resources cache', with optional prefix filtering. It distinguishes from sibling tools which focus on other operations.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, or when not to use it. The description only states the function without usage context.

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

sap_rfc_callB

Call any RFC-enabled function module with explicit parameters and expected outputs.

The host LLM should first inspect/choose a function, then call this tool. Safety policy is enforced by environment variables, especially SAPMCP_READ_ONLY and SAPMCP_ALLOWED_RFC.

ParametersJSON Schema
NameRequiredDescriptionDefault
function_nameYes
import_paramsNo
input_tablesNo
output_tablesNo
table_fieldsNo
output_paramsNo
nested_fieldsNo
confirm_dangerousNo
buffer_sizeNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description bears full burden for behavioral disclosure. It mentions safety policy via environment variables but does not explain effects like mutation, rate limits, or error behavior. Critical details for responsible tool invocation are missing.

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 front-loaded and concise, with only three sentences. It avoids redundant details but could be better structured by separating usage, safety, and parameter hints. Slightly more content would improve clarity without losing conciseness.

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

Completeness2/5

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

Despite having an output schema, the description is incomplete given the tool's complexity (10 parameters, potentially damaging effects). It fails to elaborate on return values, error handling, or parameter relationships, leaving significant gaps for an agent to infer.

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

Parameters1/5

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

Schema description coverage is 0%. The description adds no meaning to any of the 10 parameters beyond the bare schema titles. An agent receives no guidance on how to populate import_params, tables, or other complex structures, making effective use difficult.

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 clearly states the tool calls any RFC-enabled function module, with explicit parameters and outputs. It distinguishes from sibling tools like sap_describe_rfc (inspect/describe) and sap_search_rfc (search) by focusing on execution.

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 instructs the host LLM to first inspect/choose a function before calling this tool, providing clear context. However, it lacks explicit when-not-to-use or alternative constraints beyond implied safety enforcement.

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

sap_safety_checkB

Classify whether an RFC function is known read-only, dangerous, or allowlisted.

ParametersJSON Schema
NameRequiredDescriptionDefault
function_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/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. It does not disclose whether the tool is read-only, requires authentication, has side effects, or how it handles unknown functions. The behavior beyond classification is opaque.

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

Conciseness5/5

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

The description is a single sentence that directly states the tool's function without any extraneous words. It is front-loaded and efficient.

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

Completeness3/5

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

For a simple tool with one string input and an output schema (not shown), the description is adequate but incomplete. It doesn't specify what happens if the function is not found or if there are other classification outcomes, which could leave the agent unsure about edge cases.

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?

With 0% schema description coverage, the description must add meaning. It explains that the parameter 'function_name' is the RFC function to classify, which provides context beyond the schema. However, it lacks details like accepted naming conventions or case sensitivity.

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 clearly states the tool's purpose with a specific verb ('Classify') and resource ('RFC function'), and it distinguishes the classification categories (read-only, dangerous, allowlisted). This is unambiguous and differentiates from sibling tools like sap_describe_rfc or sap_rfc_call.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as before calling an RFC function. There is no mention of prerequisites or scenarios where this tool is needed.

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

sap_search_rfcC

Search RFC function modules in TFDIR by prefix using the same cache as sap://catalog/rfc.

ParametersJSON Schema
NameRequiredDescriptionDefault
prefixYes
limitNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, description must disclose behavior. It mentions cache usage but lacks details on side effects, permissions, rate limits, or error handling. Read-only nature is implied but not stated.

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?

Single sentence, no redundancy, front-loaded with verb and resource. Could be more structured but efficient.

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

Completeness2/5

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

For a 3-param tool with no param descriptions, the description is too brief. It omits explanation of limit, destination, and the TFDIR context. Output schema exists but does not compensate for missing usage context.

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

Parameters2/5

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

Schema coverage is 0%, so description must explain parameters. Only prefix is indirectly explained via 'by prefix'. Limit and destination are not described at all.

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

Purpose4/5

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

Description clearly states verb 'Search' and resource 'RFC function modules in TFDIR by prefix', using same cache as another tool. It is specific but does not explicitly differentiate from sibling tools like sap_catalog_search.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Mentions cache similarity but no exclusion criteria or prerequisites.

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. 20 tool updatesv0.1.0
    • First observedsap_audit_tail
    • First observedsap_catalog_search
    • First observedsap_config_status
    • First observedsap_describe_rfc
    • First observedsap_get_jobs
    • First observedsap_get_locks
    • First observedsap_get_rfc_queue
    • First observedsap_get_short_dumps
    • First observedsap_get_syslog
    • First observedsap_get_update_requests
    • First observedsap_get_user_audit
    • First observedsap_get_workprocesses
    • First observedsap_health_check
    • First observedsap_ping
    • First observedsap_prompt_protocol
    • First observedsap_read_table
    • First observedsap_resources_invalidate
    • First observedsap_rfc_call
    • First observedsap_safety_check
    • First observedsap_search_rfc

TDQS

B3.3/5.0

Scored across 20 tools

Disambiguation5/5

Each tool targets a distinct function: audit, catalog, config, RFC description, various system reads (jobs, locks, short dumps, etc.), health check, ping, prompt protocol, table read, cache invalidation, RFC call, safety check, and search. No two tools have overlapping purposes; clear boundaries between them.

Naming Consistency3/5

Most tools follow a 'sap_' prefix with verb_noun (e.g., sap_get_jobs, sap_describe_rfc), but several use noun_noun (e.g., sap_audit_tail, sap_health_check) or noun_verb (sap_resources_invalidate). The mix of patterns, though identifiable, shows inconsistency.

Tool Count5/5

Twenty tools is a well-scoped set for a SAP Basis-oriented server. Each tool addresses a specific monitoring or RFC interaction need without redundancy, making the count appropriate for the domain.

Completeness4/5

The tool set covers a comprehensive range of SAP system diagnostics and RFC operations: audit, jobs, locks, short dumps, syslog, work processes, health check, user audit, and more. Minor gaps like missing write operations are intentional given the read-only safety focus, so surface feels complete for its purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Transforms SAP S/4HANA or ECC systems into conversational AI interfaces by exposing all OData services as dynamic MCP tools. Enables natural language interactions with ERP data including querying, creating, updating, and deleting entities through SAP BTP integration.
    19
    26 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Transforms SAP S/4HANA or ECC systems into conversational AI interfaces by exposing OData services as dynamic MCP tools. Enables natural language interactions with ERP data for querying, creating, updating, and deleting business entities.
    26 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    An enterprise-grade MCP server that enables AI agents to execute SAP RFC functions and read business data securely through the Model Context Protocol.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that provides seamless integration with SAP systems through RFC (Remote Function Call) connections. This server enables AI assistants and applications to interact with SAP functions, retrieve metadata, and perform operations with enhanced caching and version compatibility.
    13
    MIT