Skip to main content
Glama

AEM DEV MCP Server

A TypeScript-based Model Context Protocol (MCP) server that provides connectivity tools for Adobe Experience Manager (AEM) instances. This server enables AI agents to interact with AEM systems, manage OSGi bundles and configurations, monitor health, and troubleshoot common issues.

Features

  • Multi-Instance Management: Connect to multiple AEM instances simultaneously with alias-based grouping

  • OSGi Bundle Operations: List, start, stop, refresh, restart, and uninstall bundles

  • Component Management: Enable, disable, and inspect OSGi components

  • Configuration CRUD: Create, read, update, and delete OSGi configurations

  • Health Monitoring: Comprehensive system health checks across instances

  • Log Analysis: Search and analyze AEM logs with regex patterns and pagination

  • Groovy Script Execution: Run custom Groovy scripts for advanced operations

  • Parallel Execution: Perform operations across multiple instances concurrently (up to 20)

Related MCP server: Mistral Agent Manager

Installation

Prerequisites

  • Node.js >= 18.0.0

  • npm

  • Access to AEM instance(s)

Setup

  1. Install the package globally:

npm install -g aem-dev-mcp-server
  1. During installation, an example configuration file will be automatically created at ~/aem-instances.yaml if it doesn't already exist

  2. Configure your AEM instances in ~/aem-instances.yaml with your actual server details (see configuration example below, or check examples/aem-instances.example.yaml in the installed package)

From sources

  1. Clone the repository:

git clone https://github.com/arkadiusz-rosiak/aem-dev-mcp.git
cd aem-dev-mcp
  1. Install dependencies:

npm install
  1. During installation, an example configuration file will be automatically created at ~/aem-instances.yaml if it doesn't already exist

  2. Build the project:

npm run build
  1. Configure your AEM instances in ~/aem-instances.yaml with your actual server details (you can also check examples/aem-instances.example.yaml for reference):


# Instance groups for different environments
local:
  - url: "http://localhost:4502"
    username: "admin"
    password: "admin"
  - url: "http://localhost:4503"
    username: "admin"
    password: "admin"

dev:
  - url: https://dev-author.example.com
    username: admin
    password: secretpass
  - url: https://dev-publish.example.com
    username: admin
    password: secretpass

prod:
  - url: https://prod-author.example.com
    username: admin
    password: prodpass
  - url: https://prod-publish.example.com
    username: admin
    password: prodpass

First-Run Setup

When you install the AEM MCP Server (either via npm or from sources), a postinstall script automatically runs to improve your setup experience:

  • Automatic Configuration: If ~/aem-instances.yaml doesn't exist, the script automatically copies the example configuration from examples/aem-instances.example.yaml

  • Safe Setup: Existing configurations are never overwritten - your settings are always preserved

  • Clear Feedback: The script provides clear console output about what actions were taken

  • Ready to Use: After installation, you can immediately start using the server by updating the configuration with your AEM credentials

Example output during fresh installation:

šŸ”§ AEM MCP Server - First-run setup...
āœ“ Created default configuration at ~/aem-instances.yaml
  Please update it with your AEM instance credentials.

šŸ“– Next steps:
  1. Edit ~/aem-instances.yaml with your AEM server details
  2. Replace "changeme" passwords with actual credentials
  3. Remove or comment out environments you don't need

Usage

Configuring AI Agents

Claude Code Configuration

For Claude Code users, you can configure this MCP server using these commands:

Using npm installation (Recommended):

# Add the AEM MCP server to Claude Code
claude mcp add aem-dev-mcp npx aem-dev-mcp-server

# Set environment variable for configuration file location
claude mcp env aem-dev-mcp AEM_INSTANCES_CONFIG_PATH=/path/to/aem-instances.yaml

Using local build:

# Add the AEM MCP server to Claude Code
claude mcp add aem-dev-mcp node /path/to/aem-dev-mcp/dist/server.js

# Set environment variable for configuration file location
claude mcp env aem-dev-mcp AEM_INSTANCES_CONFIG_PATH=/path/to/aem-instances.yaml

Common commands:

# List configured MCP servers
claude mcp list

# Remove the server if needed
claude mcp remove aem-dev-mcp

Claude Desktop Configuration

To use with Claude Desktop or other MCP-compatible AI assistants, add the server to your MCP configuration:

Using npm installation (Recommended):

{
  "mcpServers": {
    "aem-dev-mcp": {
      "command": "npx",
      "args": ["aem-dev-mcp-server"],
      "env": {
        "AEM_INSTANCES_CONFIG_PATH": "/path/to/aem-instances.yaml"
      }
    }
  }
}

Using local build:

{
  "mcpServers": {
    "aem-dev-mcp": {
      "command": "node",
      "args": ["/path/to/aem-dev-mcp/dist/server.js"],
      "env": {
        "AEM_INSTANCES_CONFIG_PATH": "/path/to/aem-instances.yaml"
      }
    }
  }
}

Warp Terminal Configuration

For Warp terminal users, you can configure the MCP server through the Warp settings:

  1. Open Warp terminal

  2. Press Cmd/Ctrl + , to open settings

  3. Navigate to "Features" → "AI Assistant"

  4. Add MCP server configuration:

Using npm installation (Recommended):

{
  "mcpServers": {
    "aem-dev-mcp": {
      "command": "npx",
      "args": ["aem-dev-mcp-server"],
      "env": {
        "AEM_INSTANCES_CONFIG_PATH": "/absolute/path/to/aem-instances.yaml"
      }
    }
  }
}

Using local build:

