hybris-mcp-lite
Provides read-only access to a local SAP Commerce (Hybris) instance through HAC, enabling FlexibleSearch queries and inspection of types, beans, configuration, logs, monitoring, and cronjobs.
Click on "Deploy 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., "@hybris-mcp-liteWhich cronjobs failed recently in my local Hybris instance?"
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.
hybris-mcp-lite

A read-only MCP server that lets Claude (or any MCP client) look inside a local SAP Commerce (Hybris) instance through HAC, in plain language.
Local/dev only. Not for production.
Why
HAC is useful, but it is a lot of tabs and forms when you just want a quick answer. This server exposes a small set of read-only HAC features as MCP tools, so you can ask about types, beans, config, cronjobs, logs and FlexibleSearch from your editor or chat client and stay where you are.
Related MCP server: local-mcp-toolbox
Example prompts
"What attributes does Product have, and which of them are localized?"
"Which cronjobs failed recently?"
"Show me the value of
catalog.sync.workers.""Find the 10 most recently modified products in the Staged catalog."
"Tail the last 200 log lines and show me only the errors."
Tools
Tool | What it does |
| Run a FlexibleSearch query, or translate it to SQL with |
| Attributes, deployment table and subtypes of a type from the type system. |
| Implementation class and aliases of a Spring bean. |
| Read one property or all properties. Values of keys matching |
| Tail the local console log (1 to 2000 lines), with an optional regex filter. |
| Memory, threads, thread dump, cache or cluster diagnostics. |
|
|
Quick start
git clone https://github.com/andreescocard/hybris-mcp-lite.git
cd hybris-mcp-lite
npm install
npm run buildThen register the server with your client. You need a running local HAC and a HAC user.
Claude Code
claude mcp add hybris-hac-lite \
-e HAC_URL=https://localhost:9002/hac -e HAC_USER=admin -e HAC_PASS=... \
-e HAC_INSECURE_TLS=true -e HAC_LOG_PATH=/path/to/console.log \
-- node /absolute/path/to/hybris-mcp-lite/dist/index.jsClaude Desktop
{
"mcpServers": {
"hybris-hac-lite": {
"command": "node",
"args": ["/absolute/path/to/hybris-mcp-lite/dist/index.js"],
"env": {
"HAC_URL": "https://localhost:9002/hac",
"HAC_USER": "admin",
"HAC_PASS": "your-local-password",
"HAC_INSECURE_TLS": "true",
"HAC_LOG_PATH": "/path/to/console.log"
}
}
}
}Configuration
Variable | Required | Description |
| no | HAC base URL. Default |
| yes | HAC user. |
| yes | HAC password. |
| for | Path to the local console log file. |
| no | Request timeout in ms. Default 30000. |
| no | Set to |
| no | Set to |
Safety by design
Read-only tool set. There is no Groovy console, ImpEx, SQL, system update, cache clear or reindex tool.
commit=false. The tools that go through HAC's scripting console always submit withcommit=false, so HAC rolls back any write.Config masking.
config_getmasks values of keys that look like secrets (pass,secret,token,key,credential).Private-host guard. The server refuses a
HAC_URLunless the host is localhost, 127.x, ::1, 10.x, 172.16-31.x, 192.168.x,*.localor*.localhost.HAC_ALLOW_REMOTE=trueoverrides this.Opt-in insecure TLS. Certificate checks are only disabled when you set
HAC_INSECURE_TLS=true.
One caveat: masking applies to config_get only. Output from logs_tail and monitoring_info (including thread dumps) is not masked and may contain sensitive data. Anything a tool returns is sent to your MCP client and its model.
Development
npm test # unit tests
npm run smoke # runs every tool against the HAC in your env varsDisclaimer
Intended for local and development instances only, not for production. Provided as is, with no warranty.
SAP Commerce and Hybris are trademarks of SAP SE. This project is not affiliated with or endorsed by SAP.
License
MIT
Author
André Escocard, LinkedIn.
Available Tools
7 toolsbeans_infoB
Read-only. Return Spring bean implementation and aliases using the HAC application context.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description still discloses the most important trait — 'Read-only' — plus the data source (HAC application context), which hints that a running HAC/admin context is required. It says nothing about behavior when the bean does not exist, ambiguity resolution when multiple aliases match, or whether the call can be slow against a live context.
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?
Two short sentences with the safety profile front-loaded ('Read-only') followed by the resource and its source. No filler, nothing to trim.
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 one-parameter, no-output-schema, no-annotation tool, the description covers the resource and its source but leaves the meaning of the required 'name' input and the failure/ambiguity behavior unaddressed. It is workable but not complete enough for confident invocation on the first try.
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 single parameter 'name' is documented nowhere. The description never clarifies whether 'name' means a bean ID, an alias, a fully qualified class name, or a partial match, which is exactly the gap the description should fill for this tool.
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?
States a specific verb and resource: returns the Spring bean implementation and its aliases, read from the HAC application context. That is far more informative than the bare name 'beans_info'. It does not, however, distinguish itself from related siblings such as type_info or config_get, which also inspect runtime/configuration state.
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?
There is no statement of when to use this tool, when not to, or which sibling to pick instead (e.g. type_info for class metadata vs beans_info for bean lookups). The only usage signal is the implied 'look up a bean by name', which the agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
config_getA
Read-only. Return a configuration property by key, or all visible keys when key is omitted. Values of keys matching pass/secret/token/key/credential are masked.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly states that the tool is read-only and discloses a meaningful security behavior: values for keys matching pass/secret/token/key/credential are masked. It does not explain what 'visible' means regarding permissions or what happens if a requested key is absent, but the core behavioral traits are well covered.
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 three short sentences. The read-only constraint is front-loaded, followed by the main behavior and the masking exception, with no wasted wording.
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 simple read-only getter with one optional parameter and no output schema, the description covers the essential behavior: key-based lookup, list-all fallback, and secret masking. It could be slightly more complete by defining visibility or missing-key behavior, but it is sufficient for an agent to call the tool correctly.
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 must compensate. It explains that the single optional parameter selects a property by key and that omitting it returns all visible keys, adding essential meaning beyond the bare string type in the 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 uses a specific verb and resource: 'Return a configuration property by key.' It also clarifies the omitted-key behavior. It does not explicitly distinguish itself from any sibling tool, but the configuration domain is clearly separate from the listed siblings such as logs_tail and cronjob.
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 states the two operational modes: pass a key for one property, or omit it to list all visible keys. This gives clear usage context, though it does not name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cronjobB
Read-only. List cronjobs (action=list) or return the status of one by code (action=status).
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| action | No | list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does the most important job itself by declaring 'Read-only', which tells the agent this tool will not mutate jobs. It stops there: no mention of permissions, pagination, error behavior when a code is invalid, or what the returned status contains.
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?
Two short clauses, front-loaded with the safety profile and then the mode split. Zero filler.
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 two-parameter read-only tool with an output schema absent, the description covers the essentials of invocation but leaves the code parameter's origin undefined and says nothing about return shape or failure modes.
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 coverage is 0%, so the description must compensate. It maps action values to behaviors (list vs status), but the 'code' parameter—the one genuinely ambiguous input—is only obliquely referenced as 'by code', with no indication of where a code comes from or its format.
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?
Specific verb (list/return status) against a specific resource (cronjobs), and it explicitly enumerates the two operating modes keyed to the action enum. It does not differentiate itself from siblings like logs_tail or monitoring_info, which is the only thing keeping it from 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?
Implies that action=list is the default listing behavior and action=status is used when you have a code, but never states when to prefer this tool over related siblings such as logs_tail or monitoring_info, nor what happens if status is requested without a code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flexible_searchB
Read-only. Run HAC FlexibleSearch against the configured local HAC. Optional translate=true returns generated SQL only.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| maxCount | No | ||
| translate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does disclose that the operation is read-only and that translate=true changes the response to generated SQL only. However, it omits permission requirements, query constraints, result limits, and other behavioral details an agent would need.
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?
Two short sentences, with the read-only property front-loaded and no wasted text. The brevity does not obscure the core operation.
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?
There is no output schema and no annotations, and the description does not explain return shape, query syntax expectations, or the maxCount limit. For a search tool with three parameters, this leaves important 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 0%, so the description must compensate. It clarifies only translate; query and maxCount are left unexplained, including the default and maximum result cap of 200.
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 states a specific action and resource: running HAC FlexibleSearch against the configured local HAC. It also notes the read-only nature, making the operation distinguishable from unrelated siblings.
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?
It explains what translate=true does, but gives no guidance on when to use this tool versus alternatives, nor any exclusions or preconditions for selecting FlexibleSearch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logs_tailB
Read-only. Tail the local SAP Commerce/HAC console log. Optional grep filters the tailed source lines.
| Name | Required | Description | Default |
|---|---|---|---|
| grep | No | ||
| lines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description usefully discloses that the operation is read-only and local, and that grep filters tailed source lines. However, it does not clarify whether tailing is a one-shot snapshot or a follow, how errors are handled, or what the return shape is, leaving material behavioral gaps.
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 short, front-loaded with the read-only safety signal, and every sentence carries useful information without repetition.
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 two-parameter tool with no annotations, no output schema, and no schema descriptions, the definition is under-specified. It omits the meaning of lines, the interaction between grep and lines, and any sense of the returned output.
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 must document both parameters. It partially explains grep as an optional filter on tailed source lines, but it says nothing about the lines parameter, its default of 200, or its 1–2000 bounds.
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 gives a specific verb and resource: tail the local SAP Commerce/HAC console log. It does not explicitly distinguish this tool from siblings such as monitoring_info or flexible_search, so it stops short of 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?
It implies usage for viewing recent console logs and mentions an optional grep filter, but it never states when to choose this over monitoring_info or flexible_search, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monitoring_infoA
Read-only. Return cluster, memory, threads, cache, or thread-dump diagnostics via tenant-safe Groovy.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | memory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavior, and it does contribute two real facts: the operation is read-only and the Groovy execution is tenant-scoped. It omits cost/risk context that matters here — e.g., whether a thread dump is expensive or blocking, and what the response shape looks like.
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?
Two short sentences with the safety constraint ('Read-only.') front-loaded before the resource description. No filler, though the trailing 'via tenant-safe Groovy' is an implementation detail that takes space without changing how the agent calls the tool.
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 simple one-param optional tool this is close, but with no output schema and no annotations the description should at least sketch the return format for each section (structured metrics vs. raw text dump). As written, an agent cannot anticipate the response shape.
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 coverage is 0% and the single enum param is otherwise undocumented, so the description carries the full burden. It does compensate by mapping each enum value to a meaning ('dump' → thread-dump, plus cluster/memory/threads/cache), though it never states the default of 'memory' or what each section contains.
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?
States a specific verb ('Return') and resource ('diagnostics'), and enumerates the five concrete sections it can deliver, so an agent knows exactly what comes back. It does not explicitly contrast itself with siblings like config_get or beans_info, but the diagnostics framing is distinct enough to separate it.
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?
Usage is only implied: the enumerated sections hint that this is the tool for cluster/memory/thread/cache inspection, but there is no explicit 'use this when...' or 'prefer config_get for...' guidance. Nothing tells the agent when to pick a sibling instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_infoB
Read-only. Return SAP Commerce type attributes, deployment data, and subtypes via a tenant-safe Groovy template.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the key trait that this is read-only and that it runs through a 'tenant-safe Groovy template', which hints at isolation and execution model. It says nothing about auth requirements, rate limits, latency, or failure modes for unknown type codes.
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?
Two short sentences with the safety trait front-loaded, no filler. The 'tenant-safe Groovy template' clause is slightly implementation-flavored but still carries useful signal.
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 single-parameter read tool with no output schema and no annotations, the definition covers intent but leaves the agent guessing about the type identifier format and the shape of the returned attributes/deployment/subtype data.
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 coverage is 0% and the single required 'type' parameter is undocumented in the schema, so the description should explain its expected format (e.g., a type code like 'Product'). It only implies the parameter via 'type attributes' and adds no syntax or naming guidance.
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?
States a specific verb and resource: returns SAP Commerce type attributes, deployment data, and subtypes for a given type. This is clearly distinct from siblings like beans_info or config_get, though the description never explicitly contrasts itself with them.
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?
No indication of when to choose this over flexible_search or beans_info, nor what preconditions (tenant context, permissions) are needed. 'Read-only' implies a safe lookup but gives no routing guidance.
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.
7 tool updates
v0.1.0- First observed
beans_info - First observed
config_get - First observed
cronjob - First observed
flexible_search - First observed
logs_tail - First observed
monitoring_info - First observed
type_info
TDQS
Scored across 7 tools
Each tool targets a clearly distinct diagnostic resource: FlexibleSearch queries, console logs, type metadata, configuration properties, Spring beans, monitoring diagnostics, and cronjobs. There is no meaningful overlap in purpose, so an agent can reliably select the right tool.
Most tools follow a consistent snake_case resource-oriented pattern (flexible_search, logs_tail, type_info, config_get, beans_info, monitoring_info). The only notable deviation is the bare noun 'cronjob', which is still readable but breaks the pattern slightly.
Seven tools is well-scoped for a lightweight read-only SAP Commerce/HAC diagnostic server. Each tool covers a distinct operational area and earns its place without redundancy.
The tool set covers the core read-only diagnostic surface: querying, logs, type metadata, config, beans, monitoring, and cronjobs. Minor gaps exist around broader extension/package inspection or more granular cronjob operations, but these are reasonable omissions for a 'lite' read-only server.
Maintenance
Related MCP Connectors
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Read-only agent-commerce audit, upgrade verification, diagnosis and x402 probing.
Read-only MCP security data: check catalogue, public scan status and your own scan reports.
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables read-only observability of a Linux host via MCP, exposing allowlisted systemd, docker, nginx, logs, disk, and cert info without shell access.MIT
- AlicenseAqualityAmaintenanceA secure, local-first MCP server for read-only inspection and troubleshooting of development environments, exposing narrow, typed, auditable capabilities for repository inspection, log summarization, Docker review, and security scanning without granting unrestricted machine access.8MIT
- AlicenseNot gradedqualityBmaintenanceEnables local MCP access to attach to isolated backend environments, monitor runtime health/logs, check security posture, manage snapshots and diffs, audit events, and view sanitized remote inventory.9 npmApache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI clients to perform safe, read-only IT diagnostics and retrieve local runbooks, asset records, and knowledge articles through MCP, with allowlisted network checks and audit logging.MIT