playwright-network-chaos-mcp
Allows blocking Google Analytics requests to test app resilience when analytics scripts are unavailable.
Allows blocking Hotjar requests to test app resilience when tracking scripts are unavailable.
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., "@playwright-network-chaos-mcpSimulate payment API failure and check error toast"
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.
playwright-network-chaos-mcp πΈπ₯
An MCP server that gives AI agents dynamic network chaos control over Playwright browser sessions.
Your tests run on perfect networks. Your users don't. This MCP lets AI agents simulate API outages, inject latency, drop connections mid-flight, and block third-party resources β then assert whether the app handles it gracefully.
π€ The Problem
CI environments have flawless connectivity. APIs respond in milliseconds. CDNs never go down. So your tests pass β and then production breaks when the payment service returns a 503, the network drops mid-checkout, or Google Analytics hangs for 8 seconds and freezes the page.
AI agents writing Playwright tests have no way to introduce or reason about network instability. They can't ask:
π Does the checkout page show an error state when the payment API fails?
π Does the skeleton loader appear while the dashboard API is slow?
π Does the app still work if all tracking scripts are blocked?
π What happens if the network drops after the order is submitted but before the response arrives?
playwright-network-chaos-mcp fixes that.
Related MCP server: MCP Playwright Server
π οΈ Tools
simulate_api_failure
Intercepts requests matching a pattern and forces them to return an error status code. Checks if the app shows a fallback UI.
{
"url": "https://your-app.com/checkout",
"intercept_pattern": "**/api/payment**",
"status_code": 503,
"fallback_selector": ".error-boundary",
"wait_ms": 2000
}{
"intercepted_count": 2,
"fallback_found": true,
"fallback_selector": ".error-boundary",
"page_state": {
"page_errors": [],
"console_errors": ["Failed to load resource: 503"]
}
}inject_latency
Adds artificial delay to matching requests. Checks if loading states appear while the app waits.
{
"url": "https://your-app.com/dashboard",
"intercept_pattern": "**/api/**",
"latency_ms": 3000,
"jitter_ms": 500,
"loading_selector": ".skeleton-loader"
}{
"intercepted_count": 4,
"intercepted_requests": [
{ "url": "https://api.your-app.com/users", "method": "GET", "delay_ms": 3241 }
],
"loading_state_found": true,
"load_time_ms": 3890
}block_resources
Aborts requests to specified URL patterns β for testing third-party outages (analytics, CDNs, tracking pixels).
{
"url": "https://your-app.com",
"block_patterns": ["**/analytics**", "*.doubleclick.net/**", "**/hotjar**"],
"core_content_selector": ".main-content",
"wait_ms": 2000
}{
"blocked_count": 7,
"blocked_urls": ["https://www.google-analytics.com/analytics.js", "..."],
"core_content_found": true,
"page_state": { "page_errors": [], "console_errors": [] }
}simulate_network_drop
Aborts requests mid-flight after a delay β simulating connection loss between request and response.
{
"url": "https://your-app.com/checkout",
"intercept_pattern": "**/api/order**",
"drop_after_ms": 800,
"fallback_selector": ".network-error-toast",
"wait_ms": 3000
}{
"intercepted_count": 1,
"fallback_found": true,
"fallback_selector": ".network-error-toast",
"page_state": { "page_errors": ["TypeError: Failed to fetch"] }
}trigger_system_network_error
Aborts requests with an OS-level error code β simulating DNS failures, firewall blocks, and connection resets.
{
"url": "https://your-app.com/dashboard",
"intercept_pattern": "**/api/**",
"error_code": "addressunreachable",
"fallback_selector": ".network-error"
}{
"error_code": "addressunreachable",
"intercepted_count": 3,
"fallback_found": true,
"page_state": { "page_errors": [], "console_errors": ["net::ERR_ADDRESS_UNREACHABLE"] }
}simulate_stateful_failure
Fails the first N requests then lets subsequent ones succeed β testing retry logic and recovery flows.
{
"url": "https://your-app.com/dashboard",
"intercept_pattern": "**/api/data**",
"http_status": 503,
"failure_count": 2,
"success_payload": "{\"data\":[]}",
"fallback_selector": ".retry-button"
}{
"failure_count": 2,
"actual_failed": 2,
"actual_succeeded": 1,
"intercepted_requests": [
{ "url": "...", "method": "GET", "status": 503, "attempt": 1, "outcome": "failed" },
{ "url": "...", "method": "GET", "status": 200, "attempt": 3, "outcome": "passed" }
],
"fallback_found": true
}inject_response_corruption
Serves malformed responses at the protocol level β unterminated JSON, content-length lies, or truncated payloads.
{
"url": "https://your-app.com/checkout",
"intercept_pattern": "**/api/order**",
"corruption_type": "malformed_json",
"fallback_selector": ".parse-error"
}{
"corruption_type": "malformed_json",
"intercepted_count": 1,
"fallback_found": false,
"page_state": { "page_errors": ["SyntaxError: Unexpected token u in JSON"] }
}assert_chaos_handled
Injects a chaos HTTP status and returns a structured pass/fail verdict β chaos_survived is true only when the fallback UI appears and there are no unhandled JS exceptions.
{
"url": "https://your-app.com/checkout",
"intercept_pattern": "**/api/**",
"http_status": 500,
"expected_fallback_selector": ".error-boundary"
}{
"http_status": 500,
"unhandled_exceptions": [],
"console_errors": ["Failed to load resource: 500"],
"fallback_ui_detected": true,
"chaos_survived": true
}π Installation
npx playwright-network-chaos-mcpOr install globally:
npm install -g playwright-network-chaos-mcp
npx playwright install chromiumClaude Desktop config
{
"mcpServers": {
"playwright-network-chaos-mcp": {
"command": "npx",
"args": ["-y", "playwright-network-chaos-mcp"]
}
}
}π‘ Example Agent Prompts
"Check if the checkout page shows a proper error state when the payment API returns 503"
"Simulate a 3 second API delay on the dashboard and verify the skeleton loader appears"
"Block all analytics and tracking scripts and confirm the main content still loads"
"Drop the order submission request mid-flight and check if the user sees an error message"
"Simulate DNS failure for the API and check if the error boundary renders"
"Fail the first 3 requests then succeed β does the app retry and recover automatically?"
"Inject malformed JSON and assert the app doesn't crash β return a chaos verdict"
π Related Projects
playwright-trace-decoder-mcp β root-cause analysis of CI failures from Playwright traces
flakiness-knowledge-graph-mcp β knowledge graph of flaky test patterns
ast-impact-mapper-mcp β find affected tests from code changes via TypeScript AST
zod-contract-mock-forge-mcp β deterministic mock generation from Zod schemas
playwright-spatial-layout-mcp β geometric spatial awareness of web layouts
π License
MIT Β© vola-trebla
Available Tools
8 toolsassert_chaos_handledA
Injects a chaos HTTP status into all matching requests, then returns a structured verdict: did the app show a fallback UI, were there unhandled JS exceptions, and did it survive? Use to answer: is the app chaos-resilient β does it show a recovery UI without throwing exceptions?
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the page to test | |
| wait_ms | No | Milliseconds to wait after navigation before evaluating verdict (default: 2000) | |
| viewport | No | Viewport size (default: 1280Γ720) | |
| http_status | No | HTTP error status to return for all matching requests (default: 500) | |
| intercept_pattern | Yes | Glob pattern for requests to fail (e.g., '**/api/**') | |
| expected_fallback_selector | No | CSS selector for the fallback/error UI expected to appear (e.g., '.error-boundary'). chaos_survived is true only when this is found AND there are no unhandled exceptions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the injection of chaos status, the evaluation dimensions (fallback UI, unhandled exceptions, survival), and implies a structured verdict. It adds context beyond the schema, though it stops short of detailing the exact verdict shape or side effects like browser navigation.
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 focused sentences: the first describes the mechanism and verdict, the second gives a direct use case. No redundancy, front-loaded with the most critical information, and every word 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?
The tool has no output schema, so the description compensates by summarizing the structured verdict (fallback UI, unhandled exceptions, survival). It covers the central use case and key behavior. It leaves some detailsβlike the exact return fieldsβto inference, but for an assertion tool this is reasonably 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?
The input schema has 100% parameter coverage with detailed descriptions, including defaults and logic for expected_fallback_selector. The tool description adds minimal extra meaning beyond a high-level flow, so it meets the baseline but does not significantly improve parameter understanding.
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 a specific action: injects a chaos HTTP status into matching requests, then returns a verdict on resilience. It distinguishes from sibling tools by emphasizing assertion/evaluation rather than just failure injection, naming the verdict components (fallback UI, unhandled JS exceptions, survival).
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 explicitly tells when to use: 'Use to answer: is the app chaos-resilient β does it show a recovery UI without throwing exceptions?' This gives clear context, though it does not explicitly contrast with sibling tools 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.
block_resourcesA
Blocks requests to specified URL patterns β useful for simulating third-party outages (analytics, CDNs, tracking). Use to answer: does the app still load and function if Google Analytics or a CDN is down?
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the page to test | |
| wait_ms | No | Milliseconds to wait after navigation before checking core content (default: 2000) | |
| viewport | No | Viewport size (default: 1280Γ720) | |
| block_patterns | Yes | Glob patterns for requests to block (e.g., ['**/analytics**', '*.doubleclick.net/**']) | |
| core_content_selector | No | CSS selector for core content that must still be present (e.g., '.main-content') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the primary behavior (blocking requests) and implies a post-block content check via core_content_selector, but it doesn't disclose the return format, how success/failure is signaled, or whether the block is temporary and scoped to the test. The description adds some behavioral context but not enough for a tool with no annotations.
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, and the second sentence provides a practical use case. Every phrase earns its place, with no redundancy or unnecessary detail.
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 explains the 'why' and gives a clear scenario, but it doesn't specify what the tool returns or how it communicates success/failure after blocking requests. Given that there is no output schema and no annotations, the description should do more to describe execution outcomes. However, the schema covers parameter constraints well, and the tool's purpose is well-articulated, so it's adequate but incomplete.
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?
The schema description coverage is 100%, so the baseline is 3. The description adds high-level context (e.g., simulating third-party outages) but doesn't explain parameter interactions or nuances beyond what the schema already provides. The schema's own descriptions, including examples for block_patterns, are already detailed, so the description adds marginal value.
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 uses a specific verb ('Blocks') and resource ('requests to specified URL patterns'), and immediately distinguishes itself from siblings by focusing on selectively blocking third-party resources like analytics/CDNs. It also provides a concrete use-case scenario, making the tool's purpose immediately clear.
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 explicitly states when to use the tool: 'useful for simulating third-party outages' and gives a concrete question it can answer. It doesn't explicitly mention when not to use it or name alternative tools, but the context is clear enough to guide selection among the sibling chaos tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inject_latencyA
Adds artificial delay to requests matching a URL pattern, simulating slow networks or overloaded APIs. Use to answer: does the app show loading states when the API takes 3 seconds? Does it time out gracefully?
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the page to test | |
| viewport | No | Viewport size (default: 1280Γ720) | |
| jitter_ms | No | Random additional delay in milliseconds (default: 0) | |
| latency_ms | No | Base delay in milliseconds to add to each matched request (default: 3000) | |
| loading_selector | No | CSS selector for the loading state that should appear (e.g., '.skeleton-loader') | |
| intercept_pattern | Yes | Glob pattern for requests to delay (e.g., '**/api/**') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states the action (adding artificial delay) and its purpose (simulating slow networks/overloaded APIs), but does not disclose details like reversibility, session scope, cleanup, or impact on subsequent requests. It is not misleading, but leaves out behavioral nuances expected for a network-interception tool.
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 core action, followed by concrete use-case questions. It is concise, zero waste, and 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?
Given 6 parameters, a nested viewport object, and no output schema, the description provides essential purpose and use cases but does not explain the interplay between latency_ms and jitter_ms, the role of loading_selector, or potential side effects. It is adequate for selection but not fully complete for invocation without relying on schema details.
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 the schema already documents all six parameters thoroughly. The description does not add parameter-specific meaning beyond mentioning 'URL pattern' (which relates to intercept_pattern). Baseline 3 is appropriate since the schema does the heavy lifting, and the description adds minimal unique value.
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's function with a specific verb ('Adds artificial delay') and resource ('requests matching a URL pattern'). It distinguishes itself from sibling tools like simulate_api_failure or block_resources by focusing on latency injection rather than errors or blocking.
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 concrete use cases ('Does the app show loading states when the API takes 3 seconds? Does it time out gracefully?'), giving clear context for when to use this tool. It does not explicitly mention alternatives or exclusions, but the use cases are specific enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inject_response_corruptionA
Intercepts requests matching a URL pattern and returns a malformed or corrupted response, simulating partial network failures at the protocol level. Use to answer: does the app handle malformed JSON, content-length lies, or truncated payloads without crashing?
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the page to test | |
| wait_ms | No | Milliseconds to wait after navigation before checking state (default: 2000) | |
| viewport | No | Viewport size (default: 1280Γ720) | |
| corruption_type | Yes | Type of corruption: malformed_json (unterminated JSON body), length_mismatch (content-length claims 99999 bytes but body is short), truncated (body cut off at truncate_at_byte) | |
| truncate_at_byte | No | Byte offset to truncate at (only used when corruption_type is truncated) | |
| fallback_selector | No | CSS selector for the fallback UI that should appear (e.g., '.parse-error') | |
| intercept_pattern | Yes | Glob pattern for requests to corrupt (e.g., '**/api/data**') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It explains the core behavior (intercepting and corrupting responses) but does not mention potential side effects, cleanup, or whether the corruption affects subsequent requests. This is adequate but not comprehensive.
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 purpose and followed by a concrete use-case question. Every word earns its place with no redundancy.
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 purpose and usage, and the schema handles parameter semantics. However, there is no output schema and the description does not explain return values or how the fallback_selector is used, leaving some ambiguity about what the agent should expect after invocation.
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 description coverage is 100%, so the schema fully documents all parameters. The description reinforces the conceptual meaning of corruption types but adds little beyond the schema's own parameter 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 tool's function: intercepting requests and returning malformed or corrupted responses. It also distinguishes this tool from siblings by specifying protocol-level corruption such as malformed JSON, content-length lies, and truncated payloads.
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 an explicit use case ('Use to answer: does the app handle...?'), giving clear context for when to apply the tool. It does not explicitly name alternatives or exclusions, but the guidance is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_api_failureA
Intercepts API requests matching a URL pattern and makes them return an error status code. Navigates to the page and checks if a fallback UI element appears. Use to answer: does the app show a proper error state when the payment API returns 503?
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the page to test | |
| wait_ms | No | Milliseconds to wait after navigation before checking the fallback (default: 2000) | |
| viewport | No | Viewport size (default: 1280Γ720) | |
| status_code | No | HTTP error status code to return (default: 503) | |
| response_body | No | Response body to return for intercepted requests | {"error":"Service Unavailable"} |
| fallback_selector | No | CSS selector for the fallback UI that should appear (e.g., '.error-boundary') | |
| intercept_pattern | Yes | Glob pattern for requests to intercept (e.g., '**/api/payment**') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It explains the core behavior (intercept, return error, navigate, check fallback) but does not disclose potential side effects (e.g., whether the interception persists, whether the browser session is cleaned up, or if the tool is safe for production use). This is basic but not exhaustive transparency.
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, and free of filler. Every sentence earns its place: the first defines the mechanism, the second defines the verification step and a concrete use case.
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 tool is complex (7 params, no output schema) and the description does not explain what the tool returns or how to interpret the result (e.g., whether it returns a boolean or a report). The parameter schema is rich, and the description covers the high-level flow, but the missing return-value information leaves a gap in 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 description coverage is 100%, so the baseline is 3. The description adds the example 'payment API returns 503' which clarifies the intended values for status_code and intercept_pattern, but it does not elaborate on parameter semantics beyond what the schema already provides. No extra value to justify a higher score.
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 a specific action ('Intercepts API requests matching a URL pattern and makes them return an error status code') followed by the testing flow ('Navigates to the page and checks if a fallback UI element appears'). It distinguishes itself from siblings like inject_latency or block_resources by focusing on fault injection plus UI verification.
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 gives a clear use case: 'Use to answer: does the app show a proper error state when the payment API returns 503?' This implies when the tool should be used. However, it does not explicitly mention when not to use it or name alternative tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_network_dropA
Aborts requests matching a pattern after a delay, simulating a mid-flight connection drop. Use to answer: what happens if the network drops after the order request is sent but before the response arrives?
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the page to test | |
| wait_ms | No | Milliseconds to wait after navigation before checking fallback (default: 2000) | |
| viewport | No | Viewport size (default: 1280Γ720) | |
| drop_after_ms | No | Milliseconds to wait before aborting the request, simulating mid-flight drop (default: 500) | |
| fallback_selector | No | CSS selector for the fallback UI that should appear (e.g., '.timeout-error') | |
| intercept_pattern | Yes | Glob pattern for requests to drop (e.g., '**/api/order**') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the core behavior (aborting requests after a delay) but omits the fallback verification feature (fallback_selector) and any potential side effects. This is a clear gap, as the schema indicates the tool can check for a fallback UI, which is an important behavioral trait.
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 core action and followed by a concrete use-case example. There is no redundant information or irrelevant filler.
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 fails to mention the fallback checking behavior implied by fallback_selector and does not describe the overall workflow (load, drop, verify). With six parameters, no output schema, and no annotations, the description is too sparse to fully guide an agent on what the tool does end-to-end.
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?
The schema covers all parameters with descriptions (100% coverage), so the description doesn't need to repeat them. It adds minimal value beyond the schema, though the example scenario helps illustrate the purpose of intercept_pattern and drop_after_ms. Baseline 3 is appropriate given the schema coverage.
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 uses a specific verb ('aborts') and resource ('requests matching a pattern') and clearly states the behavior in the first sentence. It is easily distinguished from sibling tools like inject_latency (delays only) and block_resources (blocks immediately) by describing a delayed mid-flight drop.
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 second sentence provides explicit context: 'Use to answer: what happens if the network drops after the order request is sent but before the response arrives?' This clearly indicates when the tool is appropriate, but it does not mention alternatives or 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.
simulate_stateful_failureA
Intercepts requests matching a URL pattern and fails the first N requests with an error status, then lets subsequent requests succeed. Simulates transient failures and tests retry/recovery logic. Use to answer: does the app retry after a 503 and recover when the service comes back?
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the page to test | |
| wait_ms | No | Milliseconds to wait after navigation before checking state (default: 2000) | |
| viewport | No | Viewport size (default: 1280Γ720) | |
| http_status | No | HTTP error status code for the failing requests (default: 503) | |
| failure_count | No | Number of requests to fail before allowing success (default: 3) | |
| success_payload | No | Response body for requests after the failure window (default: {"ok":true}) | {"ok":true} |
| fallback_selector | No | CSS selector for the fallback/retry UI that should appear (e.g., '.retry-button') | |
| intercept_pattern | Yes | Glob pattern for requests to intercept (e.g., '**/api/data**') |
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 core stateful behavior (fails first N, then succeeds), the error status, and the success payload concept. It does not mention cleanup/reset or how the tool handles multiple navigations, but it provides substantive behavioral context beyond the schema.
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 that lead with the action and then state the use case. No redundant text; every sentence contributes.
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 explains the main behavior and use case but lacks details about what the tool returns or how fallback_selector integrates into the test. Given no output schema, the agent would benefit from knowing the result format. The parameter semantics for nested viewport are left to the 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 the baseline is 3. The description implicitly explains failure_count and http_status ('fails the first N requests with an error status'), but does not add detail for wait_ms, viewport, or fallback_selector. It adds minimal value 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 intercepts requests, fails the first N with an error status, then allows success. This specific behavior distinguishes it from sibling tools like simulate_api_failure or inject_latency, which likely don't implement the stateful failure recovery pattern.
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?
It explicitly frames the tool for testing retry/recovery logic with the example 'does the app retry after a 503 and recover when the service comes back?' This gives clear context for use, though it doesn't explicitly name when not to use or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_system_network_errorA
Aborts requests matching a URL pattern with a system-level network error code, simulating OS-level failures like unreachable hosts or access denied. Use to answer: does the app recover when the DNS resolution fails or the OS rejects a connection?
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL of the page to test | |
| wait_ms | No | Milliseconds to wait after navigation before checking fallback (default: 2000) | |
| viewport | No | Viewport size (default: 1280Γ720) | |
| error_code | Yes | System network error code: addressunreachable (DNS/routing failure), connectionaborted (mid-flight drop), accessdenied (firewall/OS block), aborted (generic abort) | |
| fallback_selector | No | CSS selector for the fallback UI that should appear (e.g., '.network-error') | |
| intercept_pattern | Yes | Glob pattern for requests to abort (e.g., '**/api/payment**') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It states the tool aborts matching requests and simulates specific OS-level failures, which is transparent about the primary effect. However, it omits potential side effects (e.g., whether the page becomes non-interactive, whether the intervention is temporary) and does not warn about testing environments.
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; the first states the action and simulation type, the second gives a concrete test question. No redundant content or padding.
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 tool has 6 params and no output schema; the description conveys the core purpose but does not outline the end-to-end workflow (e.g., navigating to the URL, waiting, and evaluating the fallback selector). It gives the 'why' but not the full 'how', which the agent must infer from the 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?
The schema describes all parameters fully (100% coverage), so the baseline is 3. The description only mentions 'URL pattern' in passing and does not add details about format, units, or interplay between parameters 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 uses a specific verb ('Aborts') and identifies the resource ('requests matching a URL pattern') and distinguishes it by focusing on system-level network error codes that simulate OS-level failures, unlike siblings that simulate API or latency issues. The use-case question further clarifies unique purpose.
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 explicitly frames when to use it: to test app recovery from DNS resolution failures or OS connection rejections. It implies this tool is for OS-level network failures but does not name alternatives or state when not to use it, so no exclusions.
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.
8 tool updates
v0.2.1- First observed
assert_chaos_handled - First observed
block_resources - First observed
inject_latency - First observed
inject_response_corruption - First observed
simulate_api_failure - First observed
simulate_network_drop - First observed
simulate_stateful_failure - First observed
trigger_system_network_error
TDQS
Each tool targets a distinct failure mode: error status codes, latency, resource blocking, mid-flight drops, system-level errors, transient failures, response corruption, and a combined assertion tool. While some tools share mechanics (e.g., simulate_api_failure vs simulate_stateful_failure), the descriptions clearly differentiate the behavior and use case, leaving no ambiguity.
All tool names follow a consistent verb_noun pattern, using verbs like simulate, inject, block, trigger, and assert. The naming is predictable, readable, and uniform across the set, with no mixed conventions or vague verbs.
With 8 tools, the set is well-scoped for a network chaos testing server. Each tool covers a distinct failure scenario without redundancy or bloat, fitting comfortably within the ideal 3-15 range.
The tool set covers a comprehensive range of network failure modes: error responses, latency, resource blocking, network drops, system-level errors, transient failures, and corrupted responses. It also includes an assertion tool for validating chaos resilience. A minor gap is the lack of an explicit reset/cleanup tool, though chaos may be scoped per test and reset implicitly.
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
Browser-based QA for AI-built software. Test pages with real browsers via agents.
Synthetic checks, nightly regression replay and model-drift alerts for AI agents
Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
1168Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables web browser automation and inspection using structured data instead of screenshots, allowing AI agents to interact with web pages programmatically through the Playwright framework.-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to control web browsers through Playwright automation, providing 50+ tools for navigation, interaction, testing, accessibility audits, and visual testing across Chromium, Firefox, and WebKit.8MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to execute browser automation, perform QA tasks, and generate test code through natural language commands using Playwright.5-
- AlicenseNot gradedqualityDmaintenanceEnables browser automation for AI assistants via Playwright, supporting multiple browsers, sessions, and tools for web interaction and testing.1,353MIT
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/vola-trebla/playwright-network-chaos-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server