Skip to main content
Glama
Blazemeter

BlazeMeter Service Virtualization MCP Server

Official
by Blazemeter

virtual_services_messaging_transaction

Create and manage JMS messaging transactions for BlazeMeter Service Virtualization, including template validation and certificate assignment.

Instructions

    Operations on JMS Messaging transactions. 
    Use this when a user needs to create or select a JMS messaging transaction.
    DSL type field is mandatory and must be set to "MESSAGING".
  1. General Rules:
        - Supported JMS header names: 'MQ9_MQMD_VERSION', 'MQ9_MQMD_REPORT', 'MQ9_MQMD_MESSAGE_TYPE', 
            'MQ9_MQMD_EXPIRY', 'MQ9_MQMD_FEEDBACK', 'MQ9_MQMD_ENCODING', 'MQ9_MQMD_CHARACTER_SET', 
            'MQ9_MQMD_PRIORITY', 'MQ9_MQMD_PERSISTENCE', 'MQ9_MQMD_MESSAGE_ID', 'MQ9_MQMD_CORRELATION_ID', 
            'MQ9_MQMD_BACKOUT_COUNT', 'MQ9_MQMD_USER_ID', 'MQ9_MQMD_ACCOUNTING_TOKEN', 'MQ9_MQMD_APPLICATION_ID', 
            'MQ9_PUT_APPLICATION_TYPE', 'MQ9_PUT_APPLICATION_NAME', 'MQ9_PUT_DATE_TIME', 
            'MQ9_MQMD_APPLICATION_ORIGIN_DATA', 'MQ9_MQMD_GROUP_ID', 'MQ9_MQMD_SEQUENCE_NUMBER', 
            'MQ9_MQMD_OFFSET', 'MQ9_MQMD_FLAGS', 'MQ9_MQMD_ORIGINAL_LENGTH', 'JMS_MESSAGE_ID', 
            'JMS_CORRELATION_ID', 'JMS_TIMESTAMP', 'JMS_DELIVERY_MODE', 'JMS_REDELIVERED', 
            'JMS_EXPIRATION', 'JMS_PRIORITY'
        - Assign intermediate values with {{#assign "varName"}}{{value}}{{/assign}}.
        - Keep JSON objects outside helper calls; helpers should only produce values.
        - Do not nest helpers more than 1–2 levels deep.
        - Each helper must have exactly one opening and one closing brace; do not add extra # or braces.
        - Conditional helpers ({{#eq}}, {{#neq}}, {{#gt}}, {{#lt}}, etc.) must use variable names directly without quotes.
        - Use {{else}} only once per conditional; do not use {{#else}} or {{/else}}.
        - Avoid repeating the same condition in multiple nested blocks.
        - Templates must be valid JSON and readable.
        2. Explicit Helper Syntax:
        - Opening a block helper: {{#helperName [arguments]}}
          Example: {{#assign "userId"}} or {{#eq userId "0"}}
        - Closing a block helper: {{/helperName}}
          Example: {{/assign}} or {{/eq}}
        - Else clause: {{else}} (no #, no /)
          Example:
            {{#eq userId "0"}}
              { "error": "User not found" }
            {{else}}
              { "id": {{userId}}, "name": "John Doe" }
            {{/eq}}
        - Variable interpolation inside JSON: {{variableName}} only for values
        - JSON objects stay outside helpers.
        3. Fields that support templates:
        - ResponseDsl.content: Base64 encoded response body that can include templates using {{}} syntax.
        4. Available helpers (WireMock + Blazemeter custom helpers) — all use {{}} style:
        5. LLM-Specific Best Practices:
        - Produce one helper per line.
        - Do not combine multiple logic operations in a single line.
        - Use sequential conditionals for multiple branches instead of deeply nested {{#eq}} blocks.
        - Keep templates simple, granular, and maintainable.
        - Always follow the explicit helper syntax rules above to prevent extra braces or invalid {{#else}} usage.
        6. Example Templates:
        # --- Assigning and Joining Values ---
        {{#assign 'operation'}}{{join request.method request.url ' '}}{{/assign}}
        Result: {{operation}}
        
        # --- Headers ---
        All headers: {{request.headers}}
        Single header: {{request.headers.JMS_CORRELATION_ID}}
        Iterate headers:
        {{#each request.headers as |hdr|}}
        {{hdr.name}}: {{hdr.value}}
        {{/each}}
        
        # --- Body and Body Parsing ---
        Raw body: {{request.body}}
        Body as JSON: {{jsonPath request.body '$'}}
        Body as XML: {{xpath request.body '//element'}}
        Extract value using JSONPath:
        {{#assign 'price'}}{{jsonPath request.body '$.price'}}{{/assign}}
        Extracted price: {{price}}
        Extract value using XPath:
        {{#assign 'id'}}{{xpath request.body '//order/id/text()'}}{{/assign}}
        Extracted ID: {{id}}
        
        # --- Conditional Logic ---
        {{#eq request.headers.JMS_CORRELATION_ID '1234'}}
        Order is pending
        {{else}}
        Order status: {{request.headers.STATUS}}
        {{/eq}}
        
        # --- Arrays and Ranges ---
        {{#assign 'a'}}{{array 'A' 'B' 'C'}}{{/assign}}
        Joined: {{arrayJoin ',' a}}
        {{#assign 'b'}}{{arrayAdd a 'D' position=1}}{{/assign}}
        Added: {{arrayJoin ',' b}}
        {{#assign 'c'}}{{arrayRemove b position=2}}{{/assign}}
        Removed: {{arrayJoin ',' c}}
        
        {{#each (range 1 3) as |i|}}
        Item {{i}}
        {{/each}}
        
        # --- String Helpers ---
        {{join 'Order' request.path.1 'confirmed'}}
        {{replace 'foo-bar' '-' '_'}}
        {{upper request.method}}
        {{lower user.role}}
        {{capitalize 'hello world'}}
        {{capitalizeFirst 'wiremock templates'}}
        {{defaultIfEmpty request.headers.comment 'none'}}
        {{cut 'a,b,c' ','}}
        {{slugify 'Hello World!'}}
        {{stripTags '<b>bold</b>'}}
        {{substring 'abcdef' 2 5}}
        {{ljust 'hi' size=5 pad='*'}}
        {{rjust 'ok' size=5 pad='-'}}
        
        # --- Date and Time ---
        Requested at: {{now}}
        Formatted date: {{dateFormat now 'yyyy-MM-dd HH:mm:ss'}}
        
        # --- Math and Size ---
        {{#assign 'qty'}}{{jsonPath request.body '$.quantity'}}{{/assign}}
        {{#assign 'total'}}{{math price '*' qty}}{{/assign}}
        Total: {{total}}
        Item count: {{size request.headers.items}}
        
        # --- Regex Extraction ---
        {{#assign 'num'}}{{regexExtract request.path.1 '([0-9]+)'}}{{/assign}}
        Extracted number: {{num}}
        
        # --- Using "with" Context ---
        {{#with request.headers}}
        User-Agent: {{User-Agent}}
        {{/with}}
        
        # --- Available Request Parts Summary ---
        request.headers → Map of headers
        request.headers.NAME → Header value(s)
        request.properties → Map of headers
        request.properties.NAME → Header value(s)
        request.body → Raw request body (string)
        # --- Available Http Call Action Templates ---
        httpcalls.actionName.response.body → Response body of the http call action named "actionName"
        httpcalls.actionName.response.statuscode → Status code of the http call action named "actionName"
        httpcalls.actionName.request.url → Request URL of the http call action named "actionName"
        httpcalls.actionName.request.method → Request method of the http call action named "actionName
        httpcalls.actionName.request.headers → Request headers of the http call action named "actionName"
        httpcalls.actionName.request.body → Request body of the http call action named "actionName
         # --- Available Virtual Service Configuration Templates ---
        config.var1 → Value of the virtual service configuration parameter named "var1"
        
        # --- Error Handling Notes ---
        If the response returns raw unparsed template text (for example, showing {{request.body}} instead of the actual value), it means the template syntax is **invalid or malformed** and WireMock skipped template parsing.  
        If the response returns **HTTP 500** with an exception in the WireMock logs, it means the syntax was **parsed correctly but failed during runtime execution** (for example, referencing a non-existent variable, invalid JSONPath, or invalid helper argument).
        # --- Important Notes ---
        Each helper must always be opened and closed when block form is used (e.g. {{#assign ...}}{{/assign}}, {{#eq ...}}{{/eq}}, {{#each ...}}{{/each}}).  
        Inline helpers like {{join ...}}, {{replace ...}}, {{upper ...}}, {{jsonPath ...}} do not require closing tags.
    Actions:
    - read: Read a Transaction. Get the information of a transaction.
        args(dict): Dictionary with the following required parameters:
            workspace_id (int): Mandatory. The id of the workspace to list transactions from.
            id (int): Mandatory. The id of the transaction to get information.
    - list: List all transactions.
        args(dict): Dictionary with the following required parameters:
            workspace_id (int): Mandatory. The id of the workspace to list transactions from.
            serviceId (int): Optional. The id of the service to list transactions from. Without this it will list all transactions in the workspace.
            virtual_service_id (int): Optional. Filter by virtual service (messaging service mock) id.
            limit (int, default=10, valid=[1 to 50]): The number of transactions to list.
            offset (int, default=0): Number of transactions to skip.
    - validate_template: Validates template used in transaction definition.
        args:
            template (str): Mandatory. The handlebars template to validate.
    - convert_template: Converts template to blazemeter format.
        args:
            template (str): Mandatory. The handlebars template to validate.
            encode (bool, default=True): Whether to encode the converted template to Base64.
    - create: Create a new transaction.
        Important: before using template in transaction definition validate it and 
        convert it first using validate_template and convert_template actions.
        args(Transaction): A Transaction object with the following fields:
            name (str): Mandatory. The name of the transaction.
            serviceId (int): Mandatory. The id of the service to create the transaction in.
            type (str): Mandatory. The type of the transaction.
            dsl (MessagingDsl): Mandatory. The DSL definition of the transaction.
            workspace_id (int): Mandatory. The id of the workspace.
            delay (int): Optional. Response delay in milliseconds.
            description (str): Optional.
            tags (list[str]): Optional.
            priority (int): Optional. Matching priority 1–2147483647, default 10.
            messagingTransactionMappings (dict): Optional. {sourceName, sourceType, destinations: [{destinationName, destinationType}]}.
            sampleBody (str): Optional. Example request body for documentation.
    - update: Updates a certain transaction.
        Important: before using template in transaction definition validate it and  
        convert it first using validate_template and convert_template actions.
        args(Transaction): A Transaction object with the following fields:
            id (int): Mandatory. The id of the transaction.
            name (str): Mandatory. The new name of the transaction.
            type (str): Mandatory. The type of the transaction.
            dsl (MessagingDsl): Mandatory. The DSL definition of the transaction.
            workspace_id (int): Mandatory. The id of the workspace.
            delay (int): Optional. Response delay in milliseconds.
            description (str): Optional.
            tags (list[str]): Optional.
            priority (int): Optional. Matching priority 1–2147483647, default 10.
            messagingTransactionMappings (dict): Optional. {sourceName, sourceType, destinations: [{destinationName, destinationType}]}.
            sampleBody (str): Optional. Example request body for documentation.
    - assign_keystore: Assign keystore asset to the transaction.
        args(dict):
            id (int): Mandatory. The id of the transaction.
            asset_id (int): Mandatory. The id of the keystore asset to assign.
            alias (str): Mandatory. The certificate alias to use.
            workspace_id (int): Mandatory. The id of the workspace.  
    - assign_certificate: Assign certificate asset to the transaction.
        args(dict):
            id (int): Mandatory. The id of the transaction.
            asset_id (int): Mandatory. The id of the certificate asset to assign.
            workspace_id (int): Mandatory. The id of the workspace.           

    Transaction Schema (including full MessagingDsl with MessagingRequestDsl and MessagingResponseDsl):
    {'$defs': {'AssignedAsset': {'properties': {'assetId': {'description': 'The identifier of the asset', 'title': 'Assetid', 'type': 'integer'}, 'assetUsageType': {'description': 'The usage type of the asset', 'title': 'Assetusagetype', 'type': 'string'}, 'alias': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'The asset certificate alias', 'title': 'Alias'}}, 'required': ['assetId', 'assetUsageType'], 'title': 'AssignedAsset', 'type': 'object'}, 'HttpHeader': {'additionalProperties': True, 'properties': {'name': {'description': 'HTTP header name', 'title': 'Name', 'type': 'string'}, 'value': {'description': 'HTTP header value', 'title': 'Value', 'type': 'string'}}, 'required': ['name', 'value'], 'title': 'HttpHeader', 'type': 'object'}, 'MatcherDsl': {'additionalProperties': True, 'properties': {'key': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "Matcher key. For URL matchers has static value 'url', for header matchers - header name, for body matchers static name 'body', for query parameter matchers - query parameter name", 'title': 'Key'}, 'matcherName': {'description': "The name of the matcher. Supported values for URL matchers: 'matches_url', 'equals_url'. Supported values for header/query matchers: 'equals', 'equals_insensitive', 'contains', 'matches', 'not_matches', 'absent'. Supported values for body matchers: 'equals', 'equals_insensitive', 'contains', 'matches', 'not_matches', 'absent', 'equals_json', 'equals_xml', 'matches_json', 'matches_xml', 'matches_xml_schema', 'matches_xml_cdata'.", 'title': 'Matchername', 'type': 'string'}, 'matchingValue': {'description': "Value to match against. Not used for 'absent' matcher_name. ", 'title': 'Matchingvalue', 'type': 'string'}, 'optional': {'default': False, 'description': 'If true, the matcher is optional and does not need to be present to match.', 'title': 'Optional', 'type': 'boolean'}, 'namespaces': {'anyOf': [{'items': {'$ref': '#/$defs/XmlMatcherNamespace'}, 'type': 'array'}, {'type': 'null'}], 'default': None, 'description': "Namespaces used for XML matching. Only used if matcher_name is one of 'equals_xml', 'matches_xml', 'matches_xml_schema', 'matches_xml_cdata'.", 'title': 'Namespaces'}, 'cdataXpath': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': "CDATA XPath expression used for XML CDATA matching. Only used if matcher_name is 'matches_xml_cdata'.", 'title': 'Cdataxpath'}}, 'required': ['matcherName', 'matchingValue'], 'title': 'MatcherDsl', 'type': 'object'}, 'MessagingDestination': {'properties': {'destinationName': {'description': 'Destination name', 'title': 'Destinationname', 'type': 'string'}, 'destinationType': {'description': 'Destination type: QUEUE, TOPIC, or SUBSCRIPTION', 'title': 'Destinationtype', 'type': 'string'}}, 'required': ['destinationName', 'destinationType'], 'title': 'MessagingDestination', 'type': 'object'}, 'MessagingDsl': {'additionalProperties': True, 'properties': {'requestDsl': {'$ref': '#/$defs/MessagingRequestDsl', 'description': 'DSL for the incoming JMS message matching'}, 'responseDsl': {'$ref': '#/$defs/MessagingResponseDsl', 'description': 'DSL for the outgoing JMS message'}, 'type': {'default': 'MESSAGING', 'description': "The type of the transaction. Supported value is 'MESSAGING'.", 'title': 'Type', 'type': 'string'}}, 'required': ['requestDsl', 'responseDsl'], 'title': 'MessagingDsl', 'type': 'object'}, 'MessagingProperty': {'additionalProperties': True, 'properties': {'name': {'description': 'JMS property name', 'title': 'Name', 'type': 'string'}, 'value': {'description': 'JMS property value', 'title': 'Value', 'type': 'string'}, 'type': {'description': "JMS property type. Supported types are 'BOOLEAN', 'BYTE', 'SHORT', 'INT', 'LONG', 'FLOAT', 'DOUBLE' and 'STRING'.", 'title': 'Type', 'type': 'string'}}, 'required': ['name', 'value', 'type'], 'title': 'MessagingProperty', 'type': 'object'}, 'MessagingRequestDsl': {'additionalProperties': True, 'properties': {'headers': {'anyOf': [{'items': {'$ref': '#/$defs/MatcherDsl'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'List of matchers for the jms headers of the incoming message', 'title': 'Headers'}, 'properties': {'anyOf': [{'items': {'$ref': '#/$defs/MatcherDsl'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'List of matchers for the jms properties of the incoming message', 'title': 'Properties'}, 'body': {'anyOf': [{'items': {'$ref': '#/$defs/MatcherDsl'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'List of matchers for the jms message body', 'title': 'Body'}}, 'title': 'MessagingRequestDsl', 'type': 'object'}, 'MessagingResponseDsl': {'additionalProperties': True, 'properties': {'messageType': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'JMS message type of the response. One of: TEXT_MESSAGE, BYTES_MESSAGE, MAP_MESSAGE, STREAM_MESSAGE, OBJECT_MESSAGE.', 'title': 'Messagetype'}, 'content': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': '', 'description': 'Response body payload. Provide as plain text (e.g. \'{"status":"ok"}\') or as a valid base64 string. Plain text and invalid base64 are auto-encoded by the tool.', 'title': 'Content'}, 'charset': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': 'UTF-8', 'description': 'Character set for the response content (default UTF-8)', 'title': 'Charset'}, 'failoverEnabled': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'default': None, 'description': 'Whether failover is enabled for this response', 'title': 'Failoverenabled'}, 'headers': {'anyOf': [{'items': {'$ref': '#/$defs/HttpHeader'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'JMS headers of the outgoing message', 'title': 'Headers'}, 'properties': {'anyOf': [{'items': {'$ref': '#/$defs/MessagingProperty'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'JMS properties of the outgoing message', 'title': 'Properties'}, 'responseDelay': {'anyOf': [{'$ref': '#/$defs/ResponseDelay'}, {'type': 'null'}], 'default': None, 'description': 'Delay configuration applied to this response'}}, 'title': 'MessagingResponseDsl', 'type': 'object'}, 'MessagingTransactionMapping': {'additionalProperties': True, 'properties': {'sourceName': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Transaction source name', 'title': 'Sourcename'}, 'sourceType': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Source type: QUEUE, TOPIC, or SUBSCRIPTION', 'title': 'Sourcetype'}, 'destinations': {'default': [], 'description': 'Transaction destinations', 'items': {'$ref': '#/$defs/MessagingDestination'}, 'title': 'Destinations', 'type': 'array'}}, 'title': 'MessagingTransactionMapping', 'type': 'object'}, 'ResponseDelay': {'additionalProperties': True, 'properties': {'type': {'default': 'FIXED', 'description': 'Delay type: FIXED, LOGNORMAL, or UNIFORM', 'title': 'Type', 'type': 'string'}, 'fixedDelay': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Fixed delay in ms (FIXED type)', 'title': 'Fixeddelay'}, 'median': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Median for LOGNORMAL distribution', 'title': 'Median'}, 'sigma': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Sigma for LOGNORMAL distribution', 'title': 'Sigma'}, 'lower': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Lower bound for UNIFORM distribution', 'title': 'Lower'}, 'upper': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'default': None, 'description': 'Upper bound for UNIFORM distribution', 'title': 'Upper'}}, 'title': 'ResponseDelay', 'type': 'object'}, 'XmlMatcherNamespace': {'properties': {'prefix': {'description': 'XML namespace prefix.', 'title': 'Prefix', 'type': 'string'}, 'uri': {'description': 'XML namespace URI.', 'title': 'Uri', 'type': 'string'}}, 'required': ['prefix', 'uri'], 'title': 'XmlMatcherNamespace', 'type': 'object'}}, 'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'The unique identifier of the transaction', 'title': 'Id'}, 'name': {'description': 'The name of the transaction', 'title': 'Name', 'type': 'string'}, 'serviceId': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'The unique identifier of the service where the transaction belongs', 'title': 'Serviceid'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Human-readable description', 'title': 'Description'}, 'tags': {'anyOf': [{'items': {'type': 'string'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'Tags for filtering and organization', 'title': 'Tags'}, 'priority': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 10, 'description': 'Matching priority (1–2147483647, default 10)', 'title': 'Priority'}, 'dsl': {'$ref': '#/$defs/MessagingDsl', 'description': 'Transaction DSL'}, 'messagingTransactionMappings': {'anyOf': [{'$ref': '#/$defs/MessagingTransactionMapping'}, {'type': 'null'}], 'default': None, 'description': 'Binds this transaction to a source queue/topic/subscription and specifies where responses are sent.'}, 'sampleBody': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Example request body for documentation and testing', 'title': 'Samplebody'}, 'assets': {'anyOf': [{'items': {'$ref': '#/$defs/AssignedAsset'}, 'type': 'array'}, {'type': 'null'}], 'default': None, 'description': 'List of assets', 'title': 'Assets'}}, 'required': ['name', 'dsl'], 'title': 'MessagingTransaction', 'type': 'object'}

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
argsYes
actionYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
infoNoInfo messages
errorNoError message
totalNoTotal available records
resultNoResult
warningNoWarning messages
has_moreNoMore records per page to list
Behavior4/5

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

Without annotations, the description takes on transparency duty. It discloses important behaviors: content auto-base64 encoding when plain text is provided, the mandatory DSL type field, error handling notes distinguishing invalid template syntax from runtime failures, and the requirement to validate/convert templates before create/update. It does not describe permissions or side effects of asset assignment, but the provided error semantics are valuable.

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

Conciseness2/5

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

The description is excessively long, with dozens of lines explaining Handlebars template syntax, supported headers, and helper rules that are not directly needed to invoke the tool. Essential action details appear only after the template tutorial. This is not appropriately sized and does not front-load the most useful information.

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

Completeness4/5

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

Given the tool's complexity—multiple actions, a nested MessagingDsl schema, and template validation—the description is thorough. It includes the full Transaction schema, action parameters, and error-handling notes. It lacks explicit description of return values for validate_template and convert_template, and assign actions, but overall covers the domain well.

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?

The input schema is a generic action/args container with 0% parameter coverage, so the description must define all parameters. It does so for each action, listing required and optional fields with types and defaults (e.g., limit=10, offset=0, priority=1–2147483647). The full Transaction schema is embedded, adding rich semantics. However, the format is prose, not structured, which may reduce clarity.

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 opens with 'Operations on JMS Messaging transactions' and enumerates specific actions (read, list, validate_template, create, update, etc.), clearly distinguishing it from HTTP transaction tools. However, the massive template tutorial buries the core purpose; the first sentence is generic, but the action list makes it clear.

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

Usage Guidelines4/5

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

The description states 'Use this when a user needs to create or select a JMS messaging transaction,' providing a clear trigger condition. It also gives workflow guidance for create/update (validate and convert template first). It does not mention alternatives, but sibling tools are for different domains (e.g., HTTP transactions), so the usage context is sufficient.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Blazemeter/sv-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server