{
  "mcpServers": {
    "aem-dev-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/aem-dev-mcp/dist/server.js"],
      "env": {
        "AEM_INSTANCES_CONFIG_PATH": "/absolute/path/to/aem-instances.yaml"
      }
    }
  }
}

Note: Make sure to use absolute paths in Warp configuration.

Security & Privacy

Credential Handling

Important for developers: Understanding credential visibility in this MCP server:

  • Direct Instances: When you provide instance configuration directly in tool calls (with URL, username, password), the LLM CAN SEE these credentials as they are part of the tool call parameters

  • Aliases (Recommended): When using aliases from your configuration file, the LLM only sees alias names (e.g., "local", "dev") - actual credentials are read directly by the MCP server from your local configuration file, keeping them invisible to the LLM

  • Local Storage: All credentials are stored locally in your ~/aem-instances.yaml file and never transmitted to external services

  • Secure Communication: The MCP server runs locally and communicates directly with your AEM instances using HTTPS

Security Recommendations:

  • Always use aliases instead of direct instance configuration to keep credentials invisible to the LLM

  • Store configuration file outside of version control

  • Use service accounts with minimal required permissions

  • Regularly rotate passwords for AEM service accounts

Configuration

Automatic Setup

The AEM MCP Server includes automatic first-run setup:

  • Example configuration is automatically copied to ~/aem-instances.yaml during installation

  • No manual file creation needed - just install and configure your credentials

  • Example configuration template available at examples/aem-instances.example.yaml

Environment Variables

  • AEM_INSTANCES_CONFIG_PATH - Path to AEM instances configuration file (default: ~/aem-instances.yaml)

Instance Configuration

The configuration file supports:

  • Direct instance definitions with URL, username, and password

  • Instance groups (aliases) for managing multiple instances

  • Environment-based grouping (dev, staging, prod)

Available MCP Tools

System & Monitoring

  • aem_health_check - Comprehensive system health monitoring

  • aem_logs_search - Search and analyze AEM logs with regex patterns

  • aem_groovy_execute - Execute Groovy scripts for advanced operations

OSGi Bundle Management

  • aem_bundle_list - List all OSGi bundles with filtering

  • aem_bundle_start - Start stopped bundles

  • aem_bundle_stop - Stop running bundles

  • aem_bundle_refresh - Refresh bundle packages

  • aem_bundle_restart - Restart bundles

  • aem_bundle_uninstall - Uninstall bundles

  • aem_bundle_details - Get detailed bundle information

OSGi Component Management

  • aem_component_list - List all OSGi components

  • aem_component_enable - Enable disabled components

  • aem_component_disable - Disable active components

  • aem_component_details - Get detailed component information

OSGi Configuration Management

  • aem_configuration_list - List all OSGi configurations

  • aem_configuration_get - Retrieve specific configuration

  • aem_configuration_create - Create new configurations

  • aem_configuration_update - Update existing configurations

  • aem_configuration_delete - Delete configurations

  • aem_configuration_unbind - Unbind factory configurations

Development

Commands

  • npm run dev - Start development server with hot reload

  • npm run build - Build TypeScript with path aliases

  • npm run typecheck - Type check without building

  • npm run lint - Run ESLint

  • npm run test - Run Jest tests

  • npm run test:coverage - Run tests with coverage report

Architecture

The project follows a layered architecture:

  • Handlers: MCP tool entry points (src/handlers/)

  • Services: Business logic and AEM API communication (src/services/)

  • Types: TypeScript definitions with factory functions (src/types/)

  • Schemas: Zod validation schemas (src/schemas/)

  • Utils: Shared utilities (src/utils/)

Real-World Examples

Example 1: Troubleshooting Inactive OSGi Bundles

Problem: After deployment, several OSGi bundles remain in "Installed" or "Resolved" state instead of "Active", causing features to be unavailable.

AI Agent Interaction:

User: "Several bundles are not active on my AEM author instance. Can you investigate?"

AI: "I'll check the bundle status and identify any issues. Let me start by listing all non-active bundles."
[Uses aem_bundle_list with status filter]

AI: "Found 5 bundles in 'Installed' state. Let me check their details for missing dependencies."
[Uses aem_bundle_details for each problematic bundle]

AI: "The com.company.core bundle has unsatisfied dependencies on com.adobe.cq.social.commons. Let me try to start the dependency first."
[Uses aem_bundle_start on dependency bundle]

AI: "Dependency started successfully. Now attempting to start your core bundle."
[Uses aem_bundle_start on the main bundle]

AI: "All bundles are now active. The issue was a missing dependency that needed to be started first."

Example 2: Memory Issues and Code Fix for Unclosed JCR Sessions

Problem: AEM instance is experiencing memory issues and slowdowns, logs show "CacheManager: resizeAll" warnings.

AI Agent Interaction:

User: "My AEM instance is running slowly and I'm seeing memory warnings in the logs."

AI: "Let me analyze your logs for memory-related issues and check system health."
[Uses aem_logs_search with pattern "CacheManager|OutOfMemory|heap"]

AI: "I see multiple 'CacheManager: resizeAll' entries indicating unclosed JCR sessions. Let me check the system health."
[Uses aem_health_check]

AI: "Memory usage is at 89%. Let me search for the components that might be leaking sessions."
[Uses aem_groovy_execute with a script to find unclosed sessions]

AI: "Found that the custom SearchService component has 1,247 unclosed sessions. Let me examine the code to identify the root cause."
[Reads the SearchService.java file]

AI: "I found the problem in your SearchService code. Here are the issues:

**Issues Found:**
1. Line 34: JCR Session opened but never closed in finally block
2. Line 52: ResourceResolver not properly closed
3. Line 78: Exception handling doesn't close sessions on error

Let me fix these issues:

// BEFORE (problematic code):
public void searchContent(String query) {
    Session session = repository.loginService("searchservice", null);
    ResourceResolver resolver = resolverFactory.getResourceResolver(authInfo);
    
    // Search logic here...
    QueryManager qm = session.getWorkspace().getQueryManager();
    Query q = qm.createQuery(query, Query.XPATH);
    // Sessions never closed - MEMORY LEAK!
}

// AFTER (fixed code):
public void searchContent(String query) {
    Session session = null;
    ResourceResolver resolver = null;
    
    try {
        session = repository.loginService("searchservice", null);
        resolver = resolverFactory.getResourceResolver(authInfo);
        
        // Search logic here...
        QueryManager qm = session.getWorkspace().getQueryManager();
        Query q = qm.createQuery(query, Query.JCR_SQL2); // Also improved query type
        
    } catch (Exception e) {
        log.error("Search failed", e);
    } finally {
        if (resolver != null && resolver.isLive()) {
            resolver.close();
        }
        if (session != null && session.isLive()) {
            session.logout();
        }
    }
}


Now let me restart the component to apply these changes and clear existing leaked sessions."
[Uses aem_component_disable then aem_component_enable]

AI: "Component restarted successfully. Let me monitor the system to confirm the fix worked."
[Uses aem_health_check and aem_logs_search to verify improvements]

AI: "Excellent! Memory usage dropped from 89% to 42%. No more 'CacheManager: resizeAll' warnings appearing. Your SearchService now properly manages JCR resources and won't leak memory."

Example 3: Bulk Operations Across Multiple Instances

Problem: Need to disable a problematic component across all environments quickly to prevent service disruption.

AI Agent Interaction:

User: "The NewsletterService component is causing issues. Can you disable it on all our instances immediately?"

AI: "I'll disable the NewsletterService component across all configured instances in parallel."
[Uses aem_component_disable with alias "all" for parallel execution]

AI: "Component disabled on all 6 instances:
- dev-author: Success
- dev-publish: Success  
- staging-author: Success
- staging-publish: Success
- prod-author: Success
- prod-publish: Success

All instances processed in 2.3 seconds. The problematic component is now safely disabled across your entire infrastructure."

License

MIT

Author

Arkadiusz Rosiak

Available Tools

20 tools
aem_bundle_detailsB

Get detailed information about OSGi bundles from AEM instances

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases
bundleIdNoBundle ID to get details for
instancesNoArray of AEM instances
symbolicNameNoBundle symbolic name to get details for

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. The verb 'Get' conveys a read-only intent, and 'from AEM instances' indicates the data source. However, it does not describe response behavior, how failures surface, or whether both bundleId and symbolicName are supported per call.

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

Conciseness4/5

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

The description is one sentence and the key action is front-loaded. There is no filler or repeated schema information. It could include a bit more operational context, but as a concise summary it is effective.

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

Completeness2/5

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

The tool has four optional parameters, two ways to identify a bundle, and two ways to target AEM instances, yet the description only says 'Get detailed information about OSGi bundles from AEM instances'. It does not state that a bundle identifier is expected, how instances vs aliases are resolved, or what the returned details include. With no output schema and no annotations, this is insufficiently complete for reliable invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds no additional meaning about how parameters relate, such as whether bundleId and symbolicName are alternatives or whether aliases and instances target the same concept. This is adequate but not value-adding beyond the schema.

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

Purpose4/5

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

The description states a clear verb and resource: obtaining detailed information about OSGi bundles from AEM instances. It is distinguishable from sibling actions like aem_bundle_start or aem_bundle_stop, and the word 'details' separates it from aem_bundle_list. It could be more specific about identifying a single bundle, but the core purpose is clear.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. There is no mention of prerequisites, such as needing a bundleId or symbolicName, nor any statement that this tool is for inspecting a single bundle rather than listing all bundles. Usage must be inferred entirely from the tool name and generic wording.

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

aem_bundle_listB

List OSGi bundles from AEM instances

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of bundles to return per instance
offsetNoNumber of bundles to skip for pagination
aliasesNoArray of instance aliases to check
instancesNoArray of AEM instances
nameFilterNoFilter bundles by name or symbolic name
stateFilterNoFilter bundles by state

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'List OSGi bundles' and does not mention that the tool can query multiple instances, supports pagination via limit/offset, is read-only, or what the response format looks like. The agent has no information about side effects, prerequisites, or output behavior.

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

Conciseness4/5

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

The description is a single, tight sentence with no redundancy: 'List OSGi bundles from AEM instances'. It is front-loaded with the action and resource. It earns its place but could have added a bit more useful context (e.g., multi-instance or filtering) without becoming verbose, so it is not a perfect 5.

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

Completeness2/5

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

This tool has six parameters, no annotations, and no output schema. The description is too minimal to tell the agent what the response will look like or how aliases/instances are used, while the complex parameter set suggests a richer explanation is needed. The description leaves important context about multiple instances, filtering, and pagination entirely unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 even though the tool description adds no parameter-specific meaning. Each parameter like aliases, instances, nameFilter, and stateFilter already has a reasonable schema description. The description itself does not enrich the parameters, but the schema adequately covers them.

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

Purpose5/5

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

The description states a specific verb ('List'), resource ('OSGi bundles'), and scope ('from AEM instances'). This clearly distinguishes it from sibling mutation tools like aem_bundle_start/stop and from other resource lists like aem_component_list and aem_configuration_list. The word 'list' also separates it from aem_bundle_details, which implies a single-bundle focus.

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

Usage Guidelines3/5

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

The description implies usage: when you want to enumerate OSGi bundles, use this tool. However, it provides no explicit guidance about when to prefer it over alternatives, such as aem_bundle_details for a specific bundle or aem_logs_search for diagnostics. There are no stated exclusions or alternative routing, so usage context is only inferable.

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

aem_bundle_refreshC

Refresh OSGi bundles on AEM instances

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases
bundleIdNoBundle ID to operate on
instancesNoArray of AEM instances
symbolicNameNoBundle symbolic name to operate on

TDQS

C2.9/5.0
Behavior2/5

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

Annotations are absent, so the description must disclose behavior on its own. It does not explain whether refresh mutates bundle state, whether it is safe, whether credentials are required, or what the operational effect is compared to restart. The term 'Refresh' remains ambiguous in lifecycle terms.

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

Conciseness4/5

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

The description is one short, front-loaded sentence with no filler. It is efficient, though extremely terse and lacking any supporting detail.

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

Completeness2/5

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

With no annotations and no output schema, the description leaves critical details unresolved: which parameters are needed, what happens after refresh, what the return value is, and how this differs from restart. An agent would struggle to invoke it correctly with confidence.

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

Parameters3/5

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

The input schema already documents all four parameters with descriptions, giving 100% coverage. The description adds no extra meaning about how to choose between bundleId and symbolicName, or between aliases and instances, but high schema coverage keeps this at baseline.

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

Purpose4/5

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

Description states a specific action ('Refresh') and resource ('OSGi bundles on AEM instances'), making the broad purpose clear. However, it does not distinguish this from the sibling aem_bundle_restart, and 'refresh' vs 'restart' could overlap semantically.

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

Usage Guidelines2/5

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

No guidance is given for when to use this tool versus any of the bundle sibling tools such as restart, stop, start, or uninstall. There are no usage conditions, exclusions, or alternative recommendations despite many closely related tools.

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

aem_bundle_restartC

Restart OSGi bundles on AEM instances

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases
bundleIdNoBundle ID to operate on
instancesNoArray of AEM instances
symbolicNameNoBundle symbolic name to operate on

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of disclosing behavior. It says only that bundles are restarted and does not mention side effects such as service disruption, authentication/credential requirements, whether the operation waits for completion, or what response to expect. The verb 'restart' implies a mutating lifecycle operation but provides little beyond that.

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

Conciseness4/5

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

The description is one concise sentence with the action front-loaded and no filler. It is slightly too sparse to earn a 5 because it omits contextual guidance that would make the entry more helpful, but as a concise statement it is efficient.

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

Completeness2/5

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

For a mutating 4-parameter tool with no annotations and no output schema, the description is not complete. An agent cannot tell whether aliases and instances are alternatives, how bundleId relates to symbolicName, what happens on multiple instances, or what the return behavior is. The schema covers parameter names but not the operational context.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters (aliases, bundleId, instances, symbolicName) are documented at the schema level. The description itself adds no parameter meaning, and per baseline a high-coverage schema earns a 3 even without description-level parameter details.

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

Purpose4/5

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

The description uses a specific verb ('Restart') and resource ('OSGi bundles on AEM instances'), clearly identifying the core operation. It is distinguishable from sibling bundle operations because 'restart' is a distinct lifecycle action vs start/stop/refresh, though it does not explicitly differentiate itself or clarify whether it applies to selected bundles or all bundles.

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

Usage Guidelines2/5

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

No guidance is provided for when to use this tool over aem_bundle_start, aem_bundle_stop, or aem_bundle_refresh, and there are no prerequisites or exclusions. Usage is only weakly implied by the verb 'restart'.

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

aem_bundle_startC

Start OSGi bundles on AEM instances

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases
bundleIdNoBundle ID to operate on
instancesNoArray of AEM instances
symbolicNameNoBundle symbolic name to operate on

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations available, the description is the only source of behavioral information, but it only states the action 'Start' without disclosing side effects, idempotency, failure behavior, permission requirements, or what happens if the bundle is already running. It is not misleading, but it is very minimal.

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

Conciseness4/5

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

The description is a single concise sentence with no filler or redundant wording. It is front-loaded and easy to scan, though it could benefit from one more sentence giving usage or behavioral context without becoming bloated.

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

Completeness2/5

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

For a mutation tool with four parameters and no annotations or output schema, the description is too thin. It fails to explain how instances are specified (aliases vs full instance objects), how the bundle is identified, what state the operation expects, or what the result or return value will be. This is insufficient for an agent to confidently invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameter meanings are fully documented in the input schema. The description adds no additional insight into how the parameters relate to the operation, such as the distinction between aliases and instances or between bundleId and symbolicName, so it stays at the baseline.

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

Purpose4/5

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

The description states a specific action ('Start') on a clear resource ('OSGi bundles') and the target environment ('AEM instances'). It is unambiguous about the primary operation, though it does not explicitly distinguish itself from sibling tools like aem_bundle_stop or aem_bundle_restart.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives such as stop, restart, refresh, or uninstall. There is also no mention of prerequisites, such as whether the bundle must already be installed or stopped, or how to choose between bundleId and symbolicName.

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

aem_bundle_stopB

Stop OSGi bundles on AEM instances

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases
bundleIdNoBundle ID to operate on
instancesNoArray of AEM instances
symbolicNameNoBundle symbolic name to operate on

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, but it only restates the action. It does not disclose the operational impact of stopping a bundle, whether the action is reversible, what happens to dependent services, authentication requirements, or any side effects. Like the 'update_drive' calibration case, this mutation-style tool needs more behavioral context.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler or repetition of the tool name beyond what is necessary. It is concise and readable, though it sacrifices operational detail that other dimensions penalize.

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

Completeness2/5

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

The tool has four parameters, zero required fields, no output schema, and no annotations, yet the description provides no guidance on parameter combinations or invocation conditions. An agent cannot confidently determine whether bundleId, symbolicName, aliases, or instances need to be supplied together. This is insufficient for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents all four parameters. The description adds no additional parameter-level meaning, such as how bundleId relates to symbolicName or how aliases relate to instances, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('Stop') and resource ('OSGi bundles on AEM instances'), making the tool's core action unmistakable. The action also differentiates it clearly from its lifecycle siblings such as start, restart, refresh, uninstall, list, and details.

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

Usage Guidelines2/5

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

There is no guidance about when to use stop versus the closely related bundle lifecycle tools (restart, start, uninstall, refresh). No contextual triggers, exclusions, or alternatives are mentioned, so an agent must infer the right choice from the tool name alone.

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

aem_bundle_uninstallB

Uninstall OSGi bundles on AEM instances

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases
bundleIdNoBundle ID to operate on
instancesNoArray of AEM instances
symbolicNameNoBundle symbolic name to operate on

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. It identifies the action as 'Uninstall,' implying a destructive operation, but does not disclose side effects, reversibility, required permissions, or the effect on other bundles.

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

Conciseness4/5

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

The description is a single short sentence with no fluff and puts the action and resource up front. It is concise, though slightly under-specified; the brevity is a positive structural trait even if behavioral details are missing.

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

Completeness2/5

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

For a destructive tool with no annotations and no output schema, the description lacks important context: it does not clarify how an agent should identify the target (bundleId vs symbolicName), how instances are selected (aliases vs instances), or what a successful uninstall returns.

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

Parameters3/5

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

The schema already provides descriptions for all four parameters (100% coverage), so the baseline is 3. The description adds no extra meaning about the parameters, such as how aliases and instances relate or whether bundleId and symbolicName are alternatives.

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

Purpose5/5

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

The description uses a specific verb ('Uninstall') and a specific resource ('OSGi bundles on AEM instances'), making the tool's action unmistakable. It also stands apart from sibling tools such as aem_bundle_start, aem_bundle_stop, and aem_bundle_refresh because the operation is clearly uninstallation, not lifecycle state change.

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

Usage Guidelines2/5

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

The description states what the tool does but not when it should be chosen over alternatives. It never mentions, for example, that aem_bundle_stop or aem_bundle_restart should be preferred for temporary changes, so an agent receives no decision guidance.

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

aem_component_detailsB

Get detailed information about a specific OSGi component by name

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases
instancesNoArray of AEM instances
componentNameYesComponent name to get details for

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden, but it only says 'Get detailed information'. It does not disclose authentication requirements, failure behavior, or return contents, and the read-only nature is only implicit.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. Every word contributes to the core purpose.

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

Completeness3/5

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

For a tool with one required parameter and full schema coverage, the description is minimally viable. However, with no output schema and no annotations, it omits what 'detailed information' includes and how instances/aliases affect the call.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds emphasis on componentName by saying 'by name', but it does not clarify the role of aliases or instances beyond their schema descriptions.

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

Purpose4/5

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

The description clearly identifies the action ('Get') and the resource ('detailed information about a specific OSGi component'), and the phrase 'by name' distinguishes this from listing operations. It does not explicitly differentiate from sibling tools, but the specificity is evident.

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

Usage Guidelines3/5

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

The description implies this tool is for retrieving details about one known component, but it does not state when to prefer it over aem_component_list or other component tools. No exclusions or alternative routing are provided.

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

aem_component_disableB

Disable OSGi components on AEM instances by component name

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases
instancesNoArray of AEM instances
componentNameYesComponent name to disable

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the operation is a disable action but does not disclose side effects, persistence, reversibility, permissions needed, or what happens if the component is already disabled or not found.

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

Conciseness5/5

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

The description is a single concise sentence with no filler or repetition. The core action, target, and selection method are front-loaded.

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

Completeness2/5

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

With no annotations and no output schema, the description leaves important context unstated, such as how to choose between aliases and instances, whether either must be provided, and what the expected result looks like. The minimal description is insufficient for fully safe invocation despite the simple surface.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter. The description adds no additional meaning beyond the parameter names, but this is acceptable because the schema handles the baseline semantic load.

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

Purpose5/5

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

The description uses a specific verb ('Disable') and resource ('OSGi components on AEM instances') and specifies the key selection criterion ('by component name'). This clearly differentiates it from siblings like aem_component_enable and aem_component_list.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of whether instances/aliases are required or how targeting works. The only implied usage is from the tool name and the verb 'Disable'.

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

aem_component_enableB

Enable OSGi components on AEM instances by component name

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases
instancesNoArray of AEM instances
componentNameYesComponent name to enable

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals that the tool mutates component state by enabling it, but it does not mention side effects, reversibility, permissions, idempotency, or what happens if the component is already enabled.

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

Conciseness5/5

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

The description is a single, focused sentence with no filler. It front-loads the primary verb and resource, making the tool's core purpose immediately clear.

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

Completeness2/5

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

The description is too spare for a state-changing tool with no annotations and no output schema. It omits how to choose between aliases and instances, what a successful enable looks like, and any operational caveats, leaving an agent to infer critical invocation details.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each parameter at a basic level. The description adds minimal semantic value beyond indicating that componentName is the lookup key, but it does not clarify the relationship or selection logic between aliases and instances.

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

Purpose5/5

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

The description states a specific action ('Enable') on a specific resource ('OSGi components') and the key input ('by component name'). It clearly differentiates this from sibling tools like aem_component_disable and aem_component_list.

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

