Created
June 18, 2026 16:01
-
-
Save ianjennings/98e32f7670122ed2e61efbb7bde9ab3d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ./simple-test.sh "Use playwright to open https://example.com and report the title." | |
| {"type":"system","subtype":"init","cwd":"/Users/ianjennings/Development/mcp-coverage","session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","tools":["Task","TaskOutput","Bash","Glob","Grep","ExitPlanMode","Read","Edit","Write","NotebookEdit","WebFetch","TodoWrite","WebSearch","TaskStop","AskUserQuestion","Skill","EnterPlanMode","ToolSearch","mcp__claude_ai_Gmail__create_draft","mcp__claude_ai_Gmail__list_drafts","mcp__claude_ai_Gmail__get_thread","mcp__claude_ai_Gmail__search_threads","mcp__claude_ai_Gmail__label_thread","mcp__claude_ai_Gmail__unlabel_thread","mcp__claude_ai_Gmail__list_labels","mcp__claude_ai_Gmail__label_message","mcp__claude_ai_Gmail__unlabel_message","mcp__claude_ai_Gmail__create_label","mcp__claude_ai_Gmail__update_label","mcp__claude_ai_Gmail__delete_label","mcp__claude_ai_Google_Calendar__list_events","mcp__claude_ai_Google_Calendar__get_event","mcp__claude_ai_Google_Calendar__list_calendars","mcp__claude_ai_Google_Calendar__suggest_time","mcp__claude_ai_Google_Calendar__create_event","mcp__claude_ai_Google_Calendar__update_event","mcp__claude_ai_Google_Calendar__delete_event","mcp__claude_ai_Google_Calendar__respond_to_event","mcp__claude_ai_Zapier__discover_zapier_actions","mcp__claude_ai_Zapier__enable_zapier_action","mcp__claude_ai_Zapier__disable_zapier_action","mcp__claude_ai_Zapier__list_enabled_zapier_actions","mcp__claude_ai_Zapier__execute_zapier_read_action","mcp__claude_ai_Zapier__execute_zapier_write_action","mcp__claude_ai_Zapier__send_feedback","mcp__claude_ai_Zapier__auto_provision_mcp","mcp__claude_ai_Zapier__list_zapier_skills","mcp__claude_ai_Zapier__get_zapier_skill","mcp__claude_ai_Zapier__create_zapier_skill","mcp__claude_ai_Zapier__update_zapier_skill","mcp__claude_ai_Zapier__delete_zapier_skill","mcp__claude_ai_Zapier__get_configuration_url","mcp__claude_ai_Notion__notion-search","mcp__claude_ai_Notion__notion-fetch","mcp__claude_ai_Notion__notion-create-pages","mcp__claude_ai_Notion__notion-update-page","mcp__claude_ai_Notion__notion-move-pages","mcp__claude_ai_Notion__notion-duplicate-page","mcp__claude_ai_Notion__notion-create-database","mcp__claude_ai_Notion__notion-update-data-source","mcp__claude_ai_Notion__notion-create-comment","mcp__claude_ai_Notion__notion-get-comments","mcp__claude_ai_Notion__notion-get-teams","mcp__claude_ai_Notion__notion-get-users","mcp__claude_ai_Notion__notion-query-database-view","mcp__claude_ai_Notion__notion-query-meeting-notes","mcp__claude_ai_Notion__notion-create-view","mcp__claude_ai_Notion__notion-update-view","ListMcpResourcesTool","ReadMcpResourceTool","mcp__claude_ai_Slack__slack_send_message","mcp__claude_ai_Slack__slack_schedule_message","mcp__claude_ai_Slack__slack_add_reaction","mcp__claude_ai_Slack__slack_create_canvas","mcp__claude_ai_Slack__slack_update_canvas","mcp__claude_ai_Slack__slack_search_public","mcp__claude_ai_Slack__slack_search_public_and_private","mcp__claude_ai_Slack__slack_search_channels","mcp__claude_ai_Slack__slack_search_users","mcp__claude_ai_Slack__slack_read_channel","mcp__claude_ai_Slack__slack_read_thread","mcp__claude_ai_Slack__slack_read_canvas","mcp__claude_ai_Slack__slack_read_user_profile","mcp__claude_ai_Slack__slack_list_channel_members","mcp__claude_ai_Slack__slack_read_file","mcp__claude_ai_Slack__slack_send_message_draft","mcp__claude_ai_Slack__slack_search_emojis","mcp__claude_ai_Slack__slack_get_reactions","mcp__claude_ai_HubSpot__search_crm_objects","mcp__claude_ai_HubSpot__submit_feedback","mcp__claude_ai_HubSpot__get_campaign_contacts_by_type","mcp__claude_ai_HubSpot__manage_crm_objects","mcp__claude_ai_HubSpot__manage_landing_page","mcp__claude_ai_HubSpot__search_owners","mcp__claude_ai_HubSpot__get_campaign_analytics","mcp__claude_ai_HubSpot__query_crm_data","mcp__claude_ai_HubSpot__render_landing_page_ui","mcp__claude_ai_HubSpot__get_organization_details","mcp__claude_ai_HubSpot__get_content_analytics_report","mcp__claude_ai_HubSpot__get_properties","mcp__claude_ai_HubSpot__show_feedback_form","mcp__claude_ai_HubSpot__get_campaign_asset_metrics","mcp__claude_ai_HubSpot__search_properties","mcp__claude_ai_HubSpot__get_crm_objects","mcp__claude_ai_HubSpot__get_user_details","mcp__claude_ai_HubSpot__tool_guidance","mcp__claude_ai_PostHog__exec","mcp__claude_ai_Fireflies__fireflies_get_transcript","mcp__claude_ai_Fireflies__fireflies_get_summary","mcp__claude_ai_Fireflies__fireflies_get_transcripts","mcp__claude_ai_Fireflies__fireflies_get_active_meetings","mcp__claude_ai_Fireflies__fireflies_get_user","mcp__claude_ai_Fireflies__fireflies_get_usergroups","mcp__claude_ai_Fireflies__fireflies_get_user_contacts","mcp__claude_ai_Fireflies__fireflies_share_meeting","mcp__claude_ai_Fireflies__fireflies_revoke_meeting_access","mcp__claude_ai_Fireflies__fireflies_move_meeting","mcp__claude_ai_Fireflies__fireflies_update_meeting_privacy","mcp__claude_ai_Fireflies__fireflies_list_channels","mcp__claude_ai_Fireflies__fireflies_get_channel","mcp__claude_ai_Fireflies__fireflies_get_analytics","mcp__claude_ai_Fireflies__fireflies_get_rule_executions","mcp__claude_ai_Fireflies__fireflies_create_soundbite","mcp__claude_ai_Fireflies__fireflies_update_meeting_title","mcp__claude_ai_Fireflies__fireflies_get_soundbites","mcp__claude_ai_Fireflies__fireflies_search","mcp__claude_ai_Fireflies__fireflies_fetch","mcp__playwright__browser_close","mcp__playwright__browser_resize","mcp__playwright__browser_console_messages","mcp__playwright__browser_handle_dialog","mcp__playwright__browser_evaluate","mcp__playwright__browser_file_upload","mcp__playwright__browser_drop","mcp__playwright__browser_fill_form","mcp__playwright__browser_press_key","mcp__playwright__browser_type","mcp__playwright__browser_navigate","mcp__playwright__browser_navigate_back","mcp__playwright__browser_network_requests","mcp__playwright__browser_network_request","mcp__playwright__browser_run_code_unsafe","mcp__playwright__browser_take_screenshot","mcp__playwright__browser_snapshot","mcp__playwright__browser_click","mcp__playwright__browser_drag","mcp__playwright__browser_hover","mcp__playwright__browser_select_option","mcp__playwright__browser_tabs","mcp__playwright__browser_wait_for"],"mcp_servers":[{"name":"testdriver-cloud","status":"failed"},{"name":"claude.ai Linear","status":"needs-auth"},{"name":"claude.ai Google Drive","status":"needs-auth"},{"name":"claude.ai Stripe","status":"needs-auth"},{"name":"claude.ai MCP Everything","status":"failed"},{"name":"posthog","status":"needs-auth"},{"name":"claude.ai Sentry","status":"connected"},{"name":"claude.ai Gmail","status":"connected"},{"name":"claude.ai Google Calendar","status":"connected"},{"name":"claude.ai Zapier","status":"connected"},{"name":"claude.ai Notion","status":"connected"},{"name":"claude.ai Slack","status":"connected"},{"name":"claude.ai HubSpot","status":"connected"},{"name":"claude.ai PostHog","status":"connected"},{"name":"claude.ai Fireflies","status":"connected"},{"name":"playwright","status":"connected"},{"name":"testdriver","status":"failed"}],"model":"claude-opus-4-5-20251101","permissionMode":"default","slash_commands":["keybindings-help","testdriver:generating-tests","testdriver:performing-actions","testdriver:screenshot","testdriver:caching","testdriver:mouse-up","testdriver:click","testdriver:testdriver","testdriver:assert","testdriver:enterprise","testdriver:right-click","testdriver:customizing-devices","testdriver:ai","testdriver:what-is-testdriver","testdriver:making-assertions","create-mcp-app","testdriver:dashcam","testdriver:test-creator","testdriver:hover","find-skills","testdriver:reusable-code","testdriver:quickstart","testdriver:waiting-for-elements","testdriver:running-tests","testdriver:locating-elements","testdriver:self-hosted","testdriver:scroll","testdriver:aws-setup","testdriver:type","testdriver:variables","testdriver:secrets","testdriver:press-keys","testdriver:focus-application","testdriver:exec","testdriver:ci-cd","testdriver:captcha","testdriver:mouse-down","testdriver:client","testdriver:examples","testdriver:cloud","testdriver:device-config","testdriver:find","testdriver:double-click","testdriver:elements","mcp-apps:migrate-oai-app","mcp-apps:create-mcp-app","compact","context","cost","init","pr-comments","release-notes","review","security-review","mcp__claude_ai_HubSpot__analyze-contacts-lifecycle-stages","mcp__claude_ai_HubSpot__analyze-customer-tickets","mcp__claude_ai_HubSpot__analyze-successful-customer-journeys","mcp__claude_ai_HubSpot__list-my-assigned-contacts","mcp__claude_ai_HubSpot__list-my-assigned-tickets","mcp__claude_ai_HubSpot__check-connector-status"],"apiKeySource":"none","claude_code_version":"2.1.22","output_style":"default","agents":["Bash","general-purpose","statusline-setup","Explore","Plan","testdriver"],"skills":["keybindings-help","testdriver:generating-tests","testdriver:performing-actions","testdriver:screenshot","testdriver:caching","testdriver:mouse-up","testdriver:click","testdriver:testdriver","testdriver:assert","testdriver:enterprise","testdriver:right-click","testdriver:customizing-devices","testdriver:ai","testdriver:what-is-testdriver","testdriver:making-assertions","create-mcp-app","testdriver:dashcam","testdriver:test-creator","testdriver:hover","find-skills","testdriver:reusable-code","testdriver:quickstart","testdriver:waiting-for-elements","testdriver:running-tests","testdriver:locating-elements","testdriver:self-hosted","testdriver:scroll","testdriver:aws-setup","testdriver:type","testdriver:variables","testdriver:secrets","testdriver:press-keys","testdriver:focus-application","testdriver:exec","testdriver:ci-cd","testdriver:captcha","testdriver:mouse-down","testdriver:client","testdriver:examples","testdriver:cloud","testdriver:device-config","testdriver:find","testdriver:double-click","testdriver:elements","mcp-apps:migrate-oai-app","mcp-apps:create-mcp-app"],"plugins":[{"name":"mcp-apps","path":"/Users/ianjennings/.claude/plugins/cache/mcp-apps/mcp-apps/0.1.0"}],"uuid":"46cd9d33-2464-4b2a-a7f7-7df5c5381c34"} | |
| {"type":"assistant","message":{"model":"claude-opus-4-5-20251101","id":"msg_011EKXLPCSoFY7QRpYvYjbz6","type":"message","role":"assistant","content":[{"type":"text","text":"I'll help you use Playwright to open https://example.com and report the title. Let me first load the Playwright tools."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":24091,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":24091},"output_tokens":3,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","uuid":"41e0b4f6-1e38-443e-803c-4359d1ecb808"} | |
| {"type":"assistant","message":{"model":"claude-opus-4-5-20251101","id":"msg_011EKXLPCSoFY7QRpYvYjbz6","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01GGkD37iNP8kvZadcvzomBF","name":"ToolSearch","input":{"query":"playwright navigate","max_results":5},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":24091,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":24091},"output_tokens":3,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","uuid":"12213f8b-b1ca-43d5-b380-ec0ea760474f"} | |
| {"type":"user","message":{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_01GGkD37iNP8kvZadcvzomBF","content":[{"type":"tool_reference","tool_name":"mcp__playwright__browser_navigate"},{"type":"tool_reference","tool_name":"mcp__playwright__browser_navigate_back"},{"type":"tool_reference","tool_name":"mcp__playwright__browser_run_code_unsafe"},{"type":"tool_reference","tool_name":"mcp__playwright__browser_close"},{"type":"tool_reference","tool_name":"mcp__playwright__browser_resize"}]}]},"parent_tool_use_id":null,"session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","uuid":"5c3d4c59-dd8e-4245-8b0d-57f9c5f1b673","tool_use_result":{"matches":["mcp__playwright__browser_navigate","mcp__playwright__browser_navigate_back","mcp__playwright__browser_run_code_unsafe","mcp__playwright__browser_close","mcp__playwright__browser_resize"],"query":"playwright navigate","total_deferred_tools":130}} | |
| {"type":"assistant","message":{"model":"claude-opus-4-5-20251101","id":"msg_01WcZ2tngKpD48vdA9wKjQ1Q","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me navigate to the URL and get the page title."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":705,"cache_read_input_tokens":24091,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":705},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","uuid":"e0f09d8a-6693-49a8-8fbc-03fdc9bab5be"} | |
| {"type":"assistant","message":{"model":"claude-opus-4-5-20251101","id":"msg_01WcZ2tngKpD48vdA9wKjQ1Q","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Rj1rtRprGPfdxPYvTaxLoU","name":"mcp__playwright__browser_navigate","input":{"url":"https://example.com"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":705,"cache_read_input_tokens":24091,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":705},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","uuid":"6d192fde-f370-4642-a672-c0b89fa01285"} | |
| {"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Rj1rtRprGPfdxPYvTaxLoU","type":"tool_result","content":[{"type":"text","text":"### Ran Playwright code\n```js\nawait page.goto('https://example.com');\n```\n### Page\n- Page URL: https://example.com/\n- Page Title: Example Domain\n### Snapshot\n- [Snapshot](.playwright-mcp/page-2026-06-18T16-01-18-493Z.yml)"}]}]},"parent_tool_use_id":null,"session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","uuid":"33a3ccfb-18d1-4d55-8a40-94b0808a1e27","tool_use_result":[{"type":"text","text":"### Ran Playwright code\n```js\nawait page.goto('https://example.com');\n```\n### Page\n- Page URL: https://example.com/\n- Page Title: Example Domain\n### Snapshot\n- [Snapshot](.playwright-mcp/page-2026-06-18T16-01-18-493Z.yml)"}]} | |
| {"type":"assistant","message":{"model":"claude-opus-4-5-20251101","id":"msg_018XkHyhiGou6m3KSD38eS57","type":"message","role":"assistant","content":[{"type":"text","text":"The page title is **Example Domain**.\n\nThe Playwright browser successfully navigated to https://example.com and retrieved the title."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":167,"cache_read_input_tokens":24796,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":167},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","uuid":"ce06630d-ae05-47a6-aab7-f332bfe8ad30"} | |
| {"type":"result","subtype":"success","is_error":false,"duration_ms":18951,"duration_api_ms":12312,"num_turns":3,"result":"The page title is **Example Domain**.\n\nThe Playwright browser successfully navigated to https://example.com and retrieved the title.","session_id":"04ccbc79-17bf-4766-94d6-00fab3c33d60","total_cost_usd":0.18620925000000002,"usage":{"input_tokens":5,"cache_creation_input_tokens":24963,"cache_read_input_tokens":48887,"output_tokens":208,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":24963,"ephemeral_5m_input_tokens":0}},"modelUsage":{"claude-haiku-4-5-20251001":{"inputTokens":387,"outputTokens":27,"cacheReadInputTokens":0,"cacheCreationInputTokens":0,"webSearchRequests":0,"costUSD":0.000522,"contextWindow":200000,"maxOutputTokens":64000},"claude-opus-4-5-20251101":{"inputTokens":5,"outputTokens":208,"cacheReadInputTokens":48887,"cacheCreationInputTokens":24963,"webSearchRequests":0,"costUSD":0.18568725000000003,"contextWindow":200000,"maxOutputTokens":64000}},"permission_denials":[],"uuid":"b742e80f-9231-4765-8696-00c9bef47987"} | |
| PASS: MCP tool used: ToolSearch, mcp__playwright__browser_navigate |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/env bash | |
| set -euo pipefail | |
| MCP_NAME="${MCP_NAME:-playwright}" | |
| MCP_COMMAND="${MCP_COMMAND:-npx}" | |
| MCP_ARGS_JSON="${MCP_ARGS_JSON:-[\"-y\",\"@playwright/mcp@latest\"]}" | |
| EXPECTED_TOOL_PREFIX="${EXPECTED_TOOL_PREFIX:-mcp__${MCP_NAME}__}" | |
| PROMPT="${1:-Use the playwright MCP server to open https://example.com and tell me the page title.}" | |
| tmpdir="$(mktemp -d)" | |
| trap 'rm -rf "$tmpdir"' EXIT | |
| mcp_config="$tmpdir/mcp.json" | |
| out="$tmpdir/claude-stream.jsonl" | |
| cat > "$mcp_config" <<EOF | |
| { | |
| "mcpServers": { | |
| "$MCP_NAME": { | |
| "command": "$MCP_COMMAND", | |
| "args": $MCP_ARGS_JSON | |
| } | |
| } | |
| } | |
| EOF | |
| claude --mcp-config "$mcp_config" \ | |
| -p "$PROMPT" \ | |
| --output-format stream-json \ | |
| --verbose \ | |
| --allowedTools "${EXPECTED_TOOL_PREFIX}*" \ | |
| | tee "$out" | |
| python3 - "$out" "$EXPECTED_TOOL_PREFIX" <<'PY' | |
| import json, sys | |
| path, expected_prefix = sys.argv[1], sys.argv[2] | |
| tool_names = [] | |
| def walk(x): | |
| if isinstance(x, dict): | |
| name = x.get("name") | |
| typ = x.get("type") | |
| if isinstance(name, str) and ( | |
| name.startswith(expected_prefix) | |
| or typ in ("tool_use", "server_tool_use") | |
| ): | |
| tool_names.append(name) | |
| for v in x.values(): | |
| walk(v) | |
| elif isinstance(x, list): | |
| for v in x: | |
| walk(v) | |
| with open(path, "r", encoding="utf-8") as f: | |
| for line in f: | |
| try: | |
| walk(json.loads(line)) | |
| except json.JSONDecodeError: | |
| pass | |
| if not tool_names: | |
| print(f"\nFAIL: no MCP tool use found matching prefix {expected_prefix!r}", file=sys.stderr) | |
| sys.exit(1) | |
| print(f"\nPASS: MCP tool used: {', '.join(sorted(set(tool_names)))}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment