shadow-monitor-mcp
This server lets AI agents inspect Shadow Monitor UAT session capture files (.json, .json.gz, or encrypted) locally via MCP tools.
Load & Validate Bundles: Use
load_bundleto load a capture file into memory, supporting encrypted bundles with a passphrase.check_bundlequickly verifies if a file is a valid Shadow Monitor bundle before loading.Bundle Overview: Get high-level aggregates with
bundle_overview, including error totals, network status/method breakdowns, slowest/largest requests, console levels, user-action kinds, and navigation timeline.Metadata: Retrieve lightweight metadata via
bundle_metadata—schema version, capture window, page info, user agent, QA/bug notes, and event counts.Find Errors:
find_errorslists network failures (failed/aborted/blocked, 4xx/5xx) and console errors (optionally warnings) in chronological order, with response body previews.Search Network Requests:
search_networkfilters requests by URL substring, HTTP method, status code range, failure flag, resource type, MIME type, body content, or minimum duration; supports pagination.Inspect a Network Request:
get_network_requestreturns full detail for a request by ID—headers, request/response bodies, with optional redaction of sensitive values.Inspect a Console Event:
get_console_eventprovides level, message/args, stack trace, and originating URL for a console event by ID.User Actions Timeline:
get_user_actionsreturns the full time-ordered list of clicks, navigations, form submissions, etc., optionally filtered by action type and source.Action Replay:
get_action_replayextracts rrweb events for a specific user-action step, enabling playback of that moment.Pre‑computed Semantics:
get_semanticsaccesses curated summaries (schema 2/3) including state at capture, error summaries, annotated user actions, network summary, and page navigations—ideal for rapid triage.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@shadow-monitor-mcpload my uat-capture file and find all errors"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
shadow-monitor-mcp
Open-source MCP server that lets any AI agent inspect Shadow Monitor capture files (uat-report-*.json.gz) — locally, with no upload.
Works with any client that speaks MCP over stdio: Cursor, Claude Desktop, Claude Code, Windsurf, VS Code Copilot Chat, Continue, Cline, Zed, and others.
Shadow Monitor (Chrome) records a UAT session
↓
you download uat-report-….json.gz
↓
this MCP server loads it for your AInpm |
|
GitHub | |
Claude one-click | |
Agent Skill |
|
License | MIT |
Needs | Node.js 20+ for the MCP (Chrome extension is separate) |
Companion: Shadow Monitor (Chrome extension)
This MCP does not record the browser. Capture comes from the extension:
Chrome Web Store | |
User guide | |
Homepage | |
Source | |
Support / Privacy |
Install the extension → add your UAT domain in Settings.
Hard-reload the tab (Cmd/Ctrl+Shift+R).
Reproduce the bug → Download → get
uat-report-*.json.gz(often underDownloads/uat-capture).
Related MCP server: Krometrail
MCP vs Skill (what you need)
Piece | What it is | Required? |
MCP server | The actual tools ( | Yes — without it the agent cannot inspect the file |
Agent Skill | A short playbook ( | No — but strongly recommended so the agent behaves correctly |
You can install them together (Option A) or separately (MCP via UI / .mcpb, skill via init or copy).
Install the MCP
You need Node.js 20+ once (download the LTS installer — click through; no coding required).
Option A — One command (MCP + skill together)
Open Terminal / PowerShell, paste, Enter:
npx -y shadow-monitor-mcp init --client allRegisters the server for Claude Desktop + Cursor + Claude Code and installs the Agent Skill. Then restart your AI app (Claude Desktop: fully quit with Cmd+Q).
Only one app? Use --client cursor, --client desktop, or --client claude-code.
Option B — UI / click (MCP only)
Claude Desktop — one-click .mcpb
Download shadow-monitor-mcp.mcpb
Double-click it, or Claude Desktop → Settings → Extensions → Install Extension…
Any MCP client — paste JSON
{
"mcpServers": {
"shadow-monitor": {
"command": "npx",
"args": ["-y", "shadow-monitor-mcp"]
}
}
}App | Where |
Cursor | Settings → Tools & MCP → add / edit MCP config |
Claude Desktop | Settings → Developer, or |
Others | Their MCP / custom-tools settings — same JSON |
Option C — From a git clone
cd shadow-monitor-mcp
npm install && npm run build && npm run init:allInstall the skill (optional, separate is fine)
The skill teaches Claude/Cursor to call load_bundle instead of raw-reading the report.
Claude Desktop (what you use in Customize → Skills)
~/.claude/skills/ is Claude Code only — Desktop does not list those files.
Run
npx -y shadow-monitor-mcp init --client desktop(orall) — it writes~/Downloads/shadow-monitor-bundles.zipClaude Desktop → Customize → Skills → Add → Upload a skill
Upload that ZIP → enable the skill
Ensure Settings → Capabilities → Code execution and file creation is on
Or zip manually: folder shadow-monitor-bundles/ containing SKILL.md.
Cursor / Claude Code (filesystem)
init also copies SKILL.md into:
Cursor →
~/.cursor/skills/shadow-monitor-bundles/Claude Code →
~/.claude/skills/shadow-monitor-bundles/
Use it
In any connected agent chat, paste an absolute path:
Investigate
/Users/you/Downloads/uat-capture/uat-report-2026-07-27T07-34-55-912Z.json.gzand show me what failed.
Expected flow: load_bundle → bundle_overview → find_errors → drill into network / console / actions.
Path must be absolute (
/Users/…orC:\Users\…).Don’t treat the
.json.gzname as a skill / slash-command.Encrypted exports: pass
passphrasetoload_bundle.
Tools
Tool | What it does |
| Cheap probe: is this path a workable Shadow Monitor |
| Load |
| Errors, slow requests, actions, navigation |
| Schema, page, window, counts |
| Network + console failures |
| Filter requests |
| Full request by id |
| Full console event by id |
| Click / navigate story timeline |
| rrweb slice for one action |
| Pre-computed semantics (schema 2/3) |
bundleId is optional when only one bundle is loaded.
Optional settings
Env | Effect |
| Smaller list responses (TOON) |
| Keep signed-URL params / auth headers raw |
Commands (developers)
Command | Purpose |
| Compile → |
| Register MCP + skill |
| Preview config, write nothing |
| Run MCP server (stdio) |
| Format / token tests |
| End-to-end against a report |
| Build |
npx -y shadow-monitor-mcp init --client all
npx -y shadow-monitor-mcp init --launch npx # client uses npx (default after npm install)
npx -y shadow-monitor-mcp init --launch local # client uses absolute dist/cli.js
npx -y shadow-monitor-mcp init --no-skill # MCP only
npx -y shadow-monitor-mcp init --printTroubleshooting
Problem | Fix |
| Package not on npm yet — use Option C from a clone, or the |
Server disconnected | Node 20+, restart the app, check MCP config / |
Claude Desktop ignores config | Fully quit (Cmd+Q) and reopen. |
Agent raw-reads the | Install the skill ( |
No report file | Install the Chrome extension first. |
Development
npm install
npm run build
npm start
npm testCapture format: shadow-monitor README · BUNDLE_FORMAT.md.
MIT — see LICENSE.
Available Tools
11 toolsbundle_metadataBundle metadataA
Lightweight metadata for a loaded bundle without any event data: schema version, generation time, page, capture window, counts, capture-start context (URL, title, user agent), userDescription (QA bug note), page.navigation / color scheme, journey session list, and load info.
| Name | Required | Description | Default |
|---|---|---|---|
| bundleId | No | Bundle handle from load_bundle. Optional when exactly one bundle is loaded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It accurately states the tool returns metadata without event data, but omits important context such as that the bundle must be loaded (implied by 'loaded bundle') and that bundleId is optional if only one bundle is loaded. These are behavioral constraints that should be explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that lists many fields, which is efficient but could be more readable with structure (e.g., bullet points). No irrelevant information, earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides a solid overview of return fields (schema version, generation time, etc.), covering the main components. It is fairly complete for a metadata tool, though some field details (e.g., what counts include) are implied rather than explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (single optional bundleId with description). The tool description adds no extra meaning beyond the schema's own parameter description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves 'lightweight metadata for a loaded bundle without any event data' and enumerates specific fields, effectively distinguishing it from sibling tools like bundle_overview or those that return events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives; the description simply lists what it returns. It does not specify context like 'use for a quick summary before fetching events' or mention that a bundle must be loaded first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bundle_overviewBundle overviewA
High-level aggregates for a loaded bundle: page, capture window, event counts, network status/method breakdown, slowest and largest requests, error totals, console levels, user-action kinds, and the navigation timeline. Prefers the bundle's pre-computed semantics when present (schema 2/3); falls back to scanning events for schema 1. Use this first to orient before drilling in.
| Name | Required | Description | Default |
|---|---|---|---|
| bundleId | No | Bundle handle from load_bundle. Optional when exactly one bundle is loaded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses internal behavior: prefers pre-computed semantics (schema 2/3) and falls back to scanning events for schema 1. This goes beyond basic read-only indication and helps agents understand performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey purpose, internal behavior, and usage guidance. No redundant information; every phrase adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description lists all major aggregates (page, capture window, network breakdown, errors, etc.) so agents know exactly what to expect. The fallback behavior adds completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description adds no extra parameter details. The bundleId parameter is well-documented in the schema, so the description doesn't need to augment it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides 'high-level aggregates for a loaded bundle' and lists specific metrics (page, capture window, event counts, etc.), distinguishing it from sibling tools that focus on individual aspects (e.g., find_errors, get_network_request).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to 'Use this first to orient before drilling in', giving clear usage context. While it doesn't list exclusions or alternatives, the guidance is strong enough to imply this is the starting point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_bundleCheck if a file is a Shadow Monitor bundleA
Cheap probe of a local path: does it look like a workable Shadow Monitor diagnostic export (.json or .json.gz, any folder/name)? Returns workable / looksLikeShadowMonitor, encoding, encrypted, schemaVersion, and hints. Does not index events — use before load_bundle when the path is unfamiliar, or when load_bundle might fail.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or relative path to a candidate file. | |
| passphrase | No | Optional passphrase if the file may be an encrypted export. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It discloses it is a cheap probe, does not index events, and returns specific fields. Does not mention side effects (likely none) or permissions, but is transparent about its scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with critical information front-loaded. Every sentence serves a purpose: first states function and return, second clarifies non-indexing and usage hint. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists return fields. It covers behavior (no indexing) and usage. Does not mention error cases or format of return, but is sufficient for a simple probe tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds little beyond schema: it rephrases path as 'local path' and mentions optional passphrase for encrypted exports. No additional semantic depth.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it checks if a local path is a workable Shadow Monitor diagnostic export (with specific file extensions) and lists the return fields. It distinguishes itself from 'load_bundle' by positioning as a preliminary probe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'use before load_bundle when the path is unfamiliar, or when load_bundle might fail', providing clear context. Does not explicitly exclude other siblings, but the guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_errorsFind errorsA
Return network and console errors in time order. Network errors are failed/aborted requests, blocked (status 0), and 4xx/5xx responses (phase:"start" begin-markers are excluded). Console errors are level matching /error/i or uncaught===true (and level=warn when includeWarnings is true). Each row carries the event id (string like "e_3069") for get_network_request / get_console_event. Network rows include responseBodyPreview so API error messages are visible without a detail call.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows. Default 50. | |
| bundleId | No | Bundle handle from load_bundle. Optional when exactly one bundle is loaded. | |
| includeWarnings | No | Also include console warnings (level=warn). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses error definitions, row structure including event ID and responseBodyPreview, and optionality of bundleId. It explains behavior but omits pagination or ordering details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four well-structured sentences front-load the main purpose, then detail error definitions and row format. No redundant or unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers error definitions, row structure, and parameter context well. Missing explicit output format and ordering direction, but overall adequate for a 3-param tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description adds context: bundleId's optionality when one bundle loaded, includeWarnings meaning, and references to load_bundle. It doesn't add to limit beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns network and console errors in time order, defines each error type explicitly, and distinguishes from sibling tools by mentioning event IDs for get_network_request/get_console_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use (for chronological error list) and hints at alternative tools (detail calls via event ID), but lacks explicit don't-use guidance or comparison with search_network.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_action_replayGet action replay (rrweb slice)A
Return the raw rrweb events for one user-action step, with the FullSnapshot anchor prepended so a viewer can render just that step. Pass actionId (from get_user_actions) or explicit fromTs/toTs. This can be large — optional maxEvents caps the returned list. Does not change get_user_actions (which only returns the lightweight rrweb window pointer).
| Name | Required | Description | Default |
|---|---|---|---|
| toTs | No | Explicit window end (epoch ms). | |
| fromTs | No | Explicit window start (epoch ms). | |
| actionId | No | Action id / sourceId from get_user_actions. | |
| bundleId | No | Bundle handle from load_bundle. Optional when exactly one bundle is loaded. | |
| maxEvents | No | Cap on returned rrweb events. Default: no cap. | |
| actionIndex | No | 0-based index into semantics.userActions (alternative to actionId). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the size warning and that it doesn't alter get_user_actions. However, it omits idempotency, error handling, or authorization needs. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences with no fluff. Front-loaded with purpose, then parameter guidance and behavioral notes. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, no annotations, and no output schema, the description covers identification methods, size mitigation, and relationship to get_user_actions. Missing return value specifics (e.g., FullSnapshot details) but acceptable given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context: actionId references get_user_actions, fromTs/toTs are explicit timestamps, bundleId is optional when one bundle loaded, actionIndex is an alternative 0-based index into semantics.userActions. This meaningfully supplements the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns raw rrweb events for a user-action step with FullSnapshot anchor prepended. It distinguishes from sibling get_user_actions, which only returns lightweight pointers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear guidance on how to identify the step: pass actionId from get_user_actions or explicit fromTs/toTs. Mentions optional maxEvents for large output. Lacks explicit when-not-to-use or alternatives beyond the one sibling mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_console_eventGet console eventA
Return the full detail of one captured console event by its event id (string like "e_3068", or bare number). Includes level, message/args, stack trace, and originating URL.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Event id from a search/find_errors row (string like "e_5", or legacy number). | |
| redact | No | Override field hygiene for this call. Default: on. | |
| bundleId | No | Bundle handle from load_bundle. Optional when exactly one bundle is loaded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses returned fields (level, message/args, stack trace, URL), which is helpful. However, it does not state that the operation is read-only or has no side effects, which would be useful for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action. Every sentence earns its place, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers the key outcome and fields. It could slightly improve by stating the return format (e.g., object), but it is sufficiently complete for an agent to understand the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). The description adds value by explaining id format (string like 'e_3068' or bare number) and its origin from search results. It also clarifies that redact overrides field hygiene, adding context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns full detail of one console event by event id. It uses a specific verb ('Return') and resource ('console event detail'), and distinguishes from siblings like find_errors (listing) and get_network_request (different event type).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after search/find_errors (id from a row), but does not explicitly state when to use or not use this tool versus alternatives. No exclusion criteria or comparison to siblings is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_requestGet network requestA
Return the full detail of one captured network request by its event id (pass the string id from find_errors/search_network, e.g. "e_3069"; bare numbers like 3069 are also accepted). Includes headers and request/response bodies. Very large bodies are truncated with the original length noted. Signed-URL params and sensitive headers are redacted by default; pass redact=false to see raw values.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Event id from a search/find_errors row (string like "e_5", or legacy number). | |
| redact | No | Override field hygiene for this call. Default: on. | |
| bundleId | No | Bundle handle from load_bundle. Optional when exactly one bundle is loaded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and discloses key behaviors: includes headers/bodies, truncation with original length noted, and redaction with optional override. It lacks detail on error handling or authorization, but covers major traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with efficient structure. First sentence states main purpose, subsequent sentences add key details. No redundant or wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers what is returned (headers, bodies) and important behaviors (truncation, redaction). It lacks details on error responses or exact return format, but is sufficient for a focused detail tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3). The description adds practical examples for the id parameter (e.g., 'e_3069', bare numbers accepted), clarifies redact behavior ('pass redact=false'), and explains bundleId optionality. This adds clear value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool returns the full detail of one captured network request by event id. It specifies included content (headers, bodies) and references sibling tools find_errors and search_network, distinguishing itself effectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs to use event ids from find_errors or search_network, providing clear context for when to use this tool. However, it does not explicitly exclude alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_semanticsGet bundle semanticsA
Return the bundle's pre-computed semantics block when present (schema 2/3): stateAtCapture (last click target, last error, window), errorSummary (curated console/network failures), userActions (with text/selector/label), networkSummary, and pageNavigations. Prefer this for UAT triage orientation; use find_errors / get_* for per-event drill-down.
| Name | Required | Description | Default |
|---|---|---|---|
| bundleId | No | Bundle handle from load_bundle. Optional when exactly one bundle is loaded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries behavior disclosure burden. It notes the block is 'when present' and lists returned fields, implying safe read operation. Lacks explicit statement of side effects, but read nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words: first sentence lists content, second sentence provides usage alternatives. Front-loaded with key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no output schema, description fully covers what the tool returns (listing fields) and when to use it. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, so baseline is 3. Description does not add parameter details beyond schema, which is acceptable as schema already explains bundleId's purpose and optionality.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns the bundle's pre-computed semantics block, listing specific fields (stateAtCapture, errorSummary, etc.). Distinguishes from siblings by advising to use find_errors/get_* for detailed drill-down.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using this tool for UAT triage orientation and directs to alternative tools (find_errors, get_*) for per-event analysis, providing clear when-to-use and 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.
get_user_actionsGet user actionsA
Return the full time-ordered user-action timeline (never just the last action — that lives on stateAtCapture.lastUserAction / bundle_overview). DEFAULT types are the story timeline: click, submit, navigate, toggle, select (plus dblclick/contextmenu/page_load) — NOT raw text inputs. Pass types:["input"] explicitly to see keystroke commits. source "auto" (default) uses semantics.userActions only when that list is genuinely populated (≥3 story actions, or the bundle has type:"action" events); otherwise reconstructs from rrweb so today's thin-semantics bundles still get the full ~20-row story. Explicit source "semantics" / "rrweb" force one path. Response includes actionsSource: "semantics" | "rrweb". Each action includes an rrweb window { fromTs, toTs, anchorId } for get_action_replay. Default limit 50.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 50. | |
| types | No | Filter to these kinds. Default (story view): click, dblclick, contextmenu, submit, navigate, page_load, toggle, select. Text inputs are excluded unless you pass types:["input"]. Scroll / mousedown / focus need an explicit types request on the rrweb path. | |
| offset | No | Default 0. | |
| source | No | Action source: "auto" (default — rich semantics.userActions when available, else full rrweb timeline), "semantics" (force pre-computed list), or "rrweb" (force replay derivation). Never returns only lastUserAction. | |
| bundleId | No | Bundle handle from load_bundle. Optional when exactly one bundle is loaded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: never last action, default types, source auto logic with thresholds, explicit source options, response includes actionSource, and each action includes rrweb window. No annotations to contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is information-dense but front-loaded with main purpose. Every sentence adds value, though slightly dense for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a read tool: covers default behavior, all parameters, response structure, and integration with other tools (get_action_replay). No output schema needed as return values are described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds value by explaining default types, source auto decision logic, and clarifying that types exclude raw text inputs by default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns the full user-action timeline, distinguishes from sibling tools like bundle_overview which gives last action, and mentions get_action_replay for replay windows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to use this tool (full timeline vs last action) and how to filter by types or source, but does not explicitly exclude other use cases or name alternative tools beyond last action reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_bundleLoad a Shadow Monitor bundleA
Load and index a Shadow Monitor diagnostic bundle from a local file path. Handles plain JSON, gzip (.json.gz), and per-bundle encrypted exports (supply passphrase for the latter). Returns a bundleId used by the other tools, plus a quick summary. Loading the same path twice reuses the existing handle unless reload is true.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or relative path to the bundle file. | |
| reload | No | Re-read from disk even if this path is already loaded. | |
| bundleId | No | Optional explicit handle. Auto-generated when omitted. | |
| passphrase | No | Decryption passphrase, required only for encrypted bundles. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses format handling, reuse on same path unless reload=true, and the need for a passphrase. However, with no annotations provided, it omits potential side effects (e.g., memory usage), error conditions, or permission requirements. The level of detail is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states the core action and returns, second clarifies reuse and reload. Information is front-loaded and every sentence contributes meaningfully. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers input formats, return of bundleId and summary, and reload behavior. It does not detail the summary contents or error scenarios, but for a load tool these are secondary. The description feels comprehensive for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value beyond schema by explaining when `passphrase` is needed (encrypted bundles) and the `reload` parameter's effect on handle reuse. This enhances understanding of parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool loads and indexes a Shadow Monitor diagnostic bundle from a local file path, specifying supported formats (JSON, gzip, encrypted) and the return of a bundleId and summary. This differentiates it from sibling tools by positioning it as the entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the bundleId is used by other tools, suggesting this should be called first, but it lacks explicit when-to-use or when-not-to-use guidance (e.g., 'use this before bundle_metadata'). No alternative strategies are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_networkSearch network requestsA
Filter the captured network requests and return compact rows (id, time, method, status, url, duration, type, size). Combine any filters: urlContains, method, exact status or statusMin/statusMax, failed, resourceType, mimeType, bodyContains (searches request + response bodies), minDurationMs. Filters match the raw captured values; displayed urls are field-hygiened. Paginate with limit/offset. Fetch full detail with get_network_request using a row's id (string like "e_3069").
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 50. | |
| failed | No | Only failed/blocked requests. | |
| method | No | Case-insensitive exact match, e.g. POST. | |
| offset | No | Default 0. | |
| status | No | Exact status code. | |
| bundleId | No | Bundle handle from load_bundle. Optional when exactly one bundle is loaded. | |
| mimeType | No | Substring match on response mime type. | |
| statusMax | No | ||
| statusMin | No | ||
| urlContains | No | ||
| bodyContains | No | Case-insensitive search across request/response bodies. Short numeric needles (1–4 digits, e.g. "403") use word-boundary matching to avoid UUID/hex false positives; longer text uses substring match. | |
| resourceType | No | e.g. xhr, fetch, script, document. | |
| minDurationMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that filters match raw values, displayed URLs are field-hygiened, and the row id format (e.g., 'e_3069'). It doesn't mention auth needs or rate limits, but for a search tool these are reasonable omissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with core purpose. The second sentence lists filters compactly, but could be better structured (e.g., bullet points or grouping). Still, it's concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 13 optional parameters and no output schema, the description covers return format, filter combination, pagination, and cross-reference to get_network_request. It doesn't specify default sorting or empty-result behavior, but overall it's sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 69%, the description adds value by summarizing filter options and providing special behavior details (e.g., word-boundary matching for bodyContains numeric needles). This goes beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Filter' and the resource 'captured network requests', specifies the compact rows returned (id, time, method, status, etc.), and distinguishes from sibling tool get_network_request which fetches full detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to combine filters and paginate with limit/offset, and directs users to get_network_request for full details. However, it doesn't explicitly state when not to use this tool or mention alternatives like find_errors for error-focused searches.
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. Dates show when Glama detected each change.
1 tool update
v1.0.2- Added
check_bundle
10 tool updates
v1.0.1- First observed
bundle_metadata - First observed
bundle_overview - First observed
find_errors - First observed
get_action_replay - First observed
get_console_event - First observed
get_network_request - First observed
get_semantics - First observed
get_user_actions - First observed
load_bundle - First observed
search_network
TDQS
Each tool targets a distinct aspect of the diagnostic bundle: loading, overview, errors, network, console, user actions, replay, and semantics. There is no overlap; every tool has a clear and separate purpose.
Most tools follow a consistent verb_noun pattern (e.g., load_bundle, find_errors, get_network_request), but bundle_metadata and bundle_overview use noun_noun, introducing a slight inconsistency. Overall, the pattern is clear and predictable.
With 10 tools, the set is well-scoped for a diagnostic bundle analysis server. Each tool fills a necessary role without redundancy or bloat, covering loading, overview, detailed inspection, and replay.
The tool set covers the core workflows of loading, overview, error analysis, network/console inspection, user actions, and replay. Minor gaps exist, such as a lack of a full event search, but the essential functionality for analysis is present.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Debug webhooks from your AI agent: inspect and replay captured webhooks on localhost.
AI agent run monitoring with incident replay and SLA receipts.
Synthetic checks, nightly regression replay and model-drift alerts for AI agents
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables AI agents to debug code and automate browsers using Chrome DevTools Protocol, supporting breakpoints, variable inspection, and replayable interaction recording.3533916MIT
- AlicenseNot gradedqualityAmaintenanceGives AI coding agents eyes into running applications by recording browser activity and providing session investigation tools for debugging.123MIT
- AlicenseBqualityCmaintenanceEnables AI agents to inspect and control a live Chromium browser for frontend debugging, providing console logs, network requests, DOM snapshots, and accessibility analysis.198MIT
- AlicenseAqualityBmaintenanceEnables AI coding assistants to visually inspect local web pages by providing screenshots, console errors, and sanitized DOM snapshots.18MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/yurii-mandzii/shadow-monitor-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server