Skip to main content
Glama
Blazemeter

BlazeMeter Service Virtualization MCP Server

Official
by Blazemeter

virtual_services_recording

Manage recordings that capture live broker traffic for replay in messaging virtual services. Create, update, list, and organize recorded messages for accurate simulation.

Instructions

    Operations on recordings and recorded messages within recordings.
    Recordings capture live broker traffic and can be replayed by a messaging virtual service.

    ## Recording actions

    - list_recordings: List recordings in a workspace.
        args:
            workspace_id (int): Mandatory.
            serviceId (int): Optional. Filter by parent service.
            serviceMockId (int): Optional. Filter by virtual service (messaging service mock).
            limit (int, default=50): Max results.
            offset (int, default=0): Pagination offset.
            fetchMessages (bool, default=false): Include inline messages in response.
    - read_recording: Get full details of a recording.
        args:
            workspace_id (int): Mandatory.
            id (int): Mandatory. Recording ID.
    - create_recording: Create a new recording.
        args:
            workspace_id (int): Mandatory.
            name (str): Mandatory.
            serviceId (int): Optional.
            description (str): Optional.
            tags (list[str]): Optional.
            messages (list): Optional. Inline RecordedMessage objects for seed data.
            runtimeConfig (dict): Optional. {replayCount, delayBetweenReplays, initialDelay}.
    - update_recording: Full replacement of a recording.
        args:
            workspace_id (int): Mandatory.
            id (int): Mandatory.
            name (str): Mandatory.
            serviceId (int): Optional.
            description (str): Optional.
            tags (list[str]): Optional.
            messages (list): Optional.
            runtimeConfig (dict): Optional.
    - patch_recording: Partial update — only provided fields are changed.
        args:
            workspace_id (int): Mandatory.
            id (int): Mandatory.
            name (str): Optional.
            serviceId (int): Optional.
            description (str): Optional.
            tags (list[str]): Optional.
            messages (list): Optional.
            runtimeConfig (dict): Optional. {replayCount, delayBetweenReplays, initialDelay}.

    ## Recorded message actions

    content fields are always base64-encoded. Assign sequential index values to control
    playback order; if omitted the server assigns order by insertion sequence.

    Notable JMS headers (use in headers[].name):
      JMS_MESSAGE_ID, JMS_CORRELATION_ID, JMS_TIMESTAMP, JMS_DELIVERY_MODE,
      JMS_REDELIVERED, JMS_EXPIRATION, JMS_PRIORITY
    IBM MQ MQMD headers (IBM MQ protocols only):
      MQ9_MQMD_MsgId, MQ9_MQMD_CorrelId, MQ9_MQMD_Format, MQ9_MQMD_ReplyToQ,
      MQ9_MQMD_ReplyToQMgr, MQ9_MQMD_Persistence, MQ9_MQMD_Priority, MQ9_MQMD_Expiry

    - list_messages: List messages within a recording (sorted by index).
        args:
            workspace_id (int): Mandatory.
            recording_id (int): Mandatory.
            limit (int, default=50): Max results.
            offset (int, default=0): Pagination offset.
    - create_message: Add a recorded message to a recording.
        args:
            workspace_id (int): Mandatory.
            recording_id (int): Mandatory.
            messageType (str): Mandatory. TEXT_MESSAGE | BYTES_MESSAGE | MAP_MESSAGE | STREAM_MESSAGE | OBJECT_MESSAGE.
            content (str): Mandatory. Base64-encoded payload.
            destination (str): Mandatory. Target queue/topic/subscription name.
            destinationType (str): Mandatory. QUEUE | TOPIC | SUBSCRIPTION.
            name (str): Optional.
            index (int): Optional. Sequence position (auto-assigned if omitted).
            delay (int): Optional. Inter-message delay in ms.
            correlationId (str): Optional.
            headers (list): Optional. [{name, value}] JMS/MQMD headers.
            properties (list): Optional. [{name, value, type}] JMS properties.
            recordedAt (str): Optional. ISO-8601 timestamp.
    - update_message: Full replacement of a recorded message.
        args: Same as create_message plus message_id (int): Mandatory.
    - patch_message: Partial update of a recorded message — only provided fields change.
        args:
            workspace_id (int): Mandatory.
            recording_id (int): Mandatory.
            message_id (int): Mandatory.
            messageType (str): Optional.
            content (str): Optional. Base64-encoded.
            destination (str): Optional.
            destinationType (str): Optional.
            name (str): Optional.
            index (int): Optional.
            delay (int): Optional.
            correlationId (str): Optional.
            headers (list): Optional.
            properties (list): Optional.
            recordedAt (str): Optional. ISO-8601 timestamp.

    Recording schema:
    {'$defs': {'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'}, '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'}, 'RecordedMessage': {'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Unique identifier of the recorded message', 'title': 'Id'}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Message name', 'title': 'Name'}, 'messageType': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'JMS message type. One of: TEXT_MESSAGE, BYTES_MESSAGE, MAP_MESSAGE, STREAM_MESSAGE, OBJECT_MESSAGE.', 'title': 'Messagetype'}, 'content': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Base64-encoded message payload', 'title': 'Content'}, 'destination': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Target queue/topic/subscription name', 'title': 'Destination'}, 'destinationType': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Destination type: QUEUE, TOPIC, or SUBSCRIPTION', 'title': 'Destinationtype'}, 'index': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Sequence position within the recording (controls playback order)', 'title': 'Index'}, 'delay': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Inter-message delay in ms', 'title': 'Delay'}, 'correlationId': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'JMS correlation ID', 'title': 'Correlationid'}, 'headers': {'anyOf': [{'items': {'$ref': '#/$defs/HttpHeader'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'JMS / MQMD headers', 'title': 'Headers'}, 'properties': {'anyOf': [{'items': {'$ref': '#/$defs/MessagingProperty'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'JMS properties', 'title': 'Properties'}, 'recordedAt': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'ISO-8601 timestamp when message was recorded', 'title': 'Recordedat'}}, 'title': 'RecordedMessage', 'type': 'object'}, 'ReplayConfig': {'additionalProperties': True, 'properties': {'replayCount': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 1, 'description': 'Number of times to replay the recording', 'title': 'Replaycount'}, 'delayBetweenReplays': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 0, 'description': 'Delay in ms between replays', 'title': 'Delaybetweenreplays'}, 'initialDelay': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': 0, 'description': 'Initial delay in ms before the first replay', 'title': 'Initialdelay'}}, 'title': 'ReplayConfig', 'type': 'object'}}, 'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Unique identifier of the recording', 'title': 'Id'}, 'name': {'description': 'Recording name', 'title': 'Name', 'type': 'string'}, 'serviceId': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'ID of the parent service this recording belongs to', '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', 'title': 'Tags'}, 'messages': {'anyOf': [{'items': {'$ref': '#/$defs/RecordedMessage'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'Recorded messages (inline on create or fetch with fetchMessages=true)', 'title': 'Messages'}, 'runtimeConfig': {'anyOf': [{'$ref': '#/$defs/ReplayConfig'}, {'type': 'null'}], 'default': None, 'description': 'Replay configuration for this recording'}}, 'required': ['name'], 'title': 'Recording', 'type': 'object'}
    RecordedMessage schema:
    {'$defs': {'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'}, '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'}}, 'properties': {'id': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Unique identifier of the recorded message', 'title': 'Id'}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Message name', 'title': 'Name'}, 'messageType': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'JMS message type. One of: TEXT_MESSAGE, BYTES_MESSAGE, MAP_MESSAGE, STREAM_MESSAGE, OBJECT_MESSAGE.', 'title': 'Messagetype'}, 'content': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Base64-encoded message payload', 'title': 'Content'}, 'destination': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Target queue/topic/subscription name', 'title': 'Destination'}, 'destinationType': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'Destination type: QUEUE, TOPIC, or SUBSCRIPTION', 'title': 'Destinationtype'}, 'index': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Sequence position within the recording (controls playback order)', 'title': 'Index'}, 'delay': {'anyOf': [{'type': 'integer'}, {'type': 'null'}], 'default': None, 'description': 'Inter-message delay in ms', 'title': 'Delay'}, 'correlationId': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'JMS correlation ID', 'title': 'Correlationid'}, 'headers': {'anyOf': [{'items': {'$ref': '#/$defs/HttpHeader'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'JMS / MQMD headers', 'title': 'Headers'}, 'properties': {'anyOf': [{'items': {'$ref': '#/$defs/MessagingProperty'}, 'type': 'array'}, {'type': 'null'}], 'default': [], 'description': 'JMS properties', 'title': 'Properties'}, 'recordedAt': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'default': None, 'description': 'ISO-8601 timestamp when message was recorded', 'title': 'Recordedat'}}, 'title': 'RecordedMessage', '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
Behavior5/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 and does so extensively. It discloses base64 encoding of content fields, sequential index ordering for playback control, server-side auto-assignment when index omitted, the distinction between full replacement (update_recording/update_message) and partial update (patch_recording/patch_message), default values, and allowed JMS/MQMD header names. This goes well beyond what a generic schema would convey.

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 well-organized with a concise opening, sections for recording and message actions, bulleted parameter lists, and code blocks for schemas. However, it is somewhat verbose because the same JSON schema for Recording and RecordedMessage is duplicated almost verbatim twice. Despite this redundancy, the structure is clear and front-loaded with the most important purpose statement.

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

Completeness5/5

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

For a complex tool with nine sub-actions and nested object parameters, the description is remarkably complete. It covers all available actions, their arguments, behavioral details, allowed enums, and default settings. Since an output schema exists, the lack of explicit return-value explanations is acceptable per the rubric, and the description fully compensates for the sparse input schema.

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

Parameters5/5

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

The input schema is a minimal dispatcher ({action, args}) with zero parameter descriptions, so the description is the only source of parameter semantics. It thoroughly documents mandatory vs optional args, types, defaults, and meaning for every sub-action, and includes full Recording and RecordedMessage schemas. This is essential for correct invocation and far exceeds the structured information available.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Operations on recordings and recorded messages within recordings' with a contextual explanation of what recordings are and how they're used (replayable by messaging virtual services). It distinguishes itself from sibling tools by focusing specifically on recording lifecycle management, and lists all nine sub-actions explicitly, making the scope unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context on what the tool manages and details each sub-action with parameters, but it does not explicitly state when to use this tool versus alternatives or mention exclusions. Since the tool name is specific and the description starts with the resource it operates on, the usage context is implied rather than explicitly contrasted with sibling tools.

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