One test run. Multiple formats. Complete visibility.
One test run. Multiple formats. Complete visibility. Click a card to expand full Console, JUnit, or JSON output.
Export this run: mcp-test --report-format html --report-output report.html · --report-format junit · --report-format json · mcp-test export-pdf report.html
Cumulative pass rate across tests in execution order
Security payloads, performance SLOs, chaos, traces, schema validation, and more.
Features exercised in this run — chaos, load, security, resiliency, regression, trace.
Protocol-aware faults on call_tool (@marker(tags=["chaos"], chaos_faults=[...])) — 3/4 survived.
| Test | Faults injected | Outcome | Duration |
|---|---|---|---|
| test_degrades_gracefully_on_bad_args | delay | PASS | 72ms |
| test_chaos_delay_tolerance | delay | PASS | 145ms |
| test_chaos_503_unavailable | 503 | FAIL | 88ms |
| test_chaos_schema_drift_probe | schema_drift | PASS | 62ms |
Suite duration percentiles plus assert_latency / assert_throughput / baseline checks.
assert_throughput exercises concurrent call_tool with min_rps, max_p99_ms, and max_error_rate gates.
| Test | Tags | Outcome | Duration | SLO note |
|---|---|---|---|---|
| test_echo_latency_p95_under_slo | perf, latency | PASS | 1240ms | |
| test_throughput_min_rps | perf, throughput | FAIL | 980ms | Throughput 42.1 rps below minimum 50.0 rps (p99=312ms) |
| test_long_running_export | perf | TIMEOUT | 30000ms |
Test defenses in CI with the harness; enforce at runtime with MCP-Bastion.
Installed mcp-bastion-python 2.0.0 · CI verifies · Bastion protects production
Export SARIF: mcp-test --sarif-output findings.sarif
| Threat | Harness verifies | Bastion enforces |
|---|---|---|
| Prompt injection | assert_injection_blocked | PromptGuard middleware |
| PII / secrets | assert_no_secret_leak | Presidio redaction |
| Auth boundaries | assert_authorization_boundary | RBAC + tool policies |
| Rate limits | assert_throughput SLOs | Token budgets & iteration caps |
| Path traversal | assert_path_traversal_blocked | Policy-as-code rules |
pip install mcp-bastion-python · PyPI
4 tools tested, 1 untested, 2 missing auth tests
export_reportcalculateget_configAdvertised vs exercised tools, resources, and prompts (coverage map).
Auth boundary tests: 2 of 4 exercised tools · 2 missing
1 untested
1 untested
1 untested
Jump to flaky retries, schema drift, and per-test MCP trace timelines.
Protocol 2025-03-26
Capabilities tools, resources, logging, prompts
3.12.4Windows-11-amd64C:/demo/mcp-serverpython -m my_mcp_server --transport stdiostdio| Test | Tags | Started | Status | Duration | Details |
|---|---|---|---|---|---|
| test_echo_latency_p95_under_slo | perf latency | 2026-07-06 20:10:01 UTC | PASS | 1240.0 ms | — |
| test_throughput_min_rps | perf throughput | 2026-07-06 20:10:01 UTC | FAIL | 980.0 ms | DetailsThroughput 42.1 rps below minimum 50.0 rps (p99=312ms) |
| test_long_running_export | perf | 2026-07-06 20:10:02 UTC | TIMEOUT | 30000.0 ms | DetailsTest exceeded timeout of 30000ms |
| Test | Tags | Started | Status | Duration | Details |
|---|---|---|---|---|---|
| test_prompts_when_available | functional | 2026-07-06 20:10:02 UTC | SKIP | 0.0 ms | Detailsserver has no prompts capability |
| test_optional_bedrock_pack | integration | 2026-07-06 20:10:02 UTC | SKIP | 0.0 ms | Detailsoptional extra mcp-test-harness-bedrock not installed |
| Test | Tags | Started | Status | Duration | Details |
|---|---|---|---|---|---|
| test_report_snapshot_stable | regression snapshot | 2026-07-06 20:10:00 UTC | FAIL | 89.0 ms | DetailsSnapshot mismatch for 'generate_report'
--- expected
+++ actual
- {'version': '2.0.0'}
+ {'version': '2.0.1'} |
| test_tool_idempotent_calculate | regression | 2026-07-06 20:10:00 UTC | PASS | 156.3 ms | — |
| Test | Tags | Started | Status | Duration | Details |
|---|---|---|---|---|---|
| test_degrades_gracefully_on_bad_args | resiliency chaos | 2026-07-06 20:10:01 UTC | PASS | 72.0 ms | — |
| test_chaos_delay_tolerance | chaos chaos:delay resiliency | 2026-07-06 20:10:01 UTC | PASS | 145.0 ms | — |
| test_chaos_503_unavailable | chaos chaos:503 resiliency | 2026-07-06 20:10:01 UTC | FAIL | 88.0 ms | DetailsChaosFaultError: simulated 503 Service Unavailable |
| test_chaos_schema_drift_probe | chaos chaos:schema_drift | 2026-07-06 20:10:01 UTC | PASS | 62.0 ms | — |
| test_survives_server_restart | resiliency | 2026-07-06 20:10:01 UTC | ERROR | 18.0 ms | DetailsConnectionResetError: MCP server process exited with code 1
Traceback (most recent call last):
File tests/test_resiliency.py, line 44
await assert_tool_call(...) |
| test_flaky_resource_read flaky | resiliency | 2026-07-06 20:10:01 UTC | PASS | 340.0 ms | DetailsAttempts: #1 timeout 5000.0ms read_resource timed out #2 error 120.0ms 503 from upstream #3 passed 88.0ms Flaky: passed after 2 retry(ies). |
| Test | Tags | Started | Status | Duration | Details |
|---|---|---|---|---|---|
| test_schema_probe_strict | functional | 2026-07-06 20:10:01 UTC | FAIL | 44.0 ms | DetailsSchema validation failed for tool 'search' schema: $.arguments.limit — limit must be an integer (expected 'integer', got 'ten') |
| Test | Tags | Started | Status | Duration | Details |
|---|---|---|---|---|---|
| test_injection_payloads_blocked | security | 2026-07-06 20:10:00 UTC | PASS | 420.7 ms | — |
| test_no_secret_leak_in_logs | security | 2026-07-06 20:10:00 UTC | FAIL | 55.1 ms | DetailsTool 'get_config' output matched secret pattern(s): aws_key |
| test_path_traversal_blocked | security | 2026-07-06 20:10:00 UTC | PASS | 210.4 ms | — |
| Test | Tags | Started | Status | Duration | Details |
|---|---|---|---|---|---|
| test_echo_tool_returns_message | smoke functional | 2026-07-06 20:10:01 UTC | PASS | 12.4 ms | — |
| test_tool_schema_matches_openapi | functional | 2026-07-06 20:10:00 UTC | PASS | 48.2 ms | — |
| test_list_tools_includes_echo | smoke | 2026-07-06 20:10:00 UTC | PASS | 6.8 ms | — |
| test_echo_rejects_empty_payload | functional | 2026-07-06 20:10:00 UTC | FAIL | 31.5 ms | DetailsTool 'echo' response mismatch
--- expected
+++ actual
@@ -1,3 +1,3 @@
[{"text": "validation error", "isError": true}]
+[{"text": "ok", "isError": false}]MCP trace (4 events)Possible stdio pollution:
0.8msrequesttools/call84 B {'name': 'echo', 'arguments': {'message': 'ping'}}3.2msresponsetools/call120 B {'content': [{'type': 'text', 'text': 'ping'}]}4.1msrequesttools/call92 B {'name': 'echo', 'arguments': {'message': ''}}5.0mserrortools/call64 B stdio pollution? {'isError': True, 'message': 'message must be non-empty'} |