Skip to main content
Glama
LifeSugar
by LifeSugar

RenderDoc MCP

Let AI clients that support the Model Context Protocol (MCP) analyze RenderDoc capture files directly: browse Draw/Dispatch events, inspect pipeline and shaders, and page through vertex and constant buffer data.

The repository contains a runnable MCP stdio service, session and path safety boundaries, a Mock backend for development testing, and a real Replay bridge backend that connects to qrenderdoc 1.44.

[!IMPORTANT] The qrenderdoc backend is currently recommended for connecting real captures; the renderdoc / native backend remains a reserved implementation.

The real bridge consists of two processes: a modern Python 3.11 MCP Gateway, and a UI extension running inside qrenderdoc's embedded Python 3.6. The two communicate over a native file-queue JSON protocol with a random token; this avoids depending on the _socket module, which is missing from RenderDoc's slim Python.

MCP Client  <-- stdio -->  Python 3.11 Gateway
                                  |
                         authenticated JSON spool
                                  |
                           qrenderdoc extension
                                  |
                         RenderDoc ReplayController

Existing capabilities

  • MCP stdio service with structured tool responses.

  • .rdc path whitelist, file type, size, and session count limits.

  • Launch standalone whitelisted .exe files via RenderDoc injection, with arguments passed as an array and no shell execution.

  • Stable capture_id, explicit event_id, no reliance on hidden current-event selection.

  • Serial per-capture backend access, leaving headroom for RenderDoc ReplayController's threading model.

  • Action filtering and cursor-based pagination.

  • inspect_event composite call, avoiding a large number of fine-grained MCP round trips for a single inspection.

  • Read topology, viewport/scissor, shaders, resource bindings, render targets, and validation messages for the current event.

  • Unified error structure and a passive capture summary Resource.

First batch of tools:

  • health

  • launch_program

  • open_capture

  • close_capture

  • get_capture_summary

  • list_actions

  • get_event

  • inspect_event

  • get_pipeline_state

  • get_shader

  • get_vertex_data

  • list_constant_buffers

  • get_constant_buffer

Pipeline, shader, and buffer data

  • get_pipeline_state without a section argument returns a cross-API common snapshot and api_specific_sections; passing any of those names as section in a follow-up call reads the full top-level state group for D3D11, D3D12, Vulkan, or OpenGL.

  • get_shader reads reflection, disassembly, source, or raw per stage. The latter three large content types are paged with cursor / next_cursor; source_file_index can traverse every embedded source file.

  • get_vertex_data expands instances and draw vertices into stable records, returning decoded values for all attributes, exact raw_hex, actual buffer offsets, and format metadata; uv_attributes explicitly marks UV / TEXCOORD. Keep following next_cursor to cover all instances and vertices.

  • list_constant_buffers enumerates every shader stage, reflection block, and array element; then use get_constant_buffer to read all decoded variables in that group. The underlying raw bytes are paged with raw_offset / next_offset, so no data is lost even beyond the single-read limit.

Related MCP server: RenderDoc MCP Server

Environment

  • Python 3.11+

  • MCP Python SDK stable line >=1.27,<2

  • RenderDoc/qrenderdoc 1.44 (real bridge backend)

SDK v2 is still in pre-release, so this project is pinned to v1.x for now, avoiding framework code changing with pre-release interfaces.

Quick start (Mock backend)

In PowerShell:

python -m venv .venv
.venv\Scripts\python -m pip install -e ".[dev]"
$env:RENDERDOC_MCP_BACKEND = "mock"
$env:RENDERDOC_MCP_ALLOWED_ROOTS = (Get-Location).Path
.venv\Scripts\python -m renderdoc_mcp

stdio is the protocol channel; do not write normal logs to stdout.

Using MCP Inspector:

.venv\Scripts\mcp dev src\renderdoc_mcp\server.py

The Mock backend still requires a real, whitelisted .rdc path to be passed in, but it does not parse the file contents.

Installing the qrenderdoc bridge

Assuming RenderDoc is installed at C:\Tools\RenderDoc, run the following in the project directory:

powershell -ExecutionPolicy Bypass -File .\scripts\install_qrenderdoc_bridge.ps1 `
  -RenderDocRoot C:\Tools\RenderDoc

The script will:

  • Install the extension to %APPDATA%\qrenderdoc\extensions\renderdoc_mcp_bridge;

  • Generate a random token and write it to bridge_config.json on the extension side;

  • Generate .renderdoc-mcp-bridge.json in the project root for the Gateway to use.

Then open C:\Tools\RenderDoc\qrenderdoc.exe, go to Tools → Manage Extensions, select RenderDoc MCP Bridge, click Load first, and after it succeeds check Always Load. When using the real backend, qrenderdoc must stay running; the spool directory defaults to .renderdoc-mcp-spool inside the project, which is Git-ignored.

During development you can also have qrenderdoc run a load script automatically once the UI opens:

C:\Tools\RenderDoc\qrenderdoc.exe --ui-python .\scripts\load_qrenderdoc_bridge.py

This command only handles loading for that session; for daily use it is still recommended to check Always Load in the extension manager.

MCP client configuration example

Replace the paths with your actual locations:

{
  "mcpServers": {
    "renderdoc": {
      "command": "C:\\path\\to\\RenderDoc_MCP\\.venv\\Scripts\\python.exe",
      "args": ["-m", "renderdoc_mcp"],
      "env": {
        "RENDERDOC_MCP_BACKEND": "qrenderdoc",
        "RENDERDOC_MCP_ALLOWED_ROOTS": "C:\\captures",
        "RENDERDOC_MCP_ALLOWED_EXECUTABLE_ROOTS": "C:\\projects\\my-renderer",
        "RENDERDOC_MCP_ARTIFACT_ROOT": "C:\\path\\to\\RenderDoc_MCP\\artifacts",
        "RENDERDOC_MCP_RENDERDOC_ROOT": "C:\\Tools\\RenderDoc"
      },
      "cwd": "C:\\path\\to\\RenderDoc_MCP"
    }
  }
}

In Codex's graphical configuration page, the arguments must be split into two lines: -m and renderdoc_mcp. Leave environment variable passthrough blank; set Working directory to the project root. Since .renderdoc-mcp-bridge.json already exists in the working directory, there is no need to paste the token manually into the MCP configuration.

Configuration options

Environment variable

Default

Description

RENDERDOC_MCP_BACKEND

mock

mock, qrenderdoc (real UI bridge), or renderdoc (reserved native backend)

RENDERDOC_MCP_ALLOWED_ROOTS

current directory

Directories where captures may be opened; multiple directories separated by the system path separator

RENDERDOC_MCP_ALLOWED_EXECUTABLE_ROOTS

empty (launch disabled)

Root paths for .exe files and working directories that launch_program may start; multiple directories separated by the system path separator

RENDERDOC_MCP_ARTIFACT_ROOT

./artifacts

Directory for artifacts such as PNG, shader, and JSON files generated later

RENDERDOC_MCP_MAX_SESSIONS

2

Maximum concurrent capture sessions; the qrenderdoc backend is tightened to 1

RENDERDOC_MCP_MAX_CAPTURE_BYTES

8589934592

Maximum size limit for a single capture

RENDERDOC_MCP_MAX_PAGE_SIZE

100

Hard upper limit for a single Action page

RENDERDOC_MCP_MAX_BUFFER_READ_BYTES

65536

Hard upper limit for a single page of vertex, constant buffer, and shader content reads; cursors allow continued reading

RENDERDOC_MCP_RENDERDOC_ROOT

config file value

RenderDoc installation directory, e.g. E:\RenderDoc

RENDERDOC_MCP_BRIDGE_CONFIG

./.renderdoc-mcp-bridge.json

Gateway bridge configuration file

RENDERDOC_MCP_BRIDGE_SPOOL_DIR

config file value

Local bridge request/response queue directory

RENDERDOC_MCP_BRIDGE_TOKEN

config file value

Optional environment variable override; normally no manual configuration needed

RENDERDOC_MCP_BRIDGE_TIMEOUT_SECONDS

120

Timeout for a single bridge request

Launching a program from RenderDoc

First add your program's project root to RENDERDOC_MCP_ALLOWED_EXECUTABLE_ROOTS, restart the MCP service, then call:

{
  "executable": "C:\\projects\\my-renderer\\bin\\renderer.exe",
  "arguments": ["--scene", "C:\\projects\\my-renderer\\scenes\\demo.json"],
  "working_directory": "C:\\projects\\my-renderer",
  "hook_into_children": false,
  "api_validation": false
}

A successful result includes the RenderDoc target-control ident and the capture file template. The program has been injected by RenderDoc, so you can press the default capture hotkey F12 in the program window. This tool does not accept shell commands or environment variable modifications; enable hook_into_children only if child processes also need to be injected, and api_validation only if the API validation layer is needed.

Testing

After installing development dependencies:

.venv\Scripts\python -m pytest
.venv\Scripts\ruff check .

Core service tests can also run without third-party test dependencies:

$env:PYTHONPATH = "src"
python -m unittest discover -s tests -v

Safety boundaries

  • Only .rdc files under RENDERDOC_MCP_ALLOWED_ROOTS can be opened.

  • launch_program is disabled by default and can only launch .exe files under RENDERDOC_MCP_ALLOWED_EXECUTABLE_ROOTS.

  • Launch arguments are passed as an array, not through a shell; the Gateway does not allow modifying the target program's environment variables through tools.

  • Native messages between the Gateway and the qrenderdoc extension are authenticated with a random token generated at install time.

  • Action, shader, vertex, and buffer data are all subject to pagination or single-read limits.

Project status and next steps

The bridge main path, pipeline state, shaders, vertex input, and constant buffer reads are implemented. Future tasks can continue with Texture export, generic buffer readback, Pixel History, and artifact management.

See the architecture notes for detailed boundaries.

License

MIT

Available Tools

13 tools
close_captureB

Close a capture session and release its replay resources.

ParametersJSON Schema
NameRequiredDescriptionDefault
capture_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose one meaningful trait beyond the schema: that replay resources are released. It omits other relevant behavior for a lifecycle/teardown call, such as irreversibility, idempotency, error conditions, and whether the capture data becomes unavailable afterward.

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 no filler; the action and its side effect are stated immediately. It is efficient, though terse enough that it verges on under-specification rather than maximal conciseness.

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?

An output schema exists so return values need not be described, and the tool is low-complexity with one parameter. Still, with zero annotations the description should cover error/duplicate-close behavior and permission needs; it only covers the resource-release side effect, leaving the lifecycle contract partly undefined.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions capture_id. The single parameter's self-explanatory name is the only signal, and the description adds no format, source, or validity information to compensate for the coverage gap.

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?

States a specific verb ('Close') and resource ('capture session'), clearly the inverse of the sibling open_capture. The added clause 'release its replay resources' sharpens the effect. It does not explicitly name open_capture or other siblings, so it stops short of full differentiation.

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?

Usage is implied by the name and by the existence of open_capture, so an agent can infer this is the teardown counterpart. However, there is no explicit when-to-use statement, no prerequisite (e.g. a capture must be open), and no guidance on what happens if called twice or on an invalid id.

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

get_capture_summaryB

Return metadata and warnings for an open capture session.

ParametersJSON Schema
NameRequiredDescriptionDefault
capture_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/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 behavioral burden. It discloses that the tool returns metadata and warnings, but says nothing about whether it is purely read-only, any permission requirements, or behavior when the capture is not open. For a tool with zero annotation coverage this is thin.

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 well-formed sentence with the core purpose front-loaded and no wasted words. Appropriately sized for a simple getter.

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?

With an output schema present, the return values (metadata and warnings) need not be detailed in the description. However, given no annotations and 0% parameter coverage, the description leaves gaps around the required capture_id and read-only behavior that a minimal getter could plausibly fill.

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

Parameters2/5

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

Schema description coverage is 0% and the single parameter (capture_id) is undocumented. The description alludes to a 'capture session' but adds no meaning about what capture_id identifies, its format, or its relationship to an open session, failing to compensate for the coverage gap.

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?

States a specific verb (Return) and resource (metadata and warnings for an open capture session), which clearly distinguishes it from siblings like open_capture, close_capture, and get_event. The purpose is unambiguous, though it does not explicitly name a contrasting sibling.

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 phrase 'for an open capture session' implies a prerequisite (a session must exist, presumably via open_capture), giving implied usage context. However, there is no explicit when-to-use guidance or named alternative, so the guidance remains inferential.

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

get_constant_bufferC

Read decoded variables and a bounded raw-byte page for one constant-buffer group.

ParametersJSON Schema
NameRequiredDescriptionDefault
stageYes
event_idYes
capture_idYes
raw_lengthNo
raw_offsetNo
array_indexNo
block_indexYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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 behavioral burden. It implies a read-only operation ('Read') and a bounded response ('bounded raw-byte page'), but it omits permissions, side effects, error behavior, and any other operational context needed to invoke it safely.

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 single sentence is front-loaded with the verb and resource and contains no filler. It is appropriately concise, though its extreme brevity contributes to gaps elsewhere.

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 7 parameters, 0% schema description coverage, no annotations, and only an output schema to cover return values, the description is far from complete. It gives no usage context and almost no parameter or behavioral detail, leaving major gaps for an agent to infer.

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

Parameters2/5

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

Schema description coverage is 0% for 7 parameters, so the description must compensate. It only hints at block_index ('one constant-buffer group') and raw_length/raw_offset ('bounded raw-byte page'); the roles of capture_id, event_id, stage, and array_index are left unexplained.

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 verb ('Read') and resource ('one constant-buffer group'), and it names the outputs ('decoded variables and a bounded raw-byte page'). This implicitly distinguishes it from list_constant_buffers, but it does not explicitly name or contrast with any sibling tool, which keeps it from a 5.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives like list_constant_buffers or inspect_event, nor does it state prerequisites such as needing an open capture or a valid block index. It only describes what the tool does, not when to reach for it.

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

get_eventC

Get draw, dispatch, copy, marker, or present details for one event ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYes
capture_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 behavioral burden. 'Get' implies a read, and the enumerated detail types hint at scope, but there is nothing about permissions, whether capture_id must be an open capture, or error behavior when an event ID is absent.

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 front-loaded sentence that names the verb, resource, and returned detail categories with zero filler. Nothing needs trimming and nothing is buried.

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?

An output schema exists, so return values need not be described. Still, with two required, undocumented parameters and no annotation coverage, the description leaves the agent guessing about capture_id and about how this tool relates to inspect_event.

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

Parameters2/5

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

Schema description coverage is 0% for two required parameters, so the description must compensate and does not. It gestures at 'one event ID' but never explains the required capture_id or the relationship between capture_id and event_id.

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?

States a specific verb ('Get') plus resource ('event') and enumerates the detail kinds returned (draw, dispatch, copy, marker, present), so the agent knows what this retrieves. It does not, however, differentiate itself from the sibling 'inspect_event', leaving ambiguity about which to pick.

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 such as inspect_event or get_capture_summary. The only implicit cue is 'one event ID', which does not constitute usage guidance.

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

get_pipeline_stateC

Read common pipeline state or one API-specific top-level state section.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNo
event_idYes
capture_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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 behavioral burden; it only implies a read via the verb 'Read.' It says nothing about permissions, whether the state is live or frozen at the event, or any error/edge behavior, leaving significant gaps.

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 no filler. The only cost is that the alternative clause is dense jargon rather than plain language, but nothing is wasted.

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?

An output schema exists, so return values need not be described, but with zero parameter coverage, no annotations, and no explanation of the section concept, the description is too thin for a 3-parameter tool whose optional 'section' argument drives meaningfully different results.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, yet event_id and capture_id are never mentioned. It only hints at the 'section' parameter by referencing 'one API-specific top-level state section,' without listing valid section names or explaining the default null behavior.

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?

States a clear verb (Read) and resource (pipeline state), and distinguishes between 'common pipeline state' and 'one API-specific top-level state section.' However, the jargon 'common' vs 'API-specific top-level state section' is not explained, so the exact scope remains fuzzy for an agent unfamiliar with the API.

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 on when to use this tool versus siblings like get_event, inspect_event, or get_capture_summary, and no indication of when the optional 'section' argument should be supplied versus omitted. The agent must infer usage entirely from the name.

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

get_shaderC

Read a bound shader's reflection, disassembly, source, or raw bytes in pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
stageYes
cursorNo
lengthNo
contentNoreflection
event_idYes
capture_idYes
source_file_indexNo
disassembly_targetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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 behavioral burden. It usefully discloses that output is paged, but says nothing about read safety, required capture/event binding, error modes, or how cursor/length control traversal.

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 no filler. It is efficient, though arguably too terse for an 8-parameter tool, which slightly reduces its structural value.

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 an 8-parameter tool with 3 required params, no annotations, and 0% schema description coverage, the description does far too little. The existence of an output schema excuses explaining return values, but the input semantics and usage context remain substantially under-specified.

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

Parameters2/5

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

Schema description coverage is 0% across 8 parameters. The description only indirectly touches 'content' (reflection/disassembly/source/raw bytes) and 'in pages' (cursor/length); it says nothing about stage, event_id, capture_id, source_file_index, or disassembly_target, so it fails to compensate for the coverage gap.

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 verb (Read) and resource (a bound shader) and enumerates what can be retrieved: reflection, disassembly, source, or raw bytes. It is clearer than a tautology, but it does not contrast itself with siblings like get_constant_buffer or get_vertex_data, so an agent gets the 'what' but not the sibling boundary.

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 explicit when-to-use or when-not-to-use guidance, and no alternative tool is named. 'in pages' hints at a paginated workflow but gives no condition for choosing this tool over the adjacent get_* siblings.

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

get_vertex_dataC

Page through every vertex/instance input and decoded attribute, including UVs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
event_idYes
capture_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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. It discloses that results are paginated (a real behavioral trait) and that it returns 'decoded' attributes, but says nothing about permissions, whether the capture must be open, result volume, or ordering semantics.

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 no filler or redundancy; the pagination behavior is stated first. It is efficient, though arguably too terse for the amount of unexplained surface area.

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?

An output schema exists, so return values need not be described, but with zero annotation coverage, zero parameter descriptions, and no usage conditions, an agent lacks enough context to invoke this confidently. For a tool requiring capture_id and event_id, more framing is needed.

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

Parameters2/5

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

Schema description coverage is 0% across 4 parameters, so the description must compensate and does not: event_id, capture_id, limit, and cursor are never explained, nor is the relationship between event_id and the vertex data requested. The mention of UVs describes the payload, not any parameter.

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 verb ('Page through') and resource ('every vertex/instance input and decoded attribute, including UVs'), which clearly separates it from siblings like get_constant_buffer or get_shader. It is clear but does not explicitly name or contrast with any alternative tool.

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 siblings such as inspect_event or list_constant_buffers, nor any stated prerequisite (e.g., that a capture must be open). The required capture_id/event_id are only visible in the schema, not framed as usage conditions.

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

healthA

Check gateway limits and whether the configured replay backend is available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. 'Check' implies a read-only, non-destructive probe and it names what is inspected, but it says nothing about side effects, latency, failure modes, or what happens when the backend is unavailable.

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 front-loaded sentence with no padding; every clause ('gateway limits', 'configured replay backend') earns its place and the object of the check comes first.

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?

An output schema exists, so return values need not be explained, and a zero-parameter diagnostic needs little more than a statement of what it verifies. The only gap is the lack of any hint about when to run it relative to the capture/launch workflow.

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 tool takes zero parameters, so there are no parameter semantics to document; the baseline for a parameterless tool applies. The description correctly adds no misleading parameter context.

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 gives a specific verb ('Check') and two concrete resources ('gateway limits', 'replay backend availability'), which lets an agent distinguish this diagnostic from the graphics-capture siblings. It is clear about what it does, though it does not explicitly name itself as the diagnostic/pre-flight counterpart to tools like launch_program or open_capture.

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 call this versus any sibling, nor any stated preconditions or exclusions. A health/diagnostic check's timing (e.g., before launch_program or after a backend change) is left entirely to inference.

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

inspect_eventC

Inspect selected pipeline sections for an event in one serialized replay call.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNo
event_idYes
capture_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/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. It discloses that a serialized replay is triggered and that the work is batched, which hints at cost, but says nothing about whether replay mutates state, what permissions are required, or how failures surface.

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 tight sentence with the key scoping information ('for an event', 'one serialized replay call') front-loaded. Nothing is wasted, though it is arguably too terse to be fully useful.

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?

An output schema exists, so return values need not be explained. However, for a 3-parameter tool with zero schema descriptions and no annotations, the description should at minimum enumerate the selectable pipeline sections and clarify its relationship to sibling tools.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for three undocumented parameters. capture_id and event_id are self-evident by name, and 'selected pipeline sections' loosely corresponds to the include array, but the allowed section values and the effect of omitting include (default null) are never explained.

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

Purpose3/5

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

It gives a verb (inspect) and a resource (pipeline sections for an event), so the general intent is inferable. But 'selected pipeline sections' is vague about what sections exist or what 'inspect' returns, and it does nothing to distinguish itself from siblings like get_event or get_pipeline_state.

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 explicit when-to-use guidance and no alternative named. The phrase 'in one serialized replay call' hints that this batches multiple fetches into a single replay, but the agent is left to infer when that matters versus calling get_event plus get_pipeline_state.

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

launch_programC

Launch and inject an allow-listed .exe through qrenderdoc/RenderDoc.

ParametersJSON Schema
NameRequiredDescriptionDefault
argumentsNo
executableYes
api_validationNo
working_directoryNo
hook_into_childrenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/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 yet only discloses that executables must be allow-listed and that injection occurs. It omits whether the call blocks until the target exits, what happens on a non-allow-listed binary, permission requirements, or how the launched process relates to the capture session.

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 no wasted words, and the key constraint (allow-listed) is placed early. It is efficient, though its brevity borders on under-specification for a five-parameter process-launch 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?

An output schema exists so return values need not be explained, but for a complex, unannotated five-parameter launcher the definition should still cover parameter meaning and launch/mutation behavior. As written it leaves the agent with critical gaps before invoking it.

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

Parameters1/5

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

Schema description coverage is 0% across five parameters, and the description names none of them. The meanings of arguments, api_validation, working_directory, and hook_into_children are entirely absent from both structured fields and prose, so it fails to compensate for the coverage gap.

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?

States a specific verb pair (launch/inject) and resource (an allow-listed .exe through qrenderdoc/RenderDoc), which is unambiguous about what the tool does. It does not explicitly differentiate itself from the capture-inspection siblings, but its purpose is far enough from open_capture/list_actions that an agent can identify it.

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 'allow-listed' qualifier gives an implicit prerequisite, but there is no statement of when to use this versus open_capture or close_capture, no note on whether it should precede capture analysis, and no when-not-to-use guidance.

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

list_actionsC

List capture actions with filtering and bounded cursor pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
limitNo
queryNo
cursorNo
flattenNo
capture_idYes
parent_event_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. "Bounded cursor pagination" hints at paging behavior, but nothing is said about ordering, auth/permission needs, default limits, or what flatten actually does to results.

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 compact sentence with no wasted words, and the core purpose is front-loaded. It is efficient, though so terse that brevity shades into under-specification.

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?

An output schema exists, so return values need not be explained, but a 7-parameter tool with zero schema coverage and no annotations needs far more description than one sentence. An agent cannot know what kind, flatten, or parent_event_id mean before calling.

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

Parameters2/5

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

Schema description coverage is 0% across 7 parameters, and the description only loosely gestures at filtering and cursor pagination. Key parameters like kind, flatten, parent_event_id, and capture_id are left entirely unexplained in both schema and description.

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?

States a specific verb and resource ("List capture actions") plus the scoping mode (filtering, cursor pagination). It does not distinguish itself from siblings such as get_event, inspect_event, or list_constant_buffers, so an agent can't fully route between lookup tools from this text alone.

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 when-to-use guidance, no prerequisites, and no mention of alternatives among the many sibling tools. Usage is only implied by the words "list capture actions."

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

list_constant_buffersC

List every shader-stage/block/array constant-buffer group with pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
event_idYes
capture_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/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. It discloses pagination, which is genuinely useful, but says nothing about read-only safety, required capture/event context, ordering, or failure behavior for a 4-parameter tool.

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 no filler; the scoping detail (shader-stage/block/array) is dense but each word earns its place. It could be marginally tighter but is well structured.

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?

An output schema exists so return values need not be explained, but the definition still omits the meaning of the required capture_id/event_id pair and any usage context for a list operation. For a tool with 0% parameter documentation, more is needed.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only gestures at pagination (implying limit/cursor) and never explains the two required parameters, capture_id and event_id, and what they must reference.

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?

Specific verb (list) plus a precise resource scope (shader-stage/block/array constant-buffer groups), which clearly separates it from the singular sibling get_constant_buffer. It stops short of explicitly naming that sibling or contrasting scope, so it is clear but not fully differentiated.

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 when-to-use guidance, no prerequisites, and no mention of alternatives such as get_constant_buffer for a single buffer. The agent must infer that this is the enumeration counterpart to the singular getter.

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

open_captureB

Open one allow-listed .rdc file and return a stable capture_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose one key behavioral constraint — only allow-listed .rdc files can be opened — plus the promise of a stable id. It omits error behavior for disallowed paths and lifecycle/resource implications (that a capture stays open until close_capture).

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?

One tight sentence, front-loaded with the operation and its scope, with zero filler.

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?

For a single-parameter opener with an output schema (so the capture_id return need not be explained), the description covers what it does and its main constraint. Adding the close_capture lifecycle or error conditions would make it fully complete.

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 0%, so the description must compensate; it adds that 'path' points to an allow-listed .rdc file, which is real meaning beyond 'string/Path'. It still gives no format, relative-vs-absolute, or example detail.

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?

Specific verb (open) plus a precise resource ('one allow-listed .rdc file'), and it even names the artifact it produces (capture_id). It does not explicitly contrast with close_capture or the inspection siblings, so it falls short of a 5.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus alternatives, nor any prerequisite/ordering guidance (e.g., that other capture tools need the returned capture_id, or that close_capture must follow). Usage is only weakly implied by the verb 'open'.

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. 13 tool updatesv0.1.0
    • First observedclose_capture
    • First observedget_capture_summary
    • First observedget_constant_buffer
    • First observedget_event
    • First observedget_pipeline_state
    • First observedget_shader
    • First observedget_vertex_data
    • First observedhealth
    • First observedinspect_event
    • First observedlaunch_program
    • First observedlist_actions
    • First observedlist_constant_buffers
    • First observedopen_capture

TDQS

B3.2/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have clearly distinct purposes across lifecycle, metadata, and inspection. However, get_event, inspect_event, and get_pipeline_state all operate on event IDs and pipeline data, creating some boundary overlap that could cause misselection in an agent.

Naming Consistency4/5

Nearly all tools follow a clean snake_case verb_noun pattern (open_capture, get_event, list_actions, get_constant_buffer). The lone 'health' deviates as a bare noun, but it is a widely recognized convention so the impact is minor.

Tool Count5/5

13 tools is well-scoped for a graphics debugging/replay server, with each tool earning its place across session lifecycle, event inspection, and pipeline/shader data retrieval. No redundancy or bloat.

Completeness4/5

Covers the core lifecycle (launch, open, close) plus rich inspection of actions, events, pipeline state, shaders, vertex data, and constant buffers. Minor gaps exist for resource/texture inspection or capture export, but core workflows are well covered.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers