simplifier-mcp
The Simplifier MCP Server enables AI assistants to interact with the Simplifier Low-Code Platform for building and managing integration components and business logic.
Core Capabilities:
Business Objects - Create, update, and delete server-side JavaScript containers for business logic with functions that can call connectors, access Simplifier APIs (logging, utilities, user management), manage dependencies, and be tested with real data.
Connectors & Integration - Create, update, and delete integration components supporting REST, SOAP, and SAP RFC protocols. Configure endpoints, SSL settings, timeouts, and create specific connector calls with input/output parameters. Includes an SAP RFC wizard to search and auto-generate calls for SAP systems.
Authentication - Create and manage Login Methods including BasicAuth (UserCredentials), OAuth2, Token-based authentication (API keys, SimplifierToken), and SAP-SSO (Logon Ticket) with flexible credential sources and targeting via headers or query parameters.
Data Types - Create and update custom data structures (struct, collection, and domain types) organized by connector (con/) or business object (bo/) namespaces for use across the platform.
SAP System Management - Configure and manage SAP RFC connection targets with application server, system ID, client, routing, SNC settings, and instance restrictions.
Testing & Execution - Execute and test Business Object functions and Connector Calls with test parameters to verify functionality and retrieve results.
Monitoring & Resources - Access and filter platform log entries by level and time range, browse platform components (connectors, business objects, data types, OAuth clients), retrieve WSDL specifications, and access documentation through resource URIs.
Project Management - Assign all components (Business Objects, Connectors, Data Types, SAP Systems) to projects for organization and tracking.
Enables integration with the Simplifier Low Code Platform in the SAP ecosystem, providing tools for managing Connectors, Business Objects, Data Types, executing JavaScript functions for business logic, and calling external systems through standardized connectors.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@simplifier-mcplist all connectors in my project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Simplifier MCP Server
Simplifier is the leading low-code platform in the SAP ecosystem. Build custom apps in a full-stack low-code cloud development environment, reducing your dependency on full-scale coding. Integrate with ERP, CRM and other systems easily using standardised connectors.
Find more information in our community or try Simplifier for free.
This repository contains an MCP server (Model Context Protocol) that enables integration of AI assistants with the Simplifier Low Code Platform. It provides tools and resources for creating and managing Simplifier Connectors and BusinessObjects.
Overview
The Simplifier MCP Server allows to interact with a Simplifier instance to:
Manage Connectors and Logins: Integration components that connect external systems
Manage Business Objects: Server-side executed JavaScript functions for business logic
Manage Data Types: Data structures for interacting with Connectors and internal objects
Execute Business Object Functions: Run JavaScript functions with parameters and retrieve results
Execute Connector Calls: Call external systems via Simplifier Connector
Access platform resources: Browse connectors, business objects, and system information
Supported Connector types
Currently only the following connector types are fully supported:
REST
SOAP
SQL
SAPRFC
Client compatibility
The Simplifier MCP server exposes its data through two parallel surfaces so that every MCP client can use it in full, regardless of which parts of the MCP protocol that client supports:
Clients that implement MCP Resources (e.g. Claude Code, Claude Desktop, MCP Inspector) can browse and read Simplifier data through
simplifier://…URIs — for examplesimplifier://businessobjects,simplifier://connector/{name}, orsimplifier://documentation/….Clients that only implement MCP Tools (e.g. OpenCode, Cursor, Cline, Continue, Windsurf) get equivalent read access through tools named
*-list,*-get,documentation-getandconnector-wizard-rfc-search.
Both surfaces share the same underlying implementation, so behaviour is identical. Where both are available, clients should prefer resources.
Related MCP server: ABAP-ADT-API MCP-Server
Usage
Check out Simplifier Community Docs on how to use and set up the MCP server best.
Add the MCP to claude code ...
Using node / npx:
claude mcp add simplifier npx @simplifierag/simplifier-mcp@latest --env SIMPLIFIER_TOKEN=<your current simplifier token> --env SIMPLIFIER_BASE_URL=https://<yourinstance>-dev.simplifier.cloudUsing Docker:
claude mcp add simplifier-docker docker -- run --rm -i --env SIMPLIFIER_TOKEN=<your current simplifier token> --env SIMPLIFIER_BASE_URL=https://<yourinstance>-dev.simplifier.cloud simplifierag/simplifier-mcp:latestIf your Simplifier is hosted on premise, then the SIMPLIFIER_BASE_URL of your DEV instance will be different from the mentioned schema.
After a new login to Simplifier
With every login to Simplifier your SimplifierToken will change. So you will have to:
exit your AI agent (in this example claude),
then remove the configuration of the MCP
claude mcp remove simplifierand then add the MCP again with the new token (see upper command) and restart your AI agent
...or use this example configuration for claude code to use the MCP
e.g. in a file named .mcp.json placed in the directory, where claude is started.
Using node / npx:
{
"mcpServers": {
"simplifier-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"@simplifierag/simplifier-mcp@latest"
],
"env": {
"SIMPLIFIER_BASE_URL": "https://<yourinstance>-dev.simplifier.cloud",
"SIMPLIFIER_TOKEN": "<your current simplifier token>"
}
}
}
}Using Docker:
{
"mcpServers": {
"simplifier-docker": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"--env",
"SIMPLIFIER_TOKEN",
"--env",
"SIMPLIFIER_BASE_URL",
"simplifierag/simplifier-mcp:latest"
],
"env": {
"SIMPLIFIER_BASE_URL": "https://<yourinstance>-dev.simplifier.cloud",
"SIMPLIFIER_TOKEN": "<your current simplifier token>"
}
}
}
}Troubleshooting
If the MCP fails to connect to Simplifier on startup, an error page will open in your browser with details on the failure and information on how to fix the problem.
Available Tools
17 toolsbusinessobject-deleteBDestructiveIdempotent
Delete an existing Business Object
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the agent knows this is a destructive but idempotent operation. The description adds no behavioral context beyond what annotations provide (no mention of permissions needed, confirmation requirements, or what happens to associated data). No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence that directly states the tool's purpose with zero wasted words. It's appropriately front-loaded with the core action. For a simple deletion tool, this level of brevity is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with 0% schema coverage and no output schema, the description is inadequate. It doesn't explain what a 'Business Object' is, what deletion entails, what the 'name' parameter should contain, or what happens after deletion. The annotations help but don't compensate for these gaps in the description itself.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full burden for parameter documentation. It mentions no parameters at all, leaving the single 'name' parameter completely undocumented. The description fails to explain what 'name' represents or its format, providing no value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Delete') and resource ('Business Object'), making the purpose immediately understandable. It distinguishes from siblings like 'businessobject-update' by specifying deletion rather than modification. However, it doesn't specify what constitutes a 'Business Object' in this context, which slightly limits specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. With siblings like 'businessobject-update' and 'businessobject-function-delete', there's no indication of when deletion is appropriate versus updating or deleting functions. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
businessobject-function-deleteBDestructiveIdempotent
Delete an existing Business Object Function
| Name | Required | Description | Default |
|---|---|---|---|
| businessObjectName | Yes | ||
| functionName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide critical behavioral hints (destructiveHint: true, idempotentHint: true, readOnlyHint: false), but the description adds value by specifying that it deletes 'an existing' function, implying it requires pre-existence. It doesn't contradict annotations, and while it could mention more (e.g., permissions, side effects), it offers useful context beyond the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero waste—it directly states the tool's purpose without unnecessary elaboration. Every word earns its place, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with 2 undocumented parameters, no output schema, and no sibling differentiation, the description is inadequate. It lacks details on parameter meanings, usage context, or expected outcomes, failing to compensate for the schema and annotation gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for 2 parameters, the description fails to add any semantic meaning beyond what the bare schema provides. It doesn't explain what 'businessObjectName' or 'functionName' represent, their formats, or examples, leaving parameters largely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and target resource ('an existing Business Object Function'), providing specific verb+resource pairing. However, it doesn't explicitly distinguish this tool from sibling tools like 'businessobject-delete' or 'businessobject-function-update', which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'businessobject-function-update' or 'businessobject-delete'. It lacks context about prerequisites, appropriate scenarios, or exclusions, offering only a basic statement of purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
businessobject-function-testARead-onlyIdempotent
#Test a Business Object Function
Execute a business object function with provided input parameters for testing purposes. This allows you to test your functions with real data and see the results.
Common Base Data Type IDs:
String: "22ED1F787B6B0926AB0577860AF7543705341C053EB1B4A74E7CC199A0645E52"
Integer: "B9B1191E0B70BA0845CF4F6A4F4C017594F8BA84FD2F1849966081D53A8C836D"
Boolean: "2788FB5AA776C62635F156C820190D0FD3D558765201881A77382093F7248B39"
Date: "06A9841478D7BE17C423F11C38CD6829E372093DBEC144F2A85FC7165BE8CD80"
Float: "C09139C72F5A8A7E0036BA66CE301748BD617F463683EE03F92EDAAAA4AF8BC7"
Any: "D31053204B4A612390A2D6ECDF623E979C14ADC070A7CB9B08B2099C3011BCAB"
Parameter Usage:
Use parameter "name" if no alias is defined
Use parameter "alias" instead of name if alias is defined in the function
Values must match the expected data type
Error Handling:
Wrong BO/function name → 404 error
Missing required parameters → 400 error
Wrong parameter names → 400/500 error
Invalid parameter values → 400/500 error
| Name | Required | Description | Default |
|---|---|---|---|
| businessObjectName | Yes | ||
| functionName | Yes | ||
| inputParameters | No | Input parameters for the function |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond what annotations provide. While annotations indicate read-only, non-destructive, and idempotent operations, the description adds crucial details about error handling (404 for wrong names, 400/500 for parameter issues), parameter usage rules (name vs. alias), and data type requirements. This provides valuable operational context that annotations alone don't convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Common Base Data Type IDs, Parameter Usage, Error Handling) and front-loads the core purpose. While comprehensive, some information like the full list of data type IDs could be considered slightly verbose, but each section earns its place by providing essential operational guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema and only 33% schema description coverage, the description provides substantial contextual information. It covers purpose, usage, parameters, data types, and error handling comprehensively. The main gap is the lack of information about return values or output format, which would be helpful given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 33% schema description coverage, the description compensates substantially by explaining parameter usage in detail. It clarifies the relationship between 'name' and 'alias' parameters, provides data type IDs for common types, and explains value matching requirements. This adds meaningful semantic understanding beyond the basic schema structure, fully addressing the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Execute a business object function with provided input parameters for testing purposes') and distinguishes it from siblings by focusing on testing rather than creation, deletion, or updating. It explicitly mentions this is for testing with real data, which differentiates it from other business object tools that perform modifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool ('for testing purposes' and 'test your functions with real data'), but doesn't explicitly state when NOT to use it or name specific alternatives. It implies usage for testing functions rather than production execution, but lacks explicit exclusions or comparisons to sibling tools like businessobject-function-update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
businessobject-function-updateA
#Create or update a Business Object Function
Creates or updates a JavaScript function within a server-side Business Object. Functions contain business logic code and can call connectors or other business objects.
Common Base Data Type IDs:
String: "22ED1F787B6B0926AB0577860AF7543705341C053EB1B4A74E7CC199A0645E52"
Integer: "B9B1191E0B70BA0845CF4F6A4F4C017594F8BA84FD2F1849966081D53A8C836D"
Boolean: "2788FB5AA776C62635F156C820190D0FD3D558765201881A77382093F7248B39"
Date: "06A9841478D7BE17C423F11C38CD6829E372093DBEC144F2A85FC7165BE8CD80"
Float: "C09139C72F5A8A7E0036BA66CE301748BD617F463683EE03F92EDAAAA4AF8BC7"
Any: "D31053204B4A612390A2D6ECDF623E979C14ADC070A7CB9B08B2099C3011BCAB"
Parameter Structure: Each parameter needs name, dataTypeId, and isOptional. Description and alias are optional.
Code: Standard JavaScript code.
Parameter access in the code: Input parameters can be accessed with let myVar = input.parameter_name; Output parameters can be assigned with output.parameter_name = someOfMyResults; Attention: In case an alias is defined for a parameter, you have use "alias" instead of "parameter_name". Example: output.alias = someOfMyResults; You can do an early return of output, but you don't need to end with a return. The function code will be postfixed with a "return output" anyway. If you do a return instead of return output, then in the first case you will return undefined output parameters - this is most probably not what you want to do.
Business Objects Development Guide
Overview
This guide provides comprehensive information for implementing Business Object functions in Simplifier, including Object API usage, connector access patterns, and Business Object to Business Object communication.
Server-Side Business Object API
The Simplifier object provides access to various server-side methods and components:
Available Components
Logging: Server-side logging capabilities e.g. Simplifier.Log.info("my log") - see details: simplifier://documentation/server-businessobjects/api/Logging
Utilities/Tools: Helper functions and tools - see details: simplifier://documentation/server-businessobjects/api/Utils
Connectors: Access to data connectors - TODO add information later
Business Objects: Access to other Business Objects - see this description
Users: User management - see details: simplifier://documentation/server-businessobjects/api/User
Simplifier.Log.info(...) is logging to a Simplifier Log inside the database. The logged entries can be seen by the user but cannot be accessed by this MCP so far. console.log(...) is logging to the Simplifier logfile. The logged entries can be accessed by Simplifier Administrators only. The MCP cannot access these logs.
Accessing Other Business Objects
Basic Syntax
// Access other Business Objects
Simplifier.BusinessObject.<BOName>.<MethodName>(payload?)
// Access current Business Object methods
Simplifier.CurrentBusinessObject.<MethodName>(payload?)
// Access connector calls (find the available connector calls via resources)
Simplifier.Connector.<ConnectorName>.<ConnectorCallName>(payload?)Examples
// Call another Business Object function
var userInfo = Simplifier.BusinessObject.UserManager.getUserById({
userId: "12345"
});
// Call a function in the current Business Object
var result = Simplifier.CurrentBusinessObject.validateInput({
data: input.userData
});Configuration Requirements
Adding Dependencies
When accessing other Business Objects or connectors from a Business Object function, these components MUST be added as dependencies. (see schema for tool about getting, updating and creating Business Objects)
Dependency Types
Business Objects: Other BOs that will be called
Connectors: Data connectors that will be accessed
Dynamic Access Methods
Variables Approach
// Using variables for dynamic calls
var boName = "UserManager";
var methodName = "getUser";
var result = Simplifier.BusinessObject[boName][methodName](payload);Dynamic Call Function
// Using dynamic call patterns
var result = Simplifier.BusinessObject.call(boName, methodName, payload);Parameter Validation
// Always validate input parameters
if (!input.userId || input.userId.length === 0) {
output.error = "UserId is required";
return output;
}
var userResult = Simplifier.BusinessObject.UserService.getUser({
userId: input.userId
});Security Considerations
Always validate input parameters
Validate data types and ranges for all inputs
Performance Tips
Cache frequently accessed data when appropriate
Avoid unnecessary nested Business Object calls
Debugging Tips
To track down an issue (e.g. the connector issue) put the failing part into a very small bo function and return the result with JSON.stringify as a string, then you can check, whether the expected result is delivered. Indicate in the name of the function, that it can be deleted after debugging.
This documentation provides the essential patterns and best practices for implementing robust Business Object functions in Simplifier. Remember to always add dependencies and follow security best practices when accessing external components. Dependencies for yourself do not need to be added, but you can access own functions like Simplifier.CurrentBusinessObject.(payload?).
| Name | Required | Description | Default |
|---|---|---|---|
| businessObjectName | Yes | ||
| functionName | Yes | ||
| description | No | ||
| code | No | JavaScript function code | return {}; |
| validateIn | No | If true, validates that all mandatory input parameters are present before execution. Catches missing parameters early with clear validation errors (HTTP 422). If false, allows incomplete requests through, resulting in backend errors (HTTP 500). | |
| validateOut | No | If true, validates and filters the output response against the defined datatype structure, returning only defined fields. If false, returns the complete raw API response without filtering or validation. | |
| inputParameters | No | ||
| outputParameters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false, indicating mutation capability without destruction. The description adds valuable behavioral context beyond annotations: it explains code execution patterns (early returns, automatic postfixing), logging behavior (Simplifier.Log vs console.log differences), dependency requirements, and security/performance considerations. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is excessively long (over 1000 words) and poorly structured. It mixes tool-specific instructions with general development guides, burying critical information. While some content is valuable, much could be trimmed or moved to external documentation. The front-loaded section is useful but followed by extensive tangential material.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, mutation capability, no output schema) and low schema coverage, the description provides comprehensive context: it covers parameter semantics, code patterns, dependencies, security, performance, and debugging. It adequately compensates for missing structured fields, though the excessive length reduces usability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 38% schema description coverage, the description compensates significantly by explaining parameter structure (name, dataTypeId, isOptional), common data type IDs, code parameter access patterns (input/output with alias handling), and validation options (validateIn/validateOut implications). It adds substantial meaning beyond the sparse schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Creates or updates a JavaScript function within a server-side Business Object.' It specifies the verb (create/update), resource (Business Object Function), and scope (server-side). However, it doesn't explicitly differentiate from sibling tools like 'businessobject-function-delete' or 'businessobject-update' beyond the create/update distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through extensive development guidance (e.g., when to use dependencies, parameter validation patterns), but doesn't explicitly state when to choose this tool over alternatives like 'businessobject-update' or 'businessobject-function-test'. It provides best practices rather than direct usage rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
businessobject-updateA
#Create or update a Business Object
Attention: When updating dependencies or tags, allways fetch the Business Object resource first to ensure operating on the latest version. Existing dependencies and tags have to be resent when doing an update - otherwise they would be cleared.
Dependencies are REQUIRED to be added when the BO functions access connectors or other BOs using Simplifier.Connector.* or Simplifier.BusinessObject.* APIs.
Project Assignment
Business Objects must be assigned to projects using the project assignment parameters:
For Creating New BOs:
Set
projectsBeforeto empty array[]Set
projectsAfterChangeto array of project names to assign the BO to
For Updating Existing BOs:
Set
projectsBeforeto current project assignments (from existing BO)Set
projectsAfterChangeto new project assignments
Example:
{
"name": "MyBusinessObject",
"projectsBefore": [],
"projectsAfterChange": ["ProjectA", "ProjectB"]
}| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | Yes | ||
| dependencies | Yes | Array of dependencies that this BO requires. CRITICAL: Add connectors and other BOs that will be accessed from BO functions using Simplifier.Connector.<Name> or Simplifier.BusinessObject.<Name> syntax. If not provided when updating, existing dependencies will be preserved. | |
| tags | Yes | Array of tags for categorizing and organizing this Business Object. If not provided when updating, existing tags will be preserved. | |
| projectsBefore | No | Project names before the change. Use empty array [] when creating new BOs, or provide current projects when updating. | |
| projectsAfterChange | No | Project names to assign the BO to. Required for tracking project assignments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (mutation), openWorldHint=true (flexible inputs), idempotentHint=false (non-idempotent), and destructiveHint=false (non-destructive). The description adds valuable behavioral context beyond this: it warns about the need to fetch the latest version before updates to avoid conflicts, clarifies that dependencies and tags must be resent during updates or they will be cleared, and specifies that dependencies are REQUIRED for certain API accesses. This enriches the agent's understanding of mutation risks and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (attention notes, project assignment rules, example) and uses markdown formatting effectively. It is appropriately sized for a complex tool with 6 parameters, though it could be slightly more concise by integrating some schema-like details. Every sentence adds value, such as warnings about data preservation and project handling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, mutation operation, no output schema), the description is largely complete. It covers purpose, usage guidelines, critical behavioral nuances, and parameter semantics. However, it lacks details on the response format or error handling, which would be helpful since there's no output schema. The annotations provide safety context, but the description fills in practical gaps well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 67%, the description compensates significantly by explaining parameter semantics not fully covered in the schema. It details the critical role of dependencies (required for Simplifier.Connector.* or Simplifier.BusinessObject.* APIs), provides explicit rules for projectsBefore and projectsAfterChange parameters with creation vs. update scenarios, and includes a practical JSON example. This adds substantial meaning beyond the schema's basic property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: 'Create or update a Business Object.' It distinguishes this from sibling tools like businessobject-delete, businessobject-function-update, and connector-update by focusing on the core Business Object resource itself rather than functions, connectors, or deletion operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: for creating or updating Business Objects. It includes critical warnings about fetching the latest version before updates and resending dependencies/tags to avoid clearing them. It also distinguishes usage between creation (projectsBefore as empty array) and updates (projectsBefore as current assignments), offering clear alternatives within the tool's scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connector-call-deleteADestructiveIdempotent
Delete a Connector call
| Name | Required | Description | Default |
|---|---|---|---|
| connectorName | Yes | Name of the Connector to modify | |
| callName | Yes | Name of the connector call to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, readOnlyHint=false, openWorldHint=true, and idempotentHint=true. The description adds value by explicitly stating the deletion action, which aligns with the destructive hint, but doesn't provide additional behavioral context like confirmation prompts, error handling, or system impacts beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words, making it highly concise and front-loaded. It efficiently communicates the core purpose without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive nature (annotations cover this), two fully documented parameters, and no output schema, the description is adequate but minimal. It doesn't explain return values or error cases, which could be helpful for a deletion tool, leaving some gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the input schema fully documents both parameters ('connectorName' and 'callName'). The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline score of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and target resource ('a Connector call'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'connector-delete' or 'businessobject-delete', which would require explicit comparison to achieve a score of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 like 'connector-delete' or 'connector-call-update', nor does it mention prerequisites or exclusions. It merely states what the tool does without contextual usage information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connector-call-testARead-onlyIdempotent
#Test a Connector Call
Execute a connector call with provided input parameters for testing purposes. This allows you to test connector calls with real data and see the results.
Parameter Usage:
Each parameter requires a "name" (the field name) and a "value" (the actual data)
Parameter names must match the connector call's defined parameters
Values can be any JSON value (string, number, boolean, object, array). The connector call specifies the expected input data type. Important: In case you miss properties in the result, check whether a datatype other than Any is assigned as output data type and whether validateOut is set to true - in this case values will be filtered to fit the datatype.
| Name | Required | Description | Default |
|---|---|---|---|
| connectorName | Yes | ||
| callName | Yes | ||
| parameters | No | Input parameters for the connector call |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains that the tool executes calls with real data for testing, and the 'Important' note clarifies result filtering based on datatype and validateOut settings. Annotations already cover read-only, open-world, idempotent, and non-destructive traits, so the description complements them without contradiction, though it could mention more about error handling or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose. The bullet points and 'Important' note are structured for clarity, though the latter could be more concise. Every sentence adds value, but minor verbosity in the parameter explanation slightly reduces efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (testing with real data, 3 parameters, no output schema), the description is mostly complete: it covers purpose, usage, parameter details, and result filtering. However, it lacks information on output format, error handling, or prerequisites, which would enhance completeness for a testing tool without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 33% (only one parameter has a description), the description compensates well by detailing parameter usage: it explains that parameters require 'name' and 'value', names must match defined parameters, and values can be any JSON value. This adds meaning beyond the sparse schema, though it doesn't fully cover all three parameters (e.g., connectorName and callName semantics).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Execute a connector call with provided input parameters for testing purposes') and resource ('connector call'), distinguishing it from sibling tools like connector-call-delete or connector-call-update. It explicitly mentions testing with real data to see results, making the purpose unambiguous and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: for testing connector calls with real data to see results. It implicitly contrasts with sibling tools like connector-call-delete or connector-call-update by focusing on testing rather than modification or deletion, and the 'Important' note offers context on when results might be filtered, guiding usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connector-call-updateA
Create or update a Connector call
This tool allows to
create new connector calls
modify existing connector calls
Attention: When updating a call, allways fetch the existing resource first to ensure operating on the latest version. Existing parameters have to be resent when doing an update - otherwise they would be cleared.
Connector Types
Connector type 'REST'
A REST Connector call defines a HTTP request to the configured endpoint address of the Connector.
Call parameters may define the following:
HTTP Method
Parameter name: verb
Type: String
Possible Values: GET, POST, PUT, PATCH, DELETE, HEAD, OPTION
The parameter is mandatory. If not specified differently, use constValue "GET".
Request body format
Parameter name: postFormat
Type: String
Possible Values: JSON, PLAIN, FORM, XML
Request Body
Parameter name: body
It can have an arbitrary data type. The data is converted and Content-Type header is set according to the parameter format.
Request Headers
Parameter name: headParams/<http-header-name>
Type: String
Example: To add a header "X-TEST", define a parameter with the name "headParams/X-TEST".
Path parameters
Parameter name: pathParams[<n>]
Type: Array[String] - that means it must always be given with array index, i.e. pathParams[0].
To form the URL of the call with complete path, all components of the array are joined by "/" and appended to the endpoint URL or the connector.
Defining a path is optional. If omitted, just the endpoint URL is called.
Examples: (assume endpoint URL is http://test-api.com)
If pathParams[0] is "data", the address of the call is "http://test-api.com/data".
If pathParams[0]="data" and pathParams[1]="customer", the address of the call is "http://test-api.com/data/customer".
URL parameters
Parameter name: queryParams/<query-param-name> (Type: String)
Example: To set the url parameter like in "http://test-api.com?level=4", define a parameter with the name "queryParams/level" and give it a value 4.
Output parameters
A REST Connector must have at least one output parameter
An empty parameter name, or "/" refers to the whole output object.
Use alias "data" for the whole output object.
Connector type 'SOAP'
A SOAP Connector call defines a SOAP operation to be invoked on the configured WSDL service endpoint of the Connector. You can retrieve the configured WSDL for a connector using the resource simplifier://connector/{connectorName}/wsdl
Call parameters may define the following:
Binding Name
Parameter name: bindingName
Type: String
The binding name identifies the specific service binding to use from the WSDL specification.
The parameter is mandatory.
Operation Name
Parameter name: operationName
Type: String
The operation name specifies which SOAP operation to invoke from the binding.
The parameter is mandatory.
Operation parameters
Parameter name: soap/<operationName>/<parameterName>
Type: depends on operation
Example: soap/_-ITIZ_-BUS2038_CREATE/index
Operation parameters contains the SOAP request parameters according to the operation's input schema defined in the WSDL.
URL parameters
Parameter name: queryParams/<query-param-name>
Type: String
Optional parameters can be added as query parameters appended to the SOAP request URL.
Example: To set a URL parameter like in "http://soap-service.com?version=1.0", define a parameter with the name "queryParams/version" and give it a value "1.0".
Output parameters
Parameter name: soap/<response-message-name>/<element>
An empty parameter name, or "/" refers to the whole output object.
Use alias "data" for the whole output object.
The output typically contains the SOAP response parsed according to the operation's output schema defined in the WSDL.
For example, given the following WSDL operation:
<wsdl:operation name="InputOutput">
<wsp:Policy>
<wsp:PolicyReference URI="#OP___-ITIZ_-DRAW_READ_ORIGINAL_FILE" />
</wsp:Policy>
<wsdl:input message="tns:InputOutput" />
<wsdl:output message="tns:InputOutputResponse" />
</wsdl:operation>With the corresponding message and element definitions:
<wsdl:message name="InputOutputResponse">
<wsdl:part name="parameter" element="tns:InputOutputResponse" />
</wsdl:message><xsd:element name="InputOutputResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="InputOutput" type="xsd:base64Binary" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>the resulting object for the / output parameter would look like this:
{
"soap": {
"InputOutputResponse": {
"InputOutput": "some value here"
}
}
}To get the relevant field only, the output parameter name would be /soap/InputOutputResponse/InputOutput
Connector type 'SAPRFC'
An SAP RFC connector call executes a function on the SAP system defined in the endpoint.
As RFC calls only work with existing functions in the SAP system, use the
connector wizard to create them by first searching for available calls using the
resource simplifier://connector-wizard/{connectorName}/search/{term}/{page}.
After selecting the appropriate calls, use the tool connector-wizard-rfc-create
to generate the calls.
RFC connector calls should define the following parameters with constant values:
SOAP compatibility mode
Parameter name: configuration/output/soapCompatibility
Type: Boolean
This parameter should be set to false, unless the user specified otherwise.
Use default values in output
Parameter name: configuration/output/useDefaultValues
Type: boolean
This parameter should be set to true, unless the user specified otherwise.
Autocommit
Parameter name: configuration/autocommit
This parameter should be set to true, unless the user specified otherwise.
Additional return information
Parameter name: configuration/operation/additionalReturnInformation
Type: Array of strings
Possible values: IMPORT, CHANGING, TABLE, EXPORT, EXCEPTION
Unless specified otherwise by the user, this should be set to ["IMPORT", "EXPORT", "CHANGING", "TABLE", "EXCEPTION"].
Output parameters
An RFC connector's output parameters depend on the called SAP system function. You should usually let the wizard create them, as it has all the metadata available.
| Name | Required | Description | Default |
|---|---|---|---|
| connectorName | Yes | Name of the Connector to modify calls | |
| connectorCallName | Yes | Name of the Connector call to be added or modified | |
| description | No | ||
| validateIn | No | If true, validates that all mandatory input parameters are present before execution. Catches missing parameters early with clear validation errors (HTTP 422). If false, allows incomplete requests through, resulting in backend errors (HTTP 500). | |
| validateOut | No | If true, validates and filters the output response against the defined datatype structure, returning only defined fields (type "any" allows all fields). If false, returns the complete raw API response without filtering or validation. | |
| async | No | ||
| autoGenerated | No | ||
| connectorCallParameters | No | Call Parameters define the input and output arguments, specific to the connector type. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds valuable behavioral context beyond annotations: it warns about the need to fetch existing resources before updates to avoid data loss, explains that parameters must be resent during updates, and details connector-specific behaviors (e.g., REST requires at least one output parameter, SAPRFC calls should use wizards). No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured with sections for each connector type. However, it includes extensive examples and XML snippets that may be excessive. The core information is front-loaded ('create or update a Connector call'), but the document could be more concise by summarizing connector-specific details rather than providing exhaustive documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, no output schema, rich annotations), the description is largely complete. It covers purpose, usage guidelines, behavioral nuances, and parameter semantics across connector types. However, it lacks explicit error handling or response format details, which would be helpful given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 63%, the description compensates significantly by explaining parameter semantics for connector types (REST, SOAP, SAPRFC). It details parameter purposes (e.g., 'verb' for HTTP method, 'bindingName' for SOAP binding), formats (e.g., 'headParams/<http-header-name>'), and usage examples. This adds substantial meaning beyond the input schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: 'create new connector calls' and 'modify existing connector calls.' It distinguishes from siblings like connector-call-delete and connector-call-test by specifying creation/update operations, not deletion or testing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: 'When updating a call, always fetch the existing resource first to ensure operating on the latest version.' It also mentions that 'Existing parameters have to be resent when doing an update - otherwise they would be cleared.' However, it doesn't explicitly state when NOT to use this tool or name specific alternatives for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connector-deleteADestructiveIdempotent
Delete a Connector
| Name | Required | Description | Default |
|---|---|---|---|
| connectorName | Yes | Name of the Connector to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide rich behavioral hints (destructiveHint: true, idempotentHint: true, readOnlyHint: false, openWorldHint: true), so the bar is lower. The description doesn't contradict these annotations, and while it doesn't add much beyond the obvious 'delete' action, it implicitly confirms the destructive nature. However, it misses opportunities to clarify what 'delete' entails (e.g., irreversible removal, effects on dependencies) beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with just four words ('Delete a Connector'), front-loading the core action and resource. There's zero wasted text, and it efficiently communicates the essential purpose without unnecessary elaboration, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive deletion tool with no output schema, the description is minimal but adequate given the annotations cover key behavioral aspects (destructive, idempotent). However, it lacks context on prerequisites (e.g., authentication needs), side effects, or error handling, which could be important for safe invocation. The completeness is borderline, relying heavily on annotations to fill gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'connectorName' fully documented in the schema. The description adds no additional parameter information beyond what's in the schema, such as format examples or constraints. Given high schema coverage, a baseline score of 3 is appropriate as the description doesn't enhance parameter understanding but doesn't need to compensate for gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Delete') and resource ('a Connector'), making the purpose immediately understandable. However, it doesn't distinguish this tool from sibling deletion tools like 'businessobject-delete' or 'connector-call-delete', which would require specifying what type of connector is being deleted or how it differs from other deletable resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. With multiple deletion tools available (e.g., 'businessobject-delete', 'connector-call-delete', 'sap-system-delete'), there's no indication of what makes a 'Connector' distinct or when deletion is appropriate versus other operations like 'connector-update'. This leaves the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connector-updateA
Create or update a Connector
This tool allows to
create new connectors
modify existing connectors
Attention: When updating a Connector, allways fetch the existing resource first to ensure operating on the latest version. Existing tags and endpoints have to be resent when doing an update - otherwise they would be cleared.
Connector Types
Common settings
For all connectors using SSL / TLS, the sslSettings option has two fields:
trustType: An integer, with the following meaning:
0: Always trust any certificate, regardless of CA signing1: Only trust the certificate specified explicitly2: Use system certificates for trust3: Combination of 1+2, trust explicitly specified certificate and any system trusted certificate.
ignoreSSLCertificates: boolean, if set to true, any TLS validation will be skipped and the target will always be trusted, even when the certificate does not match the hostname.
When no SSL is required, or no specific settings apply, use the following sslSettings:
{
"trustType": 2,
"ignoreSSLCertificates": false
}Connector type 'REST'
The object under endpointConfiguration / configuration defines properties, specific to REST Connector:
endpointURL - the actual address of the remote REST endpoint
sslSettings - SSL related options.
Complete Example:
{
"name": "TestCreate",
"description": "",
"connectorType": "REST",
"active": true,
"timeoutTime": 60,
"endpointConfiguration": {
"endpoint": "Default",
"certificates": [],
"configuration": {
"endpointURL": "http://example-api.com/bla",
"sslSettings": {
"trustType": 2,
"ignoreSSLCertificates": false
}
}
},
"tags": [],
"assignedProjects": {
"projectsAfterChange": []
}
}Connector type 'SOAP'
The object under endpointConfiguration / configuration defines properties, specific to SOAP Connector:
wsdlUrl - the address of a WSDL specification, which is used for the connector
sslSettings - SSL related options.
Complete Example:
{
"name": "TestCreate",
"description": "",
"connectorType": "SOAP",
"active": true,
"timeoutTime": 60,
"endpointConfiguration": {
"endpoint": "Default",
"certificates": [],
"configuration": {
"wsdlUrl": "http://example-soap.com/myService?wsdl",
"sslSettings": {
"trustType": 2,
"ignoreSSLCertificates": false
}
}
},
"tags": [],
"assignedProjects": {
"projectsAfterChange": []
}
}Connector type 'SAP RFC'
The object under endpointConfiguration / configuration defines the following properties specific to SAP RFC connectors, all of them are mandatory:
sapSystem - ID of the target SAP system as a string.
parallelExecutions - Boolean. If true, batch calls (i.e. multiple function modules are executed in one call) are executed in parallel.
connectionPool - object with settings related to connection pooling:
peakLimit - number, maximum number of active connections at a time.
poolCapacity - number of pooled connections.
expirationTime - time in milliseconds for which connections are kept in the pool before being closed.
expirationCheckPeriod - time in milliseconds between checks for expired pooled connections.
maxGetClientTime - maximum time in milliseconds to wait for getting a connection (i.e. connection timeout).
Complete example:
{
"name": "MyRfc",
"description": "",
"connectorType": "SAPRFC",
"active": true,
"timeoutTime": 60,
"endpointConfiguration": {
"endpoint": "Default",
"certificates": [],
"configuration": {
"sapSystem": "ID4_0_800",
"parallelExecutions": false,
"connectionPool": {
"peakLimit": 0,
"poolCapacity": 1,
"expirationTime": 60000,
"expirationCheckPeriod": 60000,
"maxGetClientTime": 30000
}
}
},
"tags": [],
"assignedProjects": {
"projectsAfterChange": []
}
}| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No | ||
| connectorType | Yes | ||
| active | No | ||
| timeoutTime | No | maximum duration of a call in seconds | |
| endpointConfiguration | No | On creating a new connector, an endpoint configuration is mandatory. On updating a Connector: * endpoint configuration may be omitted if it is not intended to change. * a new endpoint configuration can be added by using a new endpoint name. * one endpoint configuration can be changed by using the name property of an existing configuration. | |
| tags | No | ||
| projectsBefore | No | Project names before the change. Use empty array [] when creating new Connectors, or provide current projects when updating. | |
| projectsAfterChange | No | Project names to assign the Connector to. Required for tracking project assignments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond what annotations provide. While annotations indicate this is a write operation (readOnlyHint: false) and not destructive, the description warns about data loss during updates ('Existing tags and endpoints have to be resent when doing an update - otherwise they would be cleared'), which is critical operational guidance not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While well-structured with clear sections and examples, the description is quite lengthy (over 800 words) with extensive technical details. Some information could potentially be streamlined, though most content appears valuable for this complex tool. The purpose is front-loaded effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity (9 parameters, nested objects, 44% schema coverage, no output schema), the description provides comprehensive context. It covers connector types, SSL settings, update warnings, parameter interactions, and complete examples, making it sufficiently complete for an agent to understand and use this tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 44% schema description coverage, the description compensates excellently by providing detailed parameter semantics. It explains connectorType-specific configurations (REST, SOAP, SAP RFC), sslSettings with trustType meanings, and provides complete JSON examples that clarify how parameters interact and should be structured, far exceeding what the sparse schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose as 'create new connectors' and 'modify existing connectors', providing specific verbs and resources. It clearly distinguishes this from sibling tools like connector-delete and connector-call-update by focusing on creation and modification rather than deletion or testing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use this tool for creation vs. update scenarios, including the important warning about fetching existing resources first when updating. However, it doesn't explicitly contrast when to use this versus alternatives like connector-wizard-rfc-create or other sibling tools, which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connector-wizard-rfc-createADestructive
Create one or more calls for an RFC connector using the wizard
The RFC connector requires calls to refer to existing functions on the remote SAP system. To find available functions,
use the resource template simplifier://connector-wizard/{connectorName}/search/{term}/{page}. Select the desired
function names and pass them to this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| connectorName | Yes | Name of the RFC Connector to add calls to | |
| rfcFunctionNames | Yes | Names of the SAP system's functions for which to create connector calls |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, readOnlyHint=false, openWorldHint=true, and idempotentHint=false, covering key behavioral traits. The description adds context about the wizard process and prerequisites, but doesn't disclose additional behavioral details like rate limits, auth needs, or specific destructive effects beyond what annotations imply. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the main purpose and followed by concise usage steps. Every sentence adds value without redundancy, making it efficient and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive creation with prerequisites), annotations cover safety and behavior well, and schema coverage is complete. The description adds necessary context about the wizard and resource template, compensating for the lack of output schema. It's mostly complete but could briefly mention expected outcomes or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for both parameters. The description adds semantic context by explaining that connectorName refers to an RFC Connector and rfcFunctionNames are SAP system functions, but this mostly reinforces the schema without providing significant extra meaning like format examples or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates calls for an RFC connector using a wizard, specifying the verb ('create'), resource ('calls'), and context ('RFC connector'). It distinguishes from siblings like connector-call-delete or connector-call-update by focusing on creation via a wizard, though it doesn't explicitly contrast with all alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: after finding available functions via a specific resource template and selecting desired function names. It implies prerequisites but doesn't explicitly state when not to use it or name alternatives among siblings, though the context is sufficient for typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datatype-deleteADestructiveIdempotent
#Delete a datatype Deletes the datatype with the given name. The name may be prefixed by the namespace, separated with a slash.
| Name | Required | Description | Default |
|---|---|---|---|
| qualifiedName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains the namespace prefix syntax and confirms the deletion action. While annotations already indicate destructiveHint=true and idempotentHint=true, the description reinforces the destructive nature and provides operational details not covered by structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with zero wasted words. Two sentences cover purpose, action, parameter meaning, and syntax details. The hash header provides clear structure, and every element serves a specific informational purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no output schema, the description provides good coverage: purpose, parameter semantics, and namespace syntax. However, it doesn't mention potential side effects, confirmation requirements, or what happens to dependent objects, which would be helpful given the destructive nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and only one parameter, the description fully compensates by explaining what 'qualifiedName' represents (datatype name with optional namespace prefix separated by slash). It provides complete semantic understanding of the single parameter beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Deletes') and resource ('datatype with the given name'), distinguishing it from sibling tools like datatype-update. It provides precise scope by mentioning namespace prefixing with slash syntax, making the purpose unambiguous and well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through the namespace prefix explanation, but doesn't explicitly state when to use this tool versus alternatives like datatype-update or when deletion is appropriate. It provides some operational guidance but lacks explicit when/when-not directives or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datatype-updateADestructive
#Create or update custom data types
Custom datatypes can be either
a struct type, which requires the definition of fields and their types (parameter "fields")
a collection type, which requires a datatype for its elements (parameter "collectionDatatype")
a domain type, which requires a parent type it is derived from (parameter "derivedFrom") These are mutually exclusive, so only specify exactly one of the three parameters.
In these parameters, referenced datatypes are specified by name. If it isn't a global datatype, the name must be prefixed with the namespace, separated with a slash.
Datatypes for connectors should be in the namespace "con/$name_of_connector", those for business objects in "bo/$name_of_bo".
| Name | Required | Description | Default |
|---|---|---|---|
| qualifiedName | Yes | ||
| description | No | ||
| derivedFrom | No | ||
| collectionDatatype | No | ||
| fields | No | ||
| tags | Yes | ||
| projectAssignments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it explains the mutually exclusive nature of three key parameters (fields, collectionDatatype, derivedFrom) and namespace formatting rules. While annotations already indicate this is a destructive, non-idempotent write operation (destructiveHint: true, idempotentHint: false), the description provides specific implementation details about datatype creation logic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with clear bullet points explaining the three datatype categories, followed by concise explanations of namespace conventions. Every sentence provides essential information with zero wasted words, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 7 parameters, nested objects, no output schema, and destructive annotations, the description does well covering the core datatype creation logic and parameter relationships. However, it doesn't explain the purpose of other parameters like tags, projectAssignments, or the qualifiedName format, leaving some gaps in understanding the full tool scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden of explaining parameters. It successfully explains the purpose and relationships of three critical parameters (fields, collectionDatatype, derivedFrom), their mutual exclusivity, and namespace formatting requirements for referenced datatypes. This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose as 'Create or update custom data types' with specific details about the three mutually exclusive datatype categories (struct, collection, domain). It clearly distinguishes this tool from its sibling 'datatype-delete' by focusing on creation/update rather than deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use specific parameters (mutually exclusive options for struct, collection, or domain types) and namespace conventions for connectors and business objects. However, it doesn't explicitly state when to use this tool versus alternatives like 'businessobject-update' or 'connector-update' which might handle related functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logging-listARead-onlyIdempotent
Get recent log entries from Simplifier
This tool provides access to the Simplifier logging system. You can filter logs by level and time range. If no filters are used, it returns the 50 most recent log entries. If you are expecting to find some logs but they are missing, ask the user to check whether logging for execution is set to the right level in the Simplifier server settings.
Log Levels:
0 = Debug
1 = Info
2 = Warning
3 = Error
4 = Critical
Parameters:
pageSize: number of log entries to return in one request, defaults to 50.
page: if more than "pageSize" entries are available, this can be used for accessing later pages. Starts at 0, defaults to 0.
logLevel: Filter by minimum log level (0-4)
since: ISO timestamp for entries since this time
from/until: ISO timestamps for a time range (must be used together)
Examples:
Default: Get 50 most recent entries
logLevel=3: Only errors and critical
since="2025-01-01T00:00:00Z": Entries since date
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Number of log entries to return, defaults to 50 | |
| page | No | Page number for pagination, starts at 0 | |
| logLevel | No | Filter by minimum log level (0=Debug, 1=Info, 2=Warning, 3=Error, 4=Critical) | |
| since | No | ISO timestamp - get entries since this time | |
| from | No | ISO timestamp - start of time range (must be used with until) | |
| until | No | ISO timestamp - end of time range (must be used with from) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, and idempotentHint=true, establishing this as a safe read operation. The description adds valuable behavioral context beyond annotations: default behavior (50 most recent entries), pagination mechanics, time range constraints ('from/until must be used together'), and troubleshooting advice about server logging levels.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, parameters, examples) and uses markdown formatting effectively. It's appropriately sized for a 6-parameter tool, though the parameter section could be more concise since it duplicates schema information. Most sentences earn their place by providing useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only logging tool with comprehensive annotations and 100% schema coverage, the description provides good contextual completeness. It explains the tool's scope, filtering capabilities, default behavior, and includes practical examples. The main gap is the lack of output schema, but the description compensates by explaining what gets returned (log entries).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all 6 parameters. The description's parameter section largely repeats what's in the schema (though it adds the log level mapping 0-4). The examples provide some additional usage context, but overall the description adds limited value beyond the comprehensive schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get recent log entries from Simplifier' with specific verb ('Get') and resource ('log entries'). It distinguishes itself from sibling tools (which are all businessobject/connector/datatype CRUD operations) by focusing on logging system access.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use it ('filter logs by level and time range') and what happens with no filters ('returns the 50 most recent log entries'). It also includes troubleshooting guidance for missing logs. However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginmethod-updateA
Create or update a Login Method
Create or update login methods for authenticating connectors with external systems.
Supported Types:
UserCredentials (BasicAuth): Username/password authentication
OAuth2: OAuth2 client-based authentication
Token: Token-based authentication (API keys, SimplifierToken)
SAPSSO: SAP-Single Sign on via Logon Ticket
Note that the type of a login method cannot be changed later. If you need to change the type, create a new login method instead.
UserCredentials (BasicAuth)
Creates or updates a basic authentication login method with various source types.
UserCredentials with Provided Source (Default)
Stores username and password directly in the login method.
Configuration:
loginMethodType: "UserCredentials"
sourceType: "Provided" (source ID: 1) - default
Target: Default (target ID: 0) - standard authentication header
Example - Creating BasicAuth:
{
"loginMethodType": "UserCredentials",
"sourceType": "Provided",
"name": "MyBasicAuth",
"description": "Basic auth for API",
"username": "admin",
"password": "secretPassword"
}Example - Updating BasicAuth password:
{
"loginMethodType": "UserCredentials",
"sourceType": "Provided",
"name": "MyBasicAuth",
"description": "Updated description",
"username": "admin",
"password": "newPassword",
"changePassword": true
}UserCredentials with Profile Reference
References a key in the user's profile.
Example:
{
"loginMethodType": "UserCredentials",
"sourceType": "ProfileReference",
"name": "MyBasicAuth",
"description": "BasicAuth from user profile",
"profileKey": "credentialsKey"
}UserCredentials with User Attribute Reference
References a user attribute by name and category.
Example:
{
"loginMethodType": "UserCredentials",
"sourceType": "UserAttributeReference",
"name": "MyBasicAuth",
"description": "BasicAuth from user attribute",
"userAttributeName": "myAttrName",
"userAttributeCategory": "myAttrCat"
}OAuth2 Login Methods
Creates or updates OAuth2-based login methods with various source configurations.
IMPORTANT: When creating an OAuth2 login method with a client reference, the oauth2ClientName MUST match one of the existing OAuth2 clients configured in Simplifier. You can discover available clients using the simplifier://oauthclients resource before creating the login method.
OAuth2 with Client Reference
Uses a configured OAuth2 client from Simplifier.
Discover available clients: Use simplifier://oauthclients resource
Configuration:
loginMethodType: "OAuth2"
sourceType: "ClientReference"
Target: 0 = default header, 1 = custom header, 2 = query parameter
Example - Default header:
{
"loginMethodType": "OAuth2",
"sourceType": "ClientReference",
"name": "MyOAuth",
"description": "OAuth with infraOIDC",
"oauth2ClientName": "infraOIDC",
"targetType": "Default"
}Example - Custom header:
{
"loginMethodType": "OAuth2",
"sourceType": "ClientReference",
"name": "MyOAuth",
"description": "OAuth with custom header",
"oauth2ClientName": "infraOIDC",
"targetType": "CustomHeader",
"customHeaderName": "X-Custom-Auth"
}Example - Query parameter:
{
"loginMethodType": "OAuth2",
"sourceType": "ClientReference",
"name": "MyOAuth",
"description": "OAuth as query param",
"oauth2ClientName": "infraOIDC",
"targetType": "QueryParameter",
"queryParameterKey": "authToken"
}OAuth2 with Profile Reference
References a key in the user's profile.
Example:
{
"loginMethodType": "OAuth2",
"sourceType": "ProfileReference",
"name": "MyOAuth",
"description": "OAuth from user profile",
"profileKey": "oauthToken",
"targetType": "Default"
}OAuth2 with User Attribute Reference
References a user attribute by name and category.
Example:
{
"loginMethodType": "OAuth2",
"sourceType": "UserAttributeReference",
"name": "MyOAuth",
"description": "OAuth from user attribute",
"userAttributeName": "myAttrName",
"userAttributeCategory": "myAttrCat",
"targetType": "Default"
}Token Login Methods
Creates or updates Token-based login methods for API authentication, including SimplifierToken support. Can be used for API-KEYs or for tokens, that you have received with former Simplifier Auth Clients and stored in the UserProfile or in the UserAttributes. In case you have received a token from a former connector call, you might want to add the token with every call in a header via a connector call input parameter.
Token with Default Source
Uses an empty configuration (no credentials stored). Typically used as a placeholder.
Configuration:
loginMethodType: "Token"
sourceType: "Default" (source ID: 0)
Target: 0 = default header, 1 = custom header
Example:
{
"loginMethodType": "Token",
"sourceType": "Default",
"name": "MyTokenDefault",
"description": "Token with default source",
"targetType": "Default"
}Token with SystemReference Source
Uses the SimplifierToken for authentication. This is the primary use case for authenticating Simplifier apps accessing the REST API.
Configuration:
loginMethodType: "Token"
sourceType: "SystemReference" (source ID: 3)
Target: 0 = default header, 1 = custom header
Example:
{
"loginMethodType": "Token",
"sourceType": "SystemReference",
"name": "SimplifierTokenAuth",
"description": "Uses SimplifierToken",
"targetType": "Default"
}Token with Provided Source
Stores a token value directly in the login method. Useful for API keys.
Configuration:
loginMethodType: "Token"
sourceType: "Provided" (source ID: 1)
Target: 0 = default header, 1 = custom header
Example - Creating Token:
{
"loginMethodType": "Token",
"sourceType": "Provided",
"name": "MyAPIKey",
"description": "API key authentication",
"token": "mySecretToken123",
"targetType": "Default"
}Example - Updating Token value:
{
"loginMethodType": "Token",
"sourceType": "Provided",
"name": "MyAPIKey",
"description": "Updated API key",
"token": "newSecretToken456",
"changeToken": true
}Example - Updating description only (without changing token):
{
"loginMethodType": "Token",
"sourceType": "Provided",
"name": "MyAPIKey",
"description": "Updated description only",
"token": "<not relevant>",
"changeToken": false
}Token with Custom Header
Place the token in a custom HTTP header.
Example:
{
"loginMethodType": "Token",
"sourceType": "Provided",
"name": "MyAPIKeyHeader",
"description": "Token in custom header",
"token": "myToken123",
"targetType": "CustomHeader",
"customHeaderName": "X-API-Token"
}Token with Profile Reference
References a token stored in the user's profile.
Example:
{
"loginMethodType": "Token",
"sourceType": "ProfileReference",
"name": "MyTokenFromProfile",
"description": "Token from user profile",
"profileKey": "apiTokenKey",
"targetType": "Default"
}Token with User Attribute Reference
References a token from a user attribute.
Example:
{
"loginMethodType": "Token",
"sourceType": "UserAttributeReference",
"name": "MyTokenFromAttr",
"description": "Token from user attribute",
"userAttributeName": "tokenAttribute",
"userAttributeCategory": "security",
"targetType": "Default"
}SAP-SSO Login Methods
Creates or updates SAP-SSO login methods for API authentication. Can be used for users authenticated against a SAP authentication method or with a constant value or one stored in the UserProfile or in the UserAttributes.
SAP-SSO with Default Source
Uses an empty configuration (no credentials stored). Uses the SAP Logon Ticket from the user, which needs to be logged in using SAP-SSO.
Configuration:
loginMethodType: "SAPSSO"
sourceType: "Default" (source ID: 0)
Target: 0 = default
Example:
{
"loginMethodType": "SAPSSO",
"sourceType": "Default",
"name": "MySAPSSODefault",
"description": "SAPSSO with default source",
"targetType": "Default"
}SAP-SSO with Provided Source
Stores a logon ticket value directly in the login method. Useful for API keys.
Configuration:
loginMethodType: "SAPSSO"
sourceType: "Provided" (source ID: 1)
Target: 0 = default header, 1 = custom header
Example - Creating SAP-SSO:
{
"loginMethodType": "SAPSSO",
"sourceType": "Provided",
"name": "MyAPIKey",
"description": "SAP-SSO with constant logon ticket authentication",
"ticket": "mySecretToken123",
"targetType": "Default"
}Example - Updating ticket value:
{
"loginMethodType": "SAPSSO",
"sourceType": "Provided",
"name": "MyAPIKey",
"description": "SAP-SSO with constant logon ticket authentication",
"ticket": "newSecretToken456",
"changeToken": true
}Example - Updating description only (without changing ticket):
{
"loginMethodType": "SAPSSO",
"sourceType": "Provided",
"name": "MyAPIKey",
"description": "Updated description only",
"ticket": "<not relevant>",
"changeToken": false
}SAP-SSO with Profile Reference
References a ticket stored in the user's profile.
Example:
{
"loginMethodType": "SAPSSO",
"sourceType": "ProfileReference",
"name": "MyTicketFromProfile",
"description": "Ticket from user profile",
"profileKey": "apiTicket",
"targetType": "Default"
}SAP-SSO with User Attribute Reference
References a ticket from a user attribute.
Example:
{
"loginMethodType": "SAPSSO",
"sourceType": "UserAttributeReference",
"name": "MyTicketFromAttr",
"description": "Ticket from user attribute",
"userAttributeName": "ticketAttribute",
"userAttributeCategory": "security",
"targetType": "Default"
}| Name | Required | Description | Default |
|---|---|---|---|
| loginMethodType | Yes | Type of login method: UserCredentials for BasicAuth, OAuth2 for OAuth2-based auth, Token for token-based auth, SingleSignOn for SAP-SSO Logon Ticket | |
| name | Yes | Name of the login method | |
| description | Yes | Description of the login method | |
| sourceType | No | Source type: * Default (system default - credentials for UserCredentials, OAuth2 client for OAuth2, empty for Token, user logon ticket for SAP-SSO) * SystemReference (Token - uses SimplifierToken) * Provided (UserCredentials - username/password, Token - token value) * Reference (OAuth2 - OAuth2 client reference) * ProfileReference (user profile key) * UserAttributeReference (user attribute) | |
| username | No | [UserCredentials Default/Provided] Username for basic authentication. Must not be empty string. If the information is not given (i.e. in case of Microsoft PAT authentication), use a non empty placeholder | |
| password | No | [UserCredentials Default/Provided] Password for basic authentication | |
| changePassword | No | [UserCredentials Default/Provided] Set to true when updating to change the password | |
| token | No | [Token Provided] Token value for authentication | |
| changeToken | No | [Token Provided] Set to true when updating to change the token | |
| ticket | No | [SingleSignOn Provided] Ticket value for authentication | |
| changeTicket | No | [SingleSignOn Provided] Set to true when updating to change the ticket | |
| oauth2ClientName | No | [OAuth2 Default/Reference] Name of the OAuth2 client (discover via simplifier://oauthclients). **Important**: The `oauth2ClientName` **MUST** match one of the existing OAuth2 clients configured in Simplifier. You should discover available clients using the `simplifier://oauthclients` resource before creating the login method. | |
| profileKey | No | [ProfileReference] Key name in the user's profile | |
| userAttributeName | No | [UserAttributeReference] Name of the user attribute | |
| userAttributeCategory | No | [UserAttributeReference] Category of the user attribute | |
| targetType | No | [OAuth2/Token] Target type: Default (standard auth header), CustomHeader (custom header name), QueryParameter (query param - OAuth2 only) | Default |
| customHeaderName | No | [OAuth2 CustomHeader] Name of the custom authentication header | |
| queryParameterKey | No | [OAuth2 QueryParameter] Key name for the query parameter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations. Annotations indicate this is a mutable, non-destructive operation (readOnlyHint: false, destructiveHint: false), but the description elaborates on update semantics, type immutability constraints, and provides specific examples for different authentication scenarios. It also mentions prerequisites like discovering OAuth2 clients, which adds practical implementation guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is excessively long (over 150 lines) with redundant information. While well-structured with sections for each authentication type, it includes multiple repetitive examples and could be significantly condensed. The core concepts could be communicated in a fraction of the length without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 18 parameters and no output schema, the description provides comprehensive coverage of authentication types, source configurations, and usage patterns. It addresses the main complexity areas through detailed examples. The main gap is the lack of information about return values or error conditions, but given the tool's complexity, the description does an above-average job of providing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the description adds substantial value through comprehensive examples that illustrate parameter combinations for different authentication types. It provides concrete JSON configurations for UserCredentials, OAuth2, Token, and SAPSSO methods with various source types, showing how parameters interact in real-world scenarios far beyond what the schema descriptions provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create or update login methods for authenticating connectors with external systems.' It specifies the verb (create/update) and resource (login methods), and distinguishes from siblings by focusing on authentication configuration rather than business objects, connectors, or other system components.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context by listing supported authentication types and noting that 'the type of a login method cannot be changed later,' but it doesn't explicitly state when to use this tool versus alternatives. While it mentions discovering OAuth2 clients before creation, there's no guidance on when to choose this tool over other authentication configuration methods 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-system-deleteADestructiveIdempotent
Delete an existing SAP system
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, which the description doesn't contradict. The description adds minimal context by specifying 'existing SAP system,' implying it won't work for non-existent systems, but doesn't elaborate on permissions, confirmation requirements, or recovery options beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero waste. Every word contributes directly to stating the tool's purpose without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's destructive nature (per annotations) and lack of output schema, the description is minimally adequate but incomplete. It doesn't address potential side effects, error conditions, or what happens post-deletion, which would be valuable for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, with one parameter 'name' undocumented in the schema. The description doesn't add any parameter details beyond what's implied by the tool name, failing to compensate for the coverage gap. Baseline 3 applies as the schema provides structure but no descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and target resource ('an existing SAP system'), providing specific verb+resource pairing. However, it doesn't explicitly differentiate from sibling tools like 'sap-system-update' or other delete operations, which would be needed for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. With sibling tools like 'sap-system-update' and multiple other delete operations, there's no indication of prerequisites, appropriate contexts, or when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sap-system-updateADestructive
#Create or update a SAP system
SAP Systems are used as the target of RFC connectors.
Attention: When updating tags, allways fetch the SAP system resource first to ensure operating on the latest version. Existing tags have to be resent when doing an update - otherwise they would be cleared.
You can find existing SAP systems with the simplifier://sap-systems resource, and details about a single system with simplifier://sap-system/{systemName}
Project Assignment
SAP systems must be assigned to projects using the project assignment parameters:
For Creating New SAP Systems:
Set
projectsBeforeto empty array[]Set
projectsAfterChangeto array of project names to assign the SAP system to
For Updating Existing SAP Systems:
Set
projectsBeforeto current project assignments (from existing SAP system)Set
projectsAfterChangeto new project assignments
Example:
{
"name": "MySapSystem",
"projectsBefore": [],
"projectsAfterChange": ["ProjectA", "ProjectB"]
}| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | Yes | ||
| active | No | enables or disables the SAP system. Should be true, if you want to use the system | |
| instanceRestrictions | Yes | restrict this system to specific Simplifier instances, it isn't transported to unlisted instances. If this is empty, no restriction is applied | |
| systemType | No | The type of your SAP System (e.g. Development, Testing, Production…) | |
| configuration | Yes | ||
| tags | Yes | Array of tags for categorizing and organizing this SAP system. If not provided when updating, existing tags will be preserved. | |
| projectsBefore | No | Project names before the change. Use empty array [] when creating new SAP systems, or provide current projects when updating. | |
| projectsAfterChange | No | Project names to assign the SAP system to. Required for tracking project assignments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it warns about tag clearing during updates (requiring fetching the latest version first) and explains project assignment logic. Annotations already indicate this is a destructive, non-idempotent write operation (destructiveHint: true, idempotentHint: false), but the description provides specific implementation details that help the agent use the tool correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, attention warning, resource references, project assignment rules, example). While somewhat lengthy, every section serves a purpose: the warning about tags is crucial, the project assignment explanation is necessary for correct usage, and the example clarifies complex parameter interactions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 9 parameters, nested objects, no output schema, and destructive annotations, the description provides substantial context: it explains the tool's role in the ecosystem, gives implementation warnings, details project assignment logic, and provides usage examples. The main gap is lack of information about return values or error handling, but overall it's quite comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema description coverage, the description compensates well by explaining critical parameter semantics: it details the purpose and usage of 'projectsBefore' and 'projectsAfterChange' parameters with clear examples, and provides important warnings about 'tags' parameter behavior during updates. This adds significant value beyond the schema's technical descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Create or update a SAP system' and explains that SAP Systems are used as targets for RFC connectors. It distinguishes from siblings like 'sap-system-delete' by focusing on creation/update operations rather than deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool versus alternatives: it references finding existing systems with 'simplifier://sap-systems' and details with 'simplifier://sap-system/{systemName}'. It also gives clear instructions for creating vs. updating scenarios, including project assignment rules and tag handling warnings.
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. Dates show when Glama detected each change.
17 tool updates
- First observed
businessobject-delete - First observed
businessobject-function-delete - First observed
businessobject-function-test - First observed
businessobject-function-update - First observed
businessobject-update - First observed
connector-call-delete - First observed
connector-call-test - First observed
connector-call-update - First observed
connector-delete - First observed
connector-update - First observed
connector-wizard-rfc-create - First observed
datatype-delete - First observed
datatype-update - First observed
logging-list - First observed
loginmethod-update - First observed
sap-system-delete - First observed
sap-system-update
TDQS
Tools are well-distinguished by resource type (Business Object, Connector, Data Type, etc.) and action (delete, update, test), with clear boundaries. Minor ambiguity exists between 'businessobject-update' and 'businessobject-function-update' as both involve updates, but their distinct targets (BO vs. BO function) are clarified in descriptions.
Naming follows a consistent pattern of 'resource-action' with hyphens (e.g., businessobject-delete, connector-call-test). All tools adhere to this snake_case-like convention, making them predictable and easy to parse. No mixing of styles or deviations observed.
17 tools is slightly high but reasonable for a comprehensive Simplifier management server covering multiple resource types (Business Objects, Connectors, Data Types, etc.). It provides full CRUD operations across these domains, though it could be streamlined by grouping similar actions.
The tool set offers complete coverage for managing Simplifier resources: CRUD operations for Business Objects, Connectors, Data Types, SAP Systems, and Login Methods, plus testing tools and logging. No obvious gaps exist; agents can perform full lifecycle management and debugging tasks.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that provides access to Testiny projects, test cases and test runs
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
MCP server for AI access to Swagger by SmartBear.
MCP server for Product Management
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP Server simplifies the implementation of the Model Context Protocol by providing a user-friendly API to create custom tools and manage server workflows efficiently.214MIT
- AlicenseCqualityNot gradedmaintenanceAn MCP server that facilitates seamless interaction with SAP ABAP systems to manage development objects, transport requests, and source code. It provides a comprehensive suite of tools for performing syntax checks, object searches, and code modifications via the ADT API.100-
- AlicenseCqualityNot gradedmaintenanceA Model Context Protocol server that facilitates seamless communication between ABAP systems and MCP clients for managing ABAP objects, transport requests, and code analysis. It acts as a wrapper for the ABAP ADT API to enhance the efficiency of ABAP development workflows.100-
- AlicenseCqualityDmaintenanceAn MCP server that enables seamless communication between ABAP systems and MCP clients using the ABAP Development Tools (ADT) API. It provides tools for managing ABAP objects, handling transport requests, and performing code analysis directly through MCP-compatible interfaces.100MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/simplifier-ag/simplifier-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server