Usage Guidelines2/5

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

There is no guidance about when to use this tool versus alternatives, such as aem_component_disable or aem_component_details. The description implies the use case through the verb 'Enable,' but it does not state exclusions, prerequisites, or conditions for choosing between target options.

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

aem_component_listB

List OSGi components from AEM instances with optional state and name filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of components to return per instance
offsetNoNumber of components to skip for pagination
aliasesNoArray of instance aliases to check
instancesNoArray of AEM instances
nameFilterNoFilter components by name or PID
stateFilterNoFilter components by state

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description carries the burden of behavioral disclosure. 'List' implies a read-only operation, but the description does not explain whether credentials are required, what happens when no aliases or instances are provided, or any output characteristics. It is minimally transparent but lacks meaningful behavioral depth.

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

Conciseness5/5

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

A single sentence that is front-loaded with the core action and resource, followed by a brief mention of the filters. Every word earns its place; no filler or redundancy.

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

Completeness2/5

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

For a tool with six parameters and no output schema, the description is too thin. It does not explain the relationship between aliases and instances, pagination behavior beyond the schema defaults, or what constitutes a valid invocation. An agent could select the tool but would lack important operational context.

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

Parameters3/5

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

The input schema already provides descriptions for all parameters (100% coverage). The description only restates the existence of state and name filtering without adding new meaning, so it meets the baseline but does not enrich parameter understanding.

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

Purpose5/5

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

States a specific verb ('List'), a clear resource ('OSGi components'), the target ('AEM instances'), and optional filters ('state and name filtering'). This clearly distinguishes it from siblings like aem_component_details or aem_component_enable.

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

Usage Guidelines3/5

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

The description implies this is the list/read operation for OSGi components, but it gives no explicit guidance on when to prefer this over aem_component_details, nor does it mention exclusions or prerequisites such as needing aliases or instances. Usage context is reasonably clear but leaves judgment to the agent.

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

aem_configuration_createB

Create a new OSGi configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
pidYesConfiguration PID
aliasesNoArray of instance aliases
instancesNoArray of AEM instances
factoryPidNoFactory PID for factory configurations
propertiesYesConfiguration properties
bundleLocationNoBundle location

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only restates the mutation implied by the tool name and does not reveal what happens if the PID already exists, whether the operation is destructive, or how authentication is handled through the instances array.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no wasted words. It is concise and easy to parse, though it does not provide enough depth for a tool with six parameters and nested objects.

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

Completeness2/5

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

With no annotations, no output schema, and a complex input schema containing nested objects, the description is too sparse. It does not explain what properties should look like, the role of aliases and instances, or what a successful creation returns, leaving significant gaps for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters already have minimal descriptions such as 'Configuration PID' and 'Factory PID for factory configurations'. The description adds no additional meaning beyond what is present in the schema, warranting the baseline score of 3.

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

Purpose5/5

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

The description states a specific verb and resource: 'Create a new OSGi configuration'. This clearly differentiates it from sibling tools such as aem_configuration_list, get, update, delete, and unbind.

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

Usage Guidelines2/5

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

There is no guidance on when to use create versus update, or when factoryPid should be supplied. The description does not mention any prerequisites or alternative tools, leaving the agent to infer the appropriate context.

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

aem_configuration_deleteC

Delete an OSGi configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
pidYesConfiguration PID to delete
aliasesNoArray of instance aliases
instancesNoArray of AEM instances

TDQS

C2.9/5.0
Behavior2/5

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

There are no annotations, so the description must carry the full burden of behavioral disclosure. 'Delete' does signal mutation/destructiveness, but the description does not mention permanence, required permissions, effects on runtimes or instances, or whether the deletion targets all specified instances/aliases.

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

Conciseness5/5

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

The description is one short declarative sentence with no filler or redundancy. It is front-loaded with the essential action and resource, which is ideal for conciseness even if other dimensions lack depth.

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

Completeness2/5

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

With no annotations, no output schema, and a one-sentence description, the tool is under-specified for an agent deciding whether deletion is appropriate or what it will affect. The presence of optional aliases and instances fields raises questions about targeting that the description does not address.

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

Parameters3/5

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

Schema description coverage is 100%, with each parameter having some description in the schema. The tool description itself adds no parameter-level meaning, so the baseline of 3 applies: the schema does the heavy lifting and the description does not need to compensate.

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

Purpose4/5

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

The description uses a specific verb ('Delete') and a clear resource ('an OSGi configuration'), so an agent can tell this is a destructive configuration operation. It differentiates from list/get/create/update, though it doesn't explicitly contrast with aem_configuration_unbind, making 5 slightly too strong.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool instead of related ones such as aem_configuration_unbind, aem_configuration_update, or aem_configuration_create. The description only states what it does, not the conditions or prerequisites for invoking it.

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

aem_configuration_getC

Get a specific OSGi configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
pidYesConfiguration PID to retrieve
aliasesNoArray of instance aliases
instancesNoArray of AEM instances

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get' suggests read-only behavior, but the description does not state whether it modifies anything, what permissions are required, what happens if the PID is not found, or what the response contains.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler. Every word contributes to identifying the operation, and the structure is appropriately minimal for such a simple tool.

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

Completeness2/5

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

There is no output schema and no annotations, but the description does not explain return values, failure modes, or behavior when instances/aliases are supplied. For an agent to use this tool confidently, more context is needed beyond the one-line summary.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents pid, aliases, and instances adequately. The description adds no parameter-level meaning beyond what the schema provides, so the baseline score of 3 applies.

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

Purpose4/5

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

The description clearly states a get operation targeting a specific OSGi configuration, which is unambiguous and distinct from list/create/update operations by virtue of the word 'specific'. However, it does not explicitly name or contrast a sibling tool, so it stops short of the strongest sibling differentiation.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus aem_configuration_list or when to prefer another tool. The description implies a single-config lookup but provides no conditions, exclusions, or alternatives.

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

aem_configuration_listB

List OSGi configurations from AEM instances

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of configurations to return per instance
offsetNoNumber of configurations to skip for pagination
aliasesNoArray of instance aliases to check
instancesNoArray of AEM instances
pidFilterNoFilter configurations by PID

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full responsibility for behavioral disclosure. It only states the operation and resource, without saying whether output is a summary or detailed configs, whether pagination via offset/limit is applied, whether authentication is required, or any side effects. 'List' implies read-only, but that is not explicitly guaranteed.

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

Conciseness4/5

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

The description is a single, focused sentence that starts with the action verb and names the target resource. There is no redundant wording. It could have included more context, but it is structurally clean and front-loaded.

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

Completeness3/5

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

The schema fully documents the five parameters, so an agent can construct a syntactically valid call. However, with no output schema and no annotations, the description does not explain what the returned list contains, how pagination behaves, or how multiple instances are handled. These are clear gaps for running the tool correctly and understanding the result.

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

Parameters3/5

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

Schema coverage is 100%, meaning every parameter already has a description such as limit, offset, aliases, instances, and pidFilter. The description itself adds no new parameter-level meaning, but since the schema fully documents all parameters, the baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific action verb ('List') and a clear resource ('OSGi configurations') with a source ('AEM instances'). It is immediately distinguishable from sibling configuration tools like get, create, update, delete, and unbind, as well as from bundle/component list tools.

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

Usage Guidelines2/5

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

There is no guidance about when to choose this list tool over `aem_configuration_get` for a single configuration, nor about relationships to configuration create/update/delete tools. The intended use is implied by the tool name, but the description does not actively route the agent to the correct alternative.

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

aem_configuration_unbindC

Unbind an OSGi configuration from a bundle

ParametersJSON Schema
NameRequiredDescriptionDefault
pidYesConfiguration PID to unbind
aliasesNoArray of instance aliases
instancesNoArray of AEM instances
bundleLocationNoBundle location to unbind from

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but not the consequences, such as whether the unbind is reversible, whether it triggers a bundle restart, whether it affects existing configuration data, or what permissions are needed. This is a meaningful gap for a mutating operation.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler or repetition. It is appropriately concise, though slightly terse given the complexity of the operation and the number of parameters.

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

Completeness2/5

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

Despite full schema coverage, the description lacks important context about the unbinding behavior, its effect on the bundle or configuration, and the role of optional parameters like bundleLocation, aliases, and instances. Without annotations or an output schema, the description alone is insufficient for an agent to confidently invoke the tool in complex scenarios.

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

Parameters3/5

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

Schema description coverage is 100%, and the description adds no additional meaning beyond what the schema already provides. The baseline of 3 applies because the parameter documentation is complete in the schema, but the description doesn't enrich parameter understanding.

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

Purpose4/5

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

The description uses a specific verb ('Unbind') and resource ('OSGi configuration from a bundle'), clearly identifying the operation. It distinguishes itself from sibling configuration operations like delete or update, though it does not explicitly name them or highlight the distinction.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives such as aem_configuration_delete or aem_configuration_update. The description only states the operation itself, leaving the agent to infer the appropriate context from the tool name and sibling list.

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

aem_configuration_updateC

Update an existing OSGi configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
pidYesConfiguration PID
aliasesNoArray of instance aliases
instancesNoArray of AEM instances
factoryPidNoFactory PID for factory configurations
propertiesYesConfiguration properties
bundleLocationNoBundle location

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, but it only conveys the mutation itself. It fails to state whether the provided 'properties' replace or merge with existing values, whether credentials on target instances are required, how factory configurations behave, or what side effects the update triggers.

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

Conciseness4/5

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

A single front-loaded sentence with the verb first and zero filler words. It is appropriately compact for the message it carries, though it could earn a 5 by folding in the missing behavioral context.

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

Completeness2/5

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

The tool has 6 parameters, nested credential objects, two targeting mechanisms, and no annotations or output schema, yet the description conveys only the bare operation. Critical details — merge vs replace behavior, factory configuration handling, targeting mechanics, and authentication expectations — are absent.

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

Parameters3/5

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

Schema description coverage is 100%, so each of the 6 parameters has at least a minimal schema description, meeting the baseline of 3. However, the tool description itself adds no parameter-level meaning, and the schema's terse labels leave key semantics unexplained, such as what the 'properties' object should contain or how 'aliases' vs 'instances' targeting works.

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

Purpose4/5

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

The description names a specific verb ('Update') and a specific resource ('existing OSGi configuration'), which is clearly scoped to AEM's OSGi config system. The qualifier 'existing' distinguishes it from sibling aem_configuration_create and aem_configuration_delete, though it does not explicitly name them.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like create, delete, get, or unbind. The word 'existing' implies the configuration must already be present, but there is no explicit context, precondition, or exclusion information.

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

aem_groovy_executeB

Execute Groovy scripts on AEM instances via Groovy Console for maintenance and automation tasks

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptNoGroovy script content to execute directly (required if scriptPath not provided)
timeoutNoExecution timeout in milliseconds (optional, default 30000)
scriptPathNoPath to existing script on AEM instance (required if script not provided)
instanceAliasNoAEM instance alias or URL from configuration

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does not mention that executing Groovy scripts can have arbitrary side effects, destructive potential, or require elevated permissions. The description frames it as safe maintenance/automation without warning about the power and risk of arbitrary code execution.

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

Conciseness4/5

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

The description is a single, economical sentence with no fluff. It states the verb, target, mechanism, and general use case efficiently, though it does not use any structural aids like bullets or examples.

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

Completeness2/5

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

This is a powerful arbitrary-code-execution tool with no annotations, no output schema, and a mutually-exclusive parameter pair (script vs scriptPath). The description does not explain return values, behavior when both parameters are supplied, timeout semantics, or safety/authorization requirements. It is too sparse for correct and safe invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds no extra parameter-level meaning, such as what happens when both script and scriptPath are provided, which is a notable gap. Baseline 3 is appropriate because the schema handles the basics.

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

Purpose5/5

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

The description uses a specific verb ('Execute') with a clear resource ('Groovy scripts on AEM instances via Groovy Console') and a stated purpose ('maintenance and automation tasks'). It is clearly distinct from sibling tools, which target bundles, components, configurations, logs, and health checks.

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

Usage Guidelines3/5

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

The description gives some context by mentioning 'maintenance and automation tasks,' which implies use when generic scripted operations are needed. However, it does not explicitly state when to prefer this tool over siblings, when not to use it, or any prerequisites such as Groovy Console availability.

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

aem_health_checkA

Performs comprehensive health checks on AEM instances including memory, threads, bundles, requests, and repository metrics. Either aliases or instances must be provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasesNoArray of instance aliases to check (from configuration file). Maximum 20 total instances allowed.
instancesNoDirect instance configuration (overrides aliases). Maximum 20 instances allowed.

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what metrics are checked but does not say whether the operation is read-only, whether it modifies AEM state, what authentication requirements exist beyond credentials in the instance object, or what failure modes look like. This is a significant gap for a tool that could have side effects or require elevated permissions.

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

Conciseness5/5

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

Two sentences with no redundancy. The main purpose is front-loaded, the metric scope is compactly listed, and the critical parameter constraint is placed in the second sentence. Every word earns its place.

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

Completeness3/5

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

The description covers what is checked and the input requirement, but lacks information about the output/return format, whether the operation is safe/read-only, and any prerequisites. With no output schema and no annotations, these details fall on the description. It is adequate for a health-check tool but leaves the agent guessing about the result shape and side effects.

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

Parameters4/5

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

Schema coverage is 100% for both parameters, so the baseline is 3. The description adds value by stating the relationship between the parameters ('Either aliases or instances must be provided'), which clarifies that at least one is required and they are not both mandatory. It does not repeat schema details, and the 'overrides aliases' semantics in the schema are preserved implicitly.

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

Purpose5/5

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

The description clearly states the action ('Performs comprehensive health checks') and the resource ('AEM instances'), and lists the specific metric categories (memory, threads, bundles, requests, repository). This makes it easy to distinguish from sibling tools like aem_bundle_list or aem_logs_search, which target individual subsystems.

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

Usage Guidelines2/5

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

The description gives no guidance about when to choose this tool over siblings or when it would be inappropriate. The only usage hint is 'Either aliases or instances must be provided,' which is a parameter requirement, not guidance for selecting between tools. The agent must infer that a health check is the broad diagnostic entry point, but this is not stated explicitly.

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

Tool Schema Changelog

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

  1. 20 tool updatesv1.0.3
    • First observedaem_bundle_details
    • First observedaem_bundle_list
    • First observedaem_bundle_refresh
    • First observedaem_bundle_restart
    • First observedaem_bundle_start
    • First observedaem_bundle_stop
    • First observedaem_bundle_uninstall
    • First observedaem_component_details
    • First observedaem_component_disable
    • First observedaem_component_enable
    • First observedaem_component_list
    • First observedaem_configuration_create
    • First observedaem_configuration_delete
    • First observedaem_configuration_get
    • First observedaem_configuration_list
    • First observedaem_configuration_unbind
    • First observedaem_configuration_update
    • First observedaem_groovy_execute
    • First observedaem_health_check
    • First observedaem_logs_search

TDQS

B3.2/5.0

Scored across 20 tools

Disambiguation4/5

Tools are clearly grouped by resource (bundles, components, configurations) with action-specific verbs, making most selections straightforward. The only mild ambiguities are bundle_refresh vs bundle_restart and the similar lifecycle actions across different resource types.

Naming Consistency4/5

The server follows a consistent aem_<resource>_<action> pattern with snake_case throughout. Minor inconsistencies like aem_bundle_details vs aem_configuration_get and aem_logs_search vs singular resource prefixes slightly break the uniformity.

Tool Count3/5

At 20 tools, the set is on the heavier side, especially when compared to typical MCP servers. However, the count is justified by the broad AEM OSGi administration scope covering bundles, components, configurations, logs, health, and Groovy scripting.

Completeness4/5

The tool surface covers most lifecycle operations for OSGi bundles, components, and configurations, along with logs, health checks, and Groovy execution. Notable gaps include bundle install/upload and package management, but existing tools cover the core development workflows well.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive Model Context Protocol server for Adobe Experience Manager that provides 35+ REST/JSON-RPC API methods for complete content, component, asset, and template management. Enables AI-powered AEM automation through natural language interfaces with support for page operations, component CRUD, asset management, and publishing workflows.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables management of Mistral AI agents through MCP tools including creating, listing, searching, viewing details, and deleting agents. Integrates with Mistral API to provide agent management capabilities through natural language interactions.
    1
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables interaction with Adobe Experience Manager (AEM) Assets through the Author API. It allows users to browse folders, search for assets, retrieve detailed asset information, and perform bulk metadata updates using natural language.
    1
    -