{"schema_version":"verify.report.v1","generated_at":"2026-08-23T20:48:29.657700+00:00","snapshot_id":"trustsnap_6c19e6acf5abcc00","server":{"namespace":"github-xiaoq-in","name":"xiaoflow-mcp","title":"xiaoq-in/xiaoflow-mcp","description":"Official XiaoFlow MCP server for SEO keyword metrics, 48-month history, related keywords, bulk analysis, and iterative expansion.","homepage_url":"https://www.xiaoflow.com/mcp","docs_url":"https://www.xiaoflow.com/mcp","icon_url":"https://avatars.githubusercontent.com/u/765276?v=4","support_url":"https://github.com/xiaoq-in/xiaoflow-mcp","remote_url":"https://www.xiaoflow.com/mcp","server_card_url":null,"latest_version":null,"current_status":"healthy","current_score":69.79,"transport_type":"streamable-http","has_oauth":true,"has_dcr":true,"has_prompts":false,"tool_count":12,"current_validation_schema_version":"8058defc70ca932c","last_validated_at":"2026-08-23T20:26:44.893477+00:00","registry_source":"github_topic_registry","registry_identifier":"github_topic_registry:xiaoq-in/xiaoflow-mcp","canonical_identifier":null,"current_score_components":{"auth_operability_score":4.0,"error_contract_score":0.0,"rate_limit_semantics_score":2.0,"schema_completeness_score":3.0,"backward_compatibility_score":4.0,"slo_health_score":3.0,"security_hygiene_score":3.0,"task_success_score":4.0,"trust_confidence_score":2.0,"abuse_noise_ratio_score":4.0,"prompt_contract_score":1.0,"resource_contract_score":4.0,"discovery_metadata_score":2.0,"registry_consistency_score":3.0,"installability_score":4.0,"session_semantics_score":4.0,"tool_surface_design_score":4.0,"result_shape_stability_score":4.0,"oauth_interop_score":4.0,"recovery_semantics_score":0.0,"maintenance_signal_score":2.0,"adoption_signal_score":3.0,"freshness_confidence_score":4.0,"transport_fidelity_score":4.0,"spec_recency_score":2.0,"session_resume_score":3.0,"step_up_auth_score":3.0,"transport_compliance_score":2.0,"utility_coverage_score":0.0,"advanced_capability_coverage_score":1.0,"connector_publishability_score":2.0,"tool_snapshot_churn_score":4.0,"connector_replay_score":4.0,"request_association_score":0.0,"interactive_flow_safety_score":3.0,"action_safety_score":3.0,"official_registry_presence_score":3.0,"safety_transparency_score":3.0,"tool_capability_clarity_score":4.0,"destructive_operation_safety_score":3.0,"egress_ssrf_resilience_score":2.0,"execution_sandbox_safety_score":4.0,"data_exfiltration_resilience_score":3.0,"least_privilege_scope_score":3.0,"secret_handling_hygiene_score":3.0,"dependency_supply_chain_signal_score":0.0,"input_sanitization_safety_score":3.0,"tool_namespace_clarity_score":4.0},"capability_taxonomy":[],"machine_summary":{},"taxonomy_tags":[],"score_decomposition":[],"validation_diff":null,"tool_snapshot_diff":null,"connector_replay":{},"request_association":{},"production_readiness":{"code":"needs_remediation","label":"Needs remediation","reason":"Degraded from Safe for evaluation: 1 open high/critical-severity alert(s) are active, including at least one that blocks even evaluation-level trust.","badge":"score-low","critical_alerts":1,"high_or_critical_alerts":1,"degraded_by_active_alerts":true},"recommended_for":[],"history_summary":{},"validation_timeline":[],"evidence_confidence":{"score":83.75,"label":"high","reason":"Based on 7 recent validations, 22 captured checks, and validation age of 0.4 hours.","live_check_count":22,"validation_age_hours":0.36,"basis":{"evidence_bearing_validations":7,"affirmative_live_check_count":22,"validation_age_hours":0.36,"freshness_threshold_hours":24}},"incident_feed":[],"disputes":[],"remediations":[],"client_remediation_modes":[],"client_profiles":[],"client_readiness_verdicts":[],"publishability_policy_profiles":[],"compatibility_fixtures":[],"install_snippets":{},"aliases":[],"raw_evidence":{"checks":{"probe_noise_resilience":{"status":"ok","latency_ms":177.13,"details":{"url":"https://www.xiaoflow.com/robots.txt","http_status":200,"headers":{"content-type":"text/plain; charset=utf-8"},"validation_disallowed":false,"consent_error":null}},"server_card":{"status":"ok","latency_ms":157.72,"details":{"url":"https://www.xiaoflow.com/.well-known/mcp/server-card.json","payload":{"name":"xiaoflow-mcp","version":"1.0.0","description":"XiaoFlow E-commerce, SEO & Google Ads Keyword Intelligence MCP Server","serverInfo":{"name":"xiaoflow-mcp","version":"1.0.0"},"url":"https://mcp.xiaoflow.com/mcp","capabilities":{"tools":true,"resources":true,"prompts":true},"transport":{"type":"sse","url":"https://mcp.xiaoflow.com/mcp"},"tools":[{"name":"search_keywords","description":"Search keyword volumes, CPC, competition and trend history."},{"name":"get_keyword_metrics","description":"Get detailed metrics and 12-month search trends for a keyword."},{"name":"batch_keyword_metrics","description":"Batch retrieve metrics for up to 100 keywords."},{"name":"analyze_domain_keywords","description":"Analyze domain keyword coverage and search traffic value."},{"name":"list_categories","description":"List Google Product Taxonomy categories."}]},"http_status":200,"headers":{"content-type":"application/json","set-cookie":"XSRF-TOKEN=eyJpdiI6IjlDRlhTZ3ErU09BMndmY0oxanpYQmc9PSIsInZhbHVlIjoibHJVQjRKcy9kRTFGV0ZSODNHNVBzL0pYK1RsMjlFSktNRjBKckRkSmpjdzJuQ1ZpOEcxc1FETm1RdXBrNktuNUZpeHZZZThvU2ZKMU1kWEZpT3lYMmJkVEJCTTBGRGgxUk1NZTBkdlV2bFhGR0ViQzFuUkk3KzVXMUtEN0NNNCsiLCJtYWMiOiI4YjQxMzViYThiZjE5YzQyZmRjMzQyNzA2YzMzZjZmMTA4YWQxNTQzZTAwYjdkZWUxM2RmZDVmYWJlMWI4MThjIiwidGFnIjoiIn0%3D; expires=Sun, 23 Aug 2026 22:26:40 GMT; Max-Age=7200; path=/; secure; samesite=lax, xiaoflow-session=eyJpdiI6InZGUUJkYVV3bzJVRjdxNzN0UUdMSXc9PSIsInZhbHVlIjoiaU41dENYSlBSYmRHbFFJYTV0Sm0ySFpVUUNpRjdoS1AwZWt1MnpWQWFuTEN4S21GZjNya2xxR0tGR1lheEdUOHJ0eVlpZmZoVzVNblk3Q3RFelE5SjIwTlg0Z1Ryb0lPZU5WcDRzZ1RXUDJGVVdXMWF5UEZQQmtBc0N1Y1FLQnciLCJtYWMiOiJmMzY4MmFlZWM3Y2U2NTE0MmY2OGYxYzgyNjdkNTBjZmQ1MzA2ZTFiODAyODU1MDFjMDgxOGMyM2YwYzE2ODY3IiwidGFnIjoiIn0%3D; expires=Sun, 23 Aug 2026 22:26:40 GMT; Max-Age=7200; path=/; secure; httponly; samesite=lax"}}},"oauth_protected_resource":{"status":"ok","latency_ms":153.62,"details":{"url":"https://www.xiaoflow.com/.well-known/oauth-protected-resource","payload":{"resource":"https://www.xiaoflow.com","authorization_servers":["https://www.xiaoflow.com"],"scopes_supported":["openid","profile","email","mcp"],"bearer_methods_supported":["header"],"client_id_metadata_document_supported":true,"client_id_metadata_documents_supported":true,"resource_documentation":"https://www.xiaoflow.com/mcp"},"http_status":200,"headers":{"content-type":"application/json","set-cookie":"XSRF-TOKEN=eyJpdiI6Im0zZFNmenZPZ0NrMG1IT2hXNTJrdWc9PSIsInZhbHVlIjoiVWxscmk1Vi9NaEFvSS93UEhDd3JGbURZSjBJNk5XOXpVclV0cExBSWJTbWZMblJsdmNpZTJ2dWFPbGtjL1ZNSkV0aStGV3l5SDJNbUF0aVVKRzQ1VXhjNUtJVWNvVmRhSTRuRWVyb0NBMEhlanZtM1NicWs1Q0Evam9LZGhMSVEiLCJtYWMiOiIxMDI1NmNiNmU0MjVlMzBmYjI1ZmFiM2Y2YjkxN2EyYmZmMmYyZTI4ZTZhODMyMmMzYTNmOGYzOTEwMmJjMmQyIiwidGFnIjoiIn0%3D; expires=Sun, 23 Aug 2026 22:26:40 GMT; Max-Age=7200; path=/; secure; samesite=lax, xiaoflow-session=eyJpdiI6IklSVzdrL1d1aFpvT1I1cDNYT041a0E9PSIsInZhbHVlIjoicGoyQzdDNk5PQVN3akVCOFZxaUcrYTRua3dFbm5wNHBIcTltRC9JVWdxaUZ2T2RTdFpmN29INmx3Kzd4b0krVTk0K3RDVUlSWmUzZXQzZmdsNnpIbzg4WWZndllIcHZuWnlPUFVYcVRidW9vSklzOXJYYUxGL0RGYXRiVGh0UnMiLCJtYWMiOiIwOGVkZGJhMDNmYWEwODkyZWJjYmY0MTUxMGU5MmUzODRhYThlMjA2NmVhNDAyZjFkMjc3NTExZTlhZWQ3MWNlIiwidGFnIjoiIn0%3D; expires=Sun, 23 Aug 2026 22:26:40 GMT; Max-Age=7200; path=/; secure; httponly; samesite=lax"}}},"oauth_authorization_server":{"status":"ok","latency_ms":158.25,"details":{"url":"https://www.xiaoflow.com/.well-known/oauth-authorization-server","payload":{"issuer":"https://www.xiaoflow.com","authorization_endpoint":"https://www.xiaoflow.com/mcp/authorize","token_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/token","userinfo_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/userinfo","registration_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/register","response_types_supported":["code","id_token","token"],"grant_types_supported":["authorization_code","refresh_token"],"token_endpoint_auth_methods_supported":["none","client_secret_post","client_secret_basic"],"code_challenge_methods_supported":["S256","plain"],"scopes_supported":["openid","profile","email","mcp"],"subject_types_supported":["public"],"id_token_signing_alg_values_supported":["HS256"],"service_documentation":"https://www.xiaoflow.com/mcp","client_id_metadata_document_supported":true,"client_id_metadata_documents_supported":true,"agent_auth":{"skill":"https://www.xiaoflow.com/auth.md","registration_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/register","authorization_endpoint":"https://www.xiaoflow.com/mcp/authorize","token_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/token","userinfo_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/userinfo"}},"http_status":200,"headers":{"content-type":"application/json","set-cookie":"XSRF-TOKEN=eyJpdiI6IncwTENwTXUxUW1JUWZRZzdkT2IzaWc9PSIsInZhbHVlIjoiakRZVDRwSEpKa0hzN1V3NnpqQkNiMzdkalVpRlpEdXFnVmVZOCsvK09tRHVNV0JhVTJodEVLeEdpRUpKZUowY0tLWE9RR2NMKzdHRnpQZVFnYy9RWUlGbFhqTG5CK2xLVlBSQ1RJemhSd3pvNUFIU2VDQWNjQUhhbDVNRXRHdVkiLCJtYWMiOiIwNGFjZGE5NjgxOWUwZDc3ODI2YzliMTlmMTEzM2VhZTgxNDM3ZGYwZjc0MWI4NjRhYTFmOTA1MjliMTJkMWRkIiwidGFnIjoiIn0%3D; expires=Sun, 23 Aug 2026 22:26:40 GMT; Max-Age=7200; path=/; secure; samesite=lax, xiaoflow-session=eyJpdiI6Ikpia2dUc3dvY1gwZkpwWXI1dXAxeWc9PSIsInZhbHVlIjoicStoY3NlYlQxS3BBdzRaanB1UG5nMUVjd0tUdWhwWDJUM0UvbnpsOHBrb1l0QlFablBCM2RWK1AzS3NhL3VqR01ma3dZMDVzSk1RNUtMTlYrSjlaRVJVZi9OYzdKM3Y1dnNjbEg3THZkbXY0OGpmY2h0L0hteHRBenZpZFZicXMiLCJtYWMiOiI1MTM2ZTJhZmIxN2IzYjA5NmFjOWNlNmZiMzJmOWVhZTc3MTU0NGE1MTBjZTRiYjEyZThhMDA2OTY4MTg1NTZhIiwidGFnIjoiIn0%3D; expires=Sun, 23 Aug 2026 22:26:40 GMT; Max-Age=7200; path=/; secure; httponly; samesite=lax"}}},"openid_configuration":{"status":"ok","latency_ms":154.4,"details":{"url":"https://www.xiaoflow.com/.well-known/openid-configuration","payload":{"issuer":"https://www.xiaoflow.com","authorization_endpoint":"https://www.xiaoflow.com/mcp/authorize","token_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/token","userinfo_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/userinfo","registration_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/register","response_types_supported":["code","id_token","token"],"grant_types_supported":["authorization_code","refresh_token"],"token_endpoint_auth_methods_supported":["none","client_secret_post","client_secret_basic"],"code_challenge_methods_supported":["S256","plain"],"scopes_supported":["openid","profile","email","mcp"],"subject_types_supported":["public"],"id_token_signing_alg_values_supported":["HS256"],"service_documentation":"https://www.xiaoflow.com/mcp","client_id_metadata_document_supported":true,"client_id_metadata_documents_supported":true,"agent_auth":{"skill":"https://www.xiaoflow.com/auth.md","registration_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/register","authorization_endpoint":"https://www.xiaoflow.com/mcp/authorize","token_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/token","userinfo_endpoint":"https://www.xiaoflow.com/api/v1/mcp/oauth/userinfo"}},"http_status":200,"headers":{"content-type":"application/json","set-cookie":"XSRF-TOKEN=eyJpdiI6IkJQUVBoWGVralZreGtuWEFvNVRQMVE9PSIsInZhbHVlIjoiR1hCWXh4ZXEwWkRqUHc0THFTb1VaRjBGK3B2ZG93REdOMVVITHg2WWI5OG5BQ01YUi91RGt6VzVZa0xXd1FEM1RDTlVENFlsVGhXQWRGelRlY2FJK3cyQnM4Rm5mSzZFL0U5WnFyamwrODQ0R0gwVllEL1NxQU5NN3NoRnhuVGUiLCJtYWMiOiJmYzg3ZjBlYmIxNDY4NDdlMDRjMzMzMTU1OTcxMjVkNTcxOTViY2M4ODQ5OGYwNGFkZTdjYTlmYWNiODNkZTg5IiwidGFnIjoiIn0%3D; expires=Sun, 23 Aug 2026 22:26:40 GMT; Max-Age=7200; path=/; secure; samesite=lax, xiaoflow-session=eyJpdiI6IkpENElIYys5Sm5hV3ZUbXJqcExoa3c9PSIsInZhbHVlIjoidlpjYW1ZajdSS00xclJ6cHVabkM4eHQyeWEydW9VNnBhZjZ0bWpkRjVjcjBUSDFGSHVLZUpYak5FMEFaU1hXZlE5ZU5TdjNDTUJ3blRDWktGS0IwT25MMWkxNjJYSWN6cmVYY3huQUE3MG84S2FGMG1XTytCMzBtclVHSmd6dXMiLCJtYWMiOiJlMGQzMmU2YjM5ZWMzYjA3NDNhZmY2ZGYxMjU3YTgyZWJmYjhlZjlmMDE2ZGNiMzlmODNlYTgzNzBlZjllMzA2IiwidGFnIjoiIn0%3D; expires=Sun, 23 Aug 2026 22:26:40 GMT; Max-Age=7200; path=/; secure; httponly; samesite=lax"}}},"initialize":{"status":"ok","latency_ms":629.62,"details":{"url":"https://www.xiaoflow.com/mcp","payload":{"result":{"protocolVersion":"2025-03-26","capabilities":{"tools":{},"resources":{},"prompts":{}},"serverInfo":{"name":"xiaoflow-mcp-server","title":"XiaoFlow Keyword Intelligence","version":"1.3.1","description":"Research keyword metrics, related terms, monthly trends, expansion opportunities, and domain search visibility with XiaoFlow.","websiteUrl":"https://www.xiaoflow.com/mcp","icon":"https://mcp.xiaoflow.com/icon.png","logoUrl":"https://mcp.xiaoflow.com/icon.png","logo_url":"https://mcp.xiaoflow.com/icon.png","icons":[{"src":"https://mcp.xiaoflow.com/icon.png","mimeType":"image/png","sizes":["256x256"]},{"src":"https://www.xiaoflow.com/icon.png","mimeType":"image/png","sizes":["256x256"]}]}},"jsonrpc":"2.0","id":1},"http_status":200,"headers":{"content-type":"application/json"}}},"protocol_version_probe":{"status":"warning","latency_ms":null,"details":{"claimed_version":"2025-03-26","validator_protocol_version":"2025-03-26","latest_known_version":"2025-11-25","releases_behind":2,"lag_days":244}},"tools_list":{"status":"ok","latency_ms":864.22,"details":{"url":"https://www.xiaoflow.com/mcp","payload":{"result":{"tools":[{"name":"discover_keywords","description":"Legacy alias for related keyword discovery. Returns paginated keyword metrics and monthly history. When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"keyword":{"type":"string","description":"Primary keyword seed."},"url":{"type":"string","description":"Page URL seed."},"site":{"type":"string","description":"Root domain seed."},"location":{"type":"string","description":"Geo ID or ISO (e.g. 2840 or US)."},"language":{"type":"string","description":"Language ID or code (e.g. 1000 or en)."}}},"title":"Discover Keywords (Legacy)","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Successful keyword result page.","properties":{"success":{"type":"boolean","description":"Whether the request completed successfully."},"data":{"type":"array","description":"Keyword results.","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}},"total":{"type":"integer","description":"Total known matching results."},"page":{"type":"integer","description":"Current one-based page."},"next_page":{"type":["integer","null"],"description":"Next page number, or null when complete."},"has_more":{"type":"boolean","description":"Whether another result page is available."},"error":{"type":"string","description":"Human-readable error when success is false."},"code":{"type":"string","description":"Stable machine-readable error code."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Discover Keywords (Legacy)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_keyword_metrics","description":"Get exact-match base metrics and 1-48 months of monthly history for one keyword. When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"keyword":{"type":"string","description":"Exact keyword text."},"history_months":{"type":"integer","minimum":1,"maximum":48,"default":12,"description":"Number of monthly history points to return, from 1 through 48."},"location":{"type":"string","description":"Geo ID or ISO country code, e.g. 2840 or US."},"language":{"type":"string","description":"Language ID or code, e.g. 1000 or en."}},"required":["keyword"]},"title":"Get Keyword Metrics","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Successful keyword result page.","properties":{"success":{"type":"boolean","description":"Whether the request completed successfully."},"data":{"type":"array","description":"Keyword results.","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}},"total":{"type":"integer","description":"Total known matching results."},"page":{"type":"integer","description":"Current one-based page."},"next_page":{"type":["integer","null"],"description":"Next page number, or null when complete."},"has_more":{"type":"boolean","description":"Whether another result page is available."},"error":{"type":"string","description":"Human-readable error when success is false."},"code":{"type":"string","description":"Stable machine-readable error code."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Get Keyword Metrics","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_related_keywords","description":"Get all related keywords for a seed with metrics and optional 1-48 month history. Paginate until has_more=false; there is no total-result cap. When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"seed":{"type":"string","description":"Seed keyword."},"history_months":{"type":"integer","minimum":1,"maximum":48,"default":12,"description":"Number of monthly history points to return, from 1 through 48."},"page":{"type":"integer","minimum":1,"default":1,"description":"One-based result page number."},"page_size":{"type":"integer","minimum":1,"maximum":1000,"default":100,"description":"Number of results per page; maximum 1,000."},"location":{"type":"string","description":"Google Ads geo target ID or ISO country code, for example 2840 or US."},"language":{"type":"string","description":"Google Ads language ID or language code, for example 1000 or en."},"force":{"type":"boolean","description":"Request fresh discovery when cached coverage is insufficient."}},"required":["seed"]},"title":"Get Related Keywords","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Successful keyword result page.","properties":{"success":{"type":"boolean","description":"Whether the request completed successfully."},"data":{"type":"array","description":"Keyword results.","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}},"total":{"type":"integer","description":"Total known matching results."},"page":{"type":"integer","description":"Current one-based page."},"next_page":{"type":["integer","null"],"description":"Next page number, or null when complete."},"has_more":{"type":"boolean","description":"Whether another result page is available."},"error":{"type":"string","description":"Human-readable error when success is false."},"code":{"type":"string","description":"Stable machine-readable error code."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Get Related Keywords","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"bulk_keyword_metrics","description":"Get exact-match base metrics and 1-48 months of history for up to 1,000 keywords in one request. When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"keywords":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string"},"description":"Keywords to analyze; accepts up to 1,000 unique phrases."},"history_months":{"type":"integer","minimum":1,"maximum":48,"default":12,"description":"Number of monthly history points to return, from 1 through 48."},"location":{"type":"string","description":"Google Ads geo target ID or ISO country code, for example 2840 or US."},"language":{"type":"string","description":"Google Ads language ID or language code, for example 1000 or en."}},"required":["keywords"]},"title":"Get Bulk Keyword Metrics","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Successful keyword result page.","properties":{"success":{"type":"boolean","description":"Whether the request completed successfully."},"data":{"type":"array","description":"Keyword results.","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}},"total":{"type":"integer","description":"Total known matching results."},"page":{"type":"integer","description":"Current one-based page."},"next_page":{"type":["integer","null"],"description":"Next page number, or null when complete."},"has_more":{"type":"boolean","description":"Whether another result page is available."},"error":{"type":"string","description":"Human-readable error when success is false."},"code":{"type":"string","description":"Stable machine-readable error code."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Get Bulk Keyword Metrics","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"start_keyword_expansion","description":"Start an asynchronous breadth-first/round-based keyword expansion from one or more seeds. When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"seeds":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string"},"description":"One to 20 seed keywords used as expansion starting points."},"max_iterations":{"type":"integer","minimum":1,"maximum":10,"default":5,"description":"Maximum breadth-first expansion rounds, from 1 through 10."},"min_search_volume":{"type":"integer","minimum":0,"default":0,"description":"Exclude discovered keywords below this monthly search volume."},"location_id":{"type":"integer","default":2840,"description":"Google Ads numeric geo target ID; 2840 represents the United States."},"language_id":{"type":"integer","default":1000,"description":"Google Ads numeric language ID; 1000 represents English."},"include_rules":{"type":"array","items":{"type":"string"},"description":"Optional text rules; results must match at least one supplied rule."},"exclude_rules":{"type":"array","items":{"type":"string"},"description":"Optional text rules; matching results are removed."}},"required":["seeds"]},"title":"Start Keyword Expansion","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Asynchronous keyword-expansion task creation result.","properties":{"success":{"type":"boolean","description":"Whether the task was accepted."},"task_id":{"type":"integer","description":"Task identifier used for polling."},"status":{"type":"string","description":"Initial task status."},"error":{"type":"string","description":"Human-readable error when task creation fails."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Start Keyword Expansion","readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},{"name":"get_quota","description":"Check current XiaoFlow account credits, balance, remaining compute units (CU), used quota, daily limits, and tier. Call this tool whenever the user asks about remaining credits, balance, quota, account status, or available compute units.","inputSchema":{"type":"object","properties":{}},"title":"Get Account Balance & Quota","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"User account credit balance and quota limits.","properties":{"success":{"type":"boolean"},"remaining":{"type":"integer","description":"Remaining compute units (CU)."},"credits":{"type":"integer","description":"Current credits balance."},"used":{"type":"integer","description":"Used compute units."},"limit":{"type":"integer","description":"Daily limit."},"type":{"type":"string","description":"User tier type."}},"additionalProperties":true},"annotations":{"title":"Get Account Balance & Quota","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_keyword_expansion_status","description":"Poll a round-based expansion task. Returns progress, depth, counts, provenance and results when requested. When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"task_id":{"type":"integer","description":"Numeric task identifier returned by start_keyword_expansion."},"include_results":{"type":"boolean","default":false,"description":"When true, include accumulated expansion results with task status."}},"required":["task_id"]},"title":"Get Keyword Expansion Status","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Current state and optional results for an expansion task.","properties":{"success":{"type":"boolean","description":"Whether task status was retrieved."},"task_id":{"type":"integer","description":"Expansion task identifier."},"status":{"type":"string","description":"queued, running, completed, or failed."},"progress":{"type":"number","description":"Completion percentage from 0 to 100."},"results":{"type":"array","description":"Accumulated keyword results when requested.","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}},"error":{"type":"string","description":"Task or request failure description."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Get Keyword Expansion Status","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"analyze_url","description":"Domain/site keyword discovery via /api/v1/websites (requires brand=0|1). Use site for full domain mapping; use url for a single page via /api/v1/keywords. When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Single page URL (uses /api/v1/keywords)."},"site":{"type":"string","description":"Domain for /api/v1/websites discovery."},"brand":{"type":"integer","enum":[0,1],"description":"0=domain keywords, 1=brand keywords (required with site)."},"location":{"type":"string","description":"Geo ID or ISO."},"language":{"type":"string","description":"Language ID or code."}}},"title":"Analyze URL or Site","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Domain visibility metrics or keyword results.","properties":{"success":{"type":"boolean","description":"Whether the request completed successfully."},"domain":{"type":"string","description":"Normalized domain name."},"data":{"description":"Domain metrics, trends, or keyword records.","oneOf":[{"type":"object"},{"type":"array","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}}]},"total":{"type":"integer","description":"Total matching domain keywords."},"page":{"type":"integer","description":"Current one-based page."},"has_more":{"type":"boolean","description":"Whether another page is available."},"error":{"type":"string","description":"Human-readable error when success is false."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Analyze URL or Site","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_domain_stats","description":"Website overview metrics and traffic history. GET /api/v1/websites/:domain?brand=0|1 When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Domain (e.g. example.com)."},"brand":{"type":"integer","enum":[0,1],"description":"0=domain overview, 1=brand overview."},"location":{"type":"string","description":"Geo ID or ISO."},"language":{"type":"string","description":"Language ID or code."}},"required":["domain","brand"]},"title":"Get Domain Statistics","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Domain visibility metrics or keyword results.","properties":{"success":{"type":"boolean","description":"Whether the request completed successfully."},"domain":{"type":"string","description":"Normalized domain name."},"data":{"description":"Domain metrics, trends, or keyword records.","oneOf":[{"type":"object"},{"type":"array","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}}]},"total":{"type":"integer","description":"Total matching domain keywords."},"page":{"type":"integer","description":"Current one-based page."},"has_more":{"type":"boolean","description":"Whether another page is available."},"error":{"type":"string","description":"Human-readable error when success is false."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Get Domain Statistics","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"list_domain_keywords","description":"Paginated keyword list for a domain. GET /api/v1/websites/:domain/keywords?brand=0|1 When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","description":"Normalized domain name without a path, for example example.com."},"brand":{"type":"integer","enum":[0,1],"description":"Set to 0 for domain data or 1 for brand-focused data."},"location":{"type":"string","description":"Google Ads geo target ID or ISO country code, for example 2840 or US."},"language":{"type":"string","description":"Google Ads language ID or language code, for example 1000 or en."},"page":{"type":"integer","description":"One-based result page number."},"page_size":{"type":"integer","description":"Number of results per page; maximum 1,000."}},"required":["domain","brand"]},"title":"List Domain Keywords","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Domain visibility metrics or keyword results.","properties":{"success":{"type":"boolean","description":"Whether the request completed successfully."},"domain":{"type":"string","description":"Normalized domain name."},"data":{"description":"Domain metrics, trends, or keyword records.","oneOf":[{"type":"object"},{"type":"array","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}}]},"total":{"type":"integer","description":"Total matching domain keywords."},"page":{"type":"integer","description":"Current one-based page."},"has_more":{"type":"boolean","description":"Whether another page is available."},"error":{"type":"string","description":"Human-readable error when success is false."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"List Domain Keywords","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_keyword_details","description":"Historical volume for a keyword slug. When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"slug":{"type":"string","description":"URL-safe keyword slug returned by a XiaoFlow keyword result."},"time_range":{"type":"string","enum":["12m","24m","48m"],"description":"Historical window to return: 12m, 24m, or 48m."},"location":{"type":"string","description":"Google Ads geo target ID or ISO country code, for example 2840 or US."},"language":{"type":"string","description":"Google Ads language ID or language code, for example 1000 or en."}},"required":["slug"]},"title":"Get Keyword Details","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Successful keyword result page.","properties":{"success":{"type":"boolean","description":"Whether the request completed successfully."},"data":{"type":"array","description":"Keyword results.","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}},"total":{"type":"integer","description":"Total known matching results."},"page":{"type":"integer","description":"Current one-based page."},"next_page":{"type":["integer","null"],"description":"Next page number, or null when complete."},"has_more":{"type":"boolean","description":"Whether another result page is available."},"error":{"type":"string","description":"Human-readable error when success is false."},"code":{"type":"string","description":"Stable machine-readable error code."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Get Keyword Details","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"bulk_keyword_lookup","description":"Bulk volume/CPC for up to 1,000 keywords. When presenting output to the user, you MUST include the 48-month search trend chart image markdown ![Search Volume Trend](https://quickchart.io/chart?...) from the tool result, along with the formatted KPI and keyword table.","inputSchema":{"type":"object","properties":{"keywords":{"type":"array","items":{"type":"string"},"description":"List of keywords to analyze."},"location":{"type":"string","description":"Google Ads geo target ID or ISO country code, for example 2840 or US."},"language":{"type":"string","description":"Google Ads language ID or language code, for example 1000 or en."}},"required":["keywords"]},"title":"Bulk Keyword Lookup (Legacy)","_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]},"ui":{"resourceUri":"ui://xiaoflow/keyword-dashboard","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"]}}},"outputSchema":{"type":"object","description":"Successful keyword result page.","properties":{"success":{"type":"boolean","description":"Whether the request completed successfully."},"data":{"type":"array","description":"Keyword results.","items":{"type":"object","description":"Keyword metrics and optional monthly history.","properties":{"keyword":{"type":"string","description":"Keyword text."},"slug":{"type":"string","description":"URL-safe keyword identifier."},"search_volume":{"type":"integer","description":"Average monthly search volume."},"competition_index":{"type":"integer","description":"Paid-search competition index from 0 to 100."},"competition":{"type":"string","description":"Human-readable competition level."},"top_of_page_bid_low":{"type":"number","description":"Low top-of-page bid estimate."},"top_of_page_bid_high":{"type":"number","description":"High top-of-page bid estimate."},"intent":{"type":"string","description":"Inferred search intent."},"history":{"type":"array","description":"Monthly history in chronological order.","items":{"type":"object","description":"Monthly historical search-volume observation.","properties":{"year":{"type":"integer","description":"Four-digit calendar year."},"month":{"type":"integer","minimum":1,"maximum":12,"description":"Calendar month number."},"search_volume":{"type":"integer","description":"Monthly search volume."}},"required":["year","month","search_volume"],"additionalProperties":true}}},"required":["keyword"],"additionalProperties":true}},"total":{"type":"integer","description":"Total known matching results."},"page":{"type":"integer","description":"Current one-based page."},"next_page":{"type":["integer","null"],"description":"Next page number, or null when complete."},"has_more":{"type":"boolean","description":"Whether another result page is available."},"error":{"type":"string","description":"Human-readable error when success is false."},"code":{"type":"string","description":"Stable machine-readable error code."}},"required":["success"],"additionalProperties":true},"annotations":{"title":"Bulk Keyword Lookup (Legacy)","readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}}]},"jsonrpc":"2.0","id":2},"http_status":200,"headers":{"content-type":"application/json"}}},"prompts_list":{"status":"ok","latency_ms":373.24,"details":{"url":"https://www.xiaoflow.com/mcp","payload":{"result":{"prompts":[]},"jsonrpc":"2.0","id":3},"http_status":200,"headers":{"content-type":"application/json"}}},"prompt_get":{"status":"missing","latency_ms":null,"details":{"reason":"no_prompt_name"}},"resources_list":{"status":"ok","latency_ms":343.01,"details":{"url":"https://www.xiaoflow.com/mcp","payload":{"result":{"resources":[{"uri":"ui://xiaoflow/keyword-dashboard-v3","name":"XiaoFlow Keyword Intelligence Dashboard","mimeType":"text/html;profile=mcp-app","description":"Interactive XiaoFlow keyword analytics dashboard with charts and table widgets","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"],"font-src":["'self'","data:","https://fonts.gstatic.com"],"frame-src":["'none'"],"object-src":["'none'"],"base-uri":["'self'"]},"_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"],"font-src":["'self'","data:","https://fonts.gstatic.com"],"frame-src":["'none'"],"object-src":["'none'"],"base-uri":["'self'"]},"ui":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"],"font-src":["'self'","data:","https://fonts.gstatic.com"],"frame-src":["'none'"],"object-src":["'none'"],"base-uri":["'self'"]}},"widget":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"],"font-src":["'self'","data:","https://fonts.gstatic.com"],"frame-src":["'none'"],"object-src":["'none'"],"base-uri":["'self'"]}}}}]},"jsonrpc":"2.0","id":5},"http_status":200,"headers":{"content-type":"application/json"}}},"resource_read":{"status":"ok","latency_ms":246.73,"details":{"url":"https://www.xiaoflow.com/mcp","payload":{"result":{"contents":[{"uri":"ui://xiaoflow/keyword-dashboard-v3","mimeType":"text/html;profile=mcp-app","text":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>XiaoFlow Keyword Intelligence</title>\n  <style>\n    :root {\n      --font: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n      --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n      --bg: #ffffff;\n      --panel: #ffffff;\n      --border: #e2e8f0;\n      --ink: #0f172a;\n      --muted: #64748b;\n      --brand: #2563eb;\n      --brand-bg: #eff6ff;\n    }\n    @media (prefers-color-scheme: dark) {\n      :root {\n        --bg: #09090b;\n        --panel: #121215;\n        --border: #27272a;\n        --ink: #f4f4f5;\n        --muted: #a1a1aa;\n        --brand: #3b82f6;\n        --brand-bg: #1e293b;\n      }\n    }\n    * { box-sizing: border-box; margin: 0; padding: 0; }\n    body {\n      font-family: var(--font);\n      background-color: var(--bg);\n      color: var(--ink);\n      padding: 14px;\n      line-height: 1.4;\n      font-size: 13px;\n      -webkit-font-smoothing: antialiased;\n    }\n    .container {\n      max-width: 980px;\n      margin: 0 auto;\n      display: flex;\n      flex-direction: column;\n      gap: 12px;\n    }\n    .card {\n      background: var(--panel);\n      border: 1px solid var(--border);\n      border-radius: 12px;\n      padding: 14px 16px;\n      box-shadow: 0 1px 3px rgba(0,0,0,0.03);\n    }\n    .header {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 12px;\n      flex-wrap: wrap;\n    }\n    .brand-link {\n      display: flex;\n      align-items: center;\n      gap: 10px;\n      text-decoration: none;\n      color: inherit;\n      transition: opacity 0.15s;\n    }\n    .brand-link:hover { opacity: 0.85; }\n    .logo-box {\n      width: 32px;\n      height: 32px;\n      border-radius: 8px;\n      background: linear-gradient(135deg, #2563eb, #7c3aed);\n      color: #fff;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      font-weight: 800;\n      font-size: 15px;\n      box-shadow: 0 2px 6px rgba(37,99,235,0.25);\n    }\n    .title-box h2 {\n      font-size: 15px;\n      font-weight: 700;\n      letter-spacing: -0.01em;\n      color: var(--ink);\n    }\n    .title-box p {\n      font-size: 11px;\n      color: var(--muted);\n    }\n    .btn-link {\n      display: inline-flex;\n      align-items: center;\n      gap: 5px;\n      font-size: 12px;\n      font-weight: 600;\n      color: var(--brand);\n      text-decoration: none;\n      padding: 6px 12px;\n      border-radius: 6px;\n      background: var(--brand-bg);\n      transition: opacity 0.15s;\n    }\n    .btn-link:hover { opacity: 0.85; }\n    .kpi-grid {\n      display: grid;\n      grid-template-columns: repeat(4, 1fr);\n      gap: 10px;\n    }\n    @media (max-width: 600px) {\n      .kpi-grid { grid-template-columns: repeat(2, 1fr); }\n    }\n    .kpi-card {\n      background: var(--panel);\n      border: 1px solid var(--border);\n      border-radius: 10px;\n      padding: 12px;\n      display: flex;\n      flex-direction: column;\n      gap: 4px;\n    }\n    .kpi-label {\n      font-size: 10px;\n      font-weight: 600;\n      text-transform: uppercase;\n      letter-spacing: 0.05em;\n      color: var(--muted);\n    }\n    .kpi-val {\n      font-size: 18px;\n      font-weight: 800;\n      color: var(--ink);\n      letter-spacing: -0.02em;\n    }\n    .kpi-val.mono { font-family: var(--mono); }\n    .kpi-tag {\n      font-size: 10px;\n      font-weight: 600;\n      padding: 2px 6px;\n      border-radius: 4px;\n      width: fit-content;\n      margin-top: 2px;\n    }\n    .tag-blue { background: #eff6ff; color: #2563eb; }\n    .tag-green { background: #f0fdf4; color: #16a34a; }\n    .tag-amber { background: #fffbeb; color: #d97706; }\n    .tag-purple { background: #faf5ff; color: #9333ea; }\n    .chart-card {\n      padding: 14px 16px;\n    }\n    .chart-title {\n      font-size: 12px;\n      font-weight: 700;\n      color: var(--ink);\n      margin-bottom: 10px;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n    }\n    .chart-wrapper {\n      position: relative;\n      width: 100%;\n      height: 170px;\n    }\n    .trend-svg {\n      width: 100%;\n      height: 100%;\n      overflow: visible;\n    }\n    .table-card {\n      padding: 0;\n      overflow: hidden;\n    }\n    .table-head-bar {\n      padding: 12px 16px;\n      border-bottom: 1px solid var(--border);\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n    }\n    .table-head-bar h3 {\n      font-size: 12px;\n      font-weight: 700;\n    }\n    .table-head-bar span {\n      font-size: 11px;\n      color: var(--muted);\n    }\n    .table-scroll {\n      max-height: 420px;\n      overflow-y: auto;\n    }\n    table {\n      width: 100%;\n      border-collapse: collapse;\n      text-align: left;\n      font-size: 12px;\n    }\n    th {\n      position: sticky;\n      top: 0;\n      background: var(--panel);\n      padding: 8px 12px;\n      font-weight: 700;\n      color: var(--muted);\n      border-bottom: 1px solid var(--border);\n      font-size: 10px;\n      text-transform: uppercase;\n      letter-spacing: 0.05em;\n      z-index: 2;\n      cursor: pointer;\n      user-select: none;\n      white-space: nowrap;\n      transition: background 0.15s, color 0.15s;\n    }\n    th:hover {\n      background: rgba(0,0,0,0.03);\n      color: var(--ink);\n    }\n    .th-content {\n      display: inline-flex;\n      align-items: center;\n      gap: 4px;\n    }\n    .sort-icon {\n      font-size: 10px;\n      opacity: 0.4;\n      transition: opacity 0.15s;\n    }\n    th.active-sort .sort-icon {\n      opacity: 1;\n      color: var(--brand);\n      font-weight: 800;\n    }\n    th.active-sort {\n      color: var(--brand);\n    }\n    td {\n      padding: 8px 12px;\n      border-bottom: 1px solid var(--border);\n      white-space: nowrap;\n    }\n    tr:last-child td { border-bottom: none; }\n    tr:hover td { background: rgba(0,0,0,0.02); }\n    .td-kw { font-weight: 700; color: var(--ink); }\n    .kw-table-link {\n      display: inline-flex;\n      align-items: center;\n      gap: 5px;\n      color: var(--brand);\n      text-decoration: none;\n      font-weight: 700;\n      transition: color 0.15s;\n    }\n    .kw-table-link:hover {\n      text-decoration: underline;\n      color: #1d4ed8;\n    }\n    .kw-ext-icon {\n      opacity: 0.5;\n      transition: opacity 0.15s;\n    }\n    .kw-table-link:hover .kw-ext-icon {\n      opacity: 1;\n    }\n    .td-vol { font-family: var(--mono); font-weight: 700; color: var(--brand); }\n    .td-num { font-family: var(--mono); color: var(--muted); }\n    .badge {\n      display: inline-block;\n      padding: 2px 6px;\n      border-radius: 4px;\n      font-size: 9px;\n      font-weight: 700;\n    }\n    .table-footer-bar {\n      padding: 12px 16px;\n      border-top: 1px solid var(--border);\n      background: var(--brand-bg);\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      flex-wrap: wrap;\n      gap: 10px;\n    }\n    .table-footer-info {\n      font-size: 11px;\n      font-weight: 600;\n      color: var(--muted);\n    }\n    .btn-footer-link {\n      display: inline-flex;\n      align-items: center;\n      gap: 6px;\n      font-size: 12px;\n      font-weight: 700;\n      color: var(--brand);\n      text-decoration: none;\n      padding: 6px 14px;\n      border-radius: 6px;\n      background: #ffffff;\n      border: 1px solid var(--border);\n      box-shadow: 0 1px 2px rgba(0,0,0,0.04);\n      transition: all 0.15s;\n    }\n    .btn-footer-link:hover {\n      background: var(--brand);\n      color: #ffffff;\n      border-color: var(--brand);\n    }\n  </style>\n</head>\n<body>\n  <div class=\"container\" id=\"app\">\n    <div class=\"card header\">\n      <a href=\"https://www.xiaoflow.com\" target=\"_blank\" class=\"brand-link\" title=\"Visit XiaoFlow.com\">\n        <div class=\"logo-box\">X</div>\n        <div class=\"title-box\">\n          <h2 id=\"kw-title\">XiaoFlow Intelligence</h2>\n          <p id=\"kw-sub\">Google Keyword Planner Intelligence &bull; 48M Analytics</p>\n        </div>\n      </a>\n      <a id=\"btn-web-link\" href=\"https://www.xiaoflow.com\" target=\"_blank\" class=\"btn-link\">\n        <span>View Full Analysis</span>\n        <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n      </a>\n    </div>\n\n    <div class=\"kpi-grid\">\n      <div class=\"kpi-card\">\n        <div class=\"kpi-label\">Monthly Volume</div>\n        <div class=\"kpi-val\" id=\"kpi-volume\">-</div>\n        <span class=\"kpi-tag tag-blue\">Search Demand</span>\n      </div>\n      <div class=\"kpi-card\">\n        <div class=\"kpi-label\">CPC Bid Range</div>\n        <div class=\"kpi-val mono\" id=\"kpi-cpc\">-</div>\n        <span class=\"kpi-tag tag-green\">Google Ads</span>\n      </div>\n      <div class=\"kpi-card\">\n        <div class=\"kpi-label\">Competition</div>\n        <div class=\"kpi-val\" id=\"kpi-comp\">-</div>\n        <span class=\"kpi-tag tag-amber\" id=\"kpi-comp-badge\">Index</span>\n      </div>\n      <div class=\"kpi-card\">\n        <div class=\"kpi-label\">YoY Growth</div>\n        <div class=\"kpi-val\" id=\"kpi-yoy\">-</div>\n        <span class=\"kpi-tag tag-purple\">48M Trend</span>\n      </div>\n    </div>\n\n    <div class=\"card chart-card\">\n      <div class=\"chart-title\">\n        <span>48-Month Search Volume History</span>\n        <span id=\"chart-range\" style=\"font-size: 11px; color: var(--muted); font-weight: 500;\"></span>\n      </div>\n      <div class=\"chart-wrapper\" id=\"chart-container\">\n        <svg class=\"trend-svg\" id=\"trend-svg\" preserveAspectRatio=\"none\" viewBox=\"0 0 800 200\"></svg>\n      </div>\n    </div>\n\n    <div class=\"card table-card\">\n      <div class=\"table-head-bar\">\n        <h3>Related Keyword Opportunities</h3>\n        <span id=\"table-count\">0 keywords</span>\n      </div>\n      <div class=\"table-scroll\">\n        <table>\n          <thead>\n            <tr>\n              <th onclick=\"handleSort('k')\" id=\"th-k\">\n                <div class=\"th-content\"><span>KEYWORD</span><span class=\"sort-icon\">⇅</span></div>\n              </th>\n              <th onclick=\"handleSort('v')\" id=\"th-v\" class=\"active-sort\">\n                <div class=\"th-content\"><span>VOLUME</span><span class=\"sort-icon\">▼</span></div>\n              </th>\n              <th onclick=\"handleSort('i')\" id=\"th-i\">\n                <div class=\"th-content\"><span>COMPETITION (INDEXED VALUE)</span><span class=\"sort-icon\">⇅</span></div>\n              </th>\n              <th onclick=\"handleSort('co')\" id=\"th-co\">\n                <div class=\"th-content\"><span>COMPETITION</span><span class=\"sort-icon\">⇅</span></div>\n              </th>\n              <th onclick=\"handleSort('l')\" id=\"th-l\">\n                <div class=\"th-content\"><span>MIN CPC</span><span class=\"sort-icon\">⇅</span></div>\n              </th>\n              <th onclick=\"handleSort('h')\" id=\"th-h\">\n                <div class=\"th-content\"><span>MAX CPC</span><span class=\"sort-icon\">⇅</span></div>\n              </th>\n              <th onclick=\"handleSort('m3')\" id=\"th-m3\">\n                <div class=\"th-content\"><span>3M CHANGE</span><span class=\"sort-icon\">⇅</span></div>\n              </th>\n              <th onclick=\"handleSort('y')\" id=\"th-y\">\n                <div class=\"th-content\"><span>YOY CHANGE</span><span class=\"sort-icon\">⇅</span></div>\n              </th>\n            </tr>\n          </thead>\n          <tbody id=\"kw-tbody\"></tbody>\n        </table>\n      </div>\n      <div class=\"table-footer-bar\">\n        <span class=\"table-footer-info\" id=\"footer-count-text\">Showing Top 100 high-intent keyword opportunities</span>\n        <a id=\"btn-view-all\" href=\"https://www.xiaoflow.com\" target=\"_blank\" class=\"btn-footer-link\">\n          <span>View All Related Keywords on XiaoFlow</span>\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><path d=\"M5 12h14M12 5l7 7-7 7\"/></svg>\n        </a>\n      </div>\n    </div>\n  </div>\n\n  <script>\n    var currentSortKey = \"v\";\n    var currentSortDir = \"desc\";\n    var cachedData = [];\n\n    function toSlug(s) {\n      if (!s) return \"overview\";\n      return String(s)\n        .trim()\n        .toLowerCase()\n        .replace(/[^a-z0-9]+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\") || \"overview\";\n    }\n\n    function parseData(raw) {\n      if (!raw) {\n        if (typeof window !== \"undefined\" && window.__INITIAL_DATA__) return parseData(window.__INITIAL_DATA__);\n        return [];\n      }\n      if (typeof raw === \"string\") {\n        try {\n          var p = JSON.parse(raw);\n          var res = parseData(p);\n          if (res && res.length > 0) return res;\n        } catch (e) {}\n        return [];\n      }\n      if (Array.isArray(raw)) return raw;\n      if (raw.structuredContent) {\n        var r1 = parseData(raw.structuredContent);\n        if (r1 && r1.length > 0) return r1;\n      }\n      if (raw.results) {\n        var r2 = parseData(raw.results);\n        if (r2 && r2.length > 0) return r2;\n      }\n      if (raw.data) {\n        var r3 = parseData(raw.data);\n        if (r3 && r3.length > 0) return r3;\n      }\n      if (raw.params) {\n        var r4 = parseData(raw.params.data || raw.params);\n        if (r4 && r4.length > 0) return r4;\n      }\n      if (raw.toolResult) {\n        var r5 = parseData(raw.toolResult);\n        if (r5 && r5.length > 0) return r5;\n      }\n      if (raw.toolOutput) {\n        var r6 = parseData(raw.toolOutput);\n        if (r6 && r6.length > 0) return r6;\n      }\n      if (raw.result) {\n        var r7 = parseData(raw.result);\n        if (r7 && r7.length > 0) return r7;\n      }\n      if (raw.payload) {\n        var r8 = parseData(raw.payload);\n        if (r8 && r8.length > 0) return r8;\n      }\n      if (raw.content && Array.isArray(raw.content)) {\n        for (var i = 0; i < raw.content.length; i++) {\n          var item = raw.content[i];\n          if (item && item.text) {\n            var parsed = parseData(item.text);\n            if (parsed && parsed.length > 0) return parsed;\n          }\n        }\n      }\n      if (raw.k || raw.keyword || raw.v || raw.search_volume) return [raw];\n      return [];\n    }\n\n    function handleSort(key) {\n      if (currentSortKey === key) {\n        currentSortDir = currentSortDir === \"desc\" ? \"asc\" : \"desc\";\n      } else {\n        currentSortKey = key;\n        currentSortDir = (key === \"k\" || key === \"co\") ? \"asc\" : \"desc\";\n      }\n      updateSortHeaderIcons();\n      renderTableRows();\n    }\n\n    function updateSortHeaderIcons() {\n      var keys = [\"k\", \"v\", \"i\", \"co\", \"l\", \"h\", \"m3\", \"y\"];\n      for (var i = 0; i < keys.length; i++) {\n        var k = keys[i];\n        var th = document.getElementById(\"th-\" + k);\n        if (th) {\n          var icon = th.querySelector(\".sort-icon\");\n          if (k === currentSortKey) {\n            th.classList.add(\"active-sort\");\n            if (icon) icon.textContent = currentSortDir === \"asc\" ? \"▲\" : \"▼\";\n          } else {\n            th.classList.remove(\"active-sort\");\n            if (icon) icon.textContent = \"⇅\";\n          }\n        }\n      }\n    }\n\n    function renderTableRows() {\n      var tbody = document.getElementById(\"kw-tbody\");\n      if (!tbody || !cachedData || cachedData.length === 0) return;\n\n      var topList = cachedData.slice(0, 100);\n\n      // Sort items\n      topList.sort(function(a, b) {\n        var valA = getSortValue(a, currentSortKey);\n        var valB = getSortValue(b, currentSortKey);\n        if (typeof valA === \"string\") {\n          return currentSortDir === \"asc\" ? valA.localeCompare(valB) : valB.localeCompare(valA);\n        }\n        return currentSortDir === \"asc\" ? (valA - valB) : (valB - valA);\n      });\n\n      tbody.innerHTML = \"\";\n      for (var j = 0; j < topList.length; j++) {\n        var kw = topList[j];\n        var kName = kw.k || kw.keyword || \"\";\n        var kwSlug = toSlug(kw.k || kw.keyword || kName);\n        var kVol = Number(kw.v ?? kw.search_volume ?? kw.avg_monthly_searches ?? 0).toLocaleString();\n        var kCompIdx = Number(kw.i ?? kw.competition_index ?? kw.cmp_idx ?? 0);\n        var kComp = String(kw.co ?? kw.competition ?? kw.cmp ?? \"HIGH\");\n        var kLow = Number(kw.l ?? kw.top_of_page_bid_low ?? kw.bid_l ?? 0).toFixed(2);\n        var kHigh = Number(kw.h ?? kw.top_of_page_bid_high ?? kw.bid_h ?? 0).toFixed(2);\n        var k3m = Number(kw.m3 ?? kw.three_month_change ?? kw.c_3m ?? 0);\n        var kYoy = Number(kw.y ?? kw.yoy_change ?? kw.yoy_growth_percent ?? kw.c_yoy ?? 0);\n\n        var m3Text = (k3m > 0 ? \"+\" : \"\") + k3m + \"%\";\n        var yoyText = (kYoy > 0 ? \"+\" : \"\") + kYoy + \"%\";\n\n        var tr = document.createElement(\"tr\");\n        tr.innerHTML = '<td class=\"td-kw\">' +\n          '<a href=\"https://www.xiaoflow.com/keywords/' + kwSlug + '\" target=\"_blank\" class=\"kw-table-link\">' +\n            '<span>' + kName + '</span>' +\n            '<svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" class=\"kw-ext-icon\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>' +\n          '</a>' +\n        '</td>' +\n        '<td class=\"td-vol\">' + kVol + '</td>' +\n        '<td class=\"td-num\">' + kCompIdx + '</td>' +\n        '<td><span class=\"badge\" style=\"background:#f1f5f9; color:#334155;\">' + kComp + '</span></td>' +\n        '<td class=\"td-num\">$' + kLow + '</td>' +\n        '<td class=\"td-num\">$' + kHigh + '</td>' +\n        '<td class=\"td-num\" style=\"font-weight:600; color:' + (k3m > 0 ? \"#16a34a\" : (k3m < 0 ? \"#dc2626\" : \"var(--muted)\")) + '\">' + m3Text + '</td>' +\n        '<td class=\"td-num\" style=\"font-weight:600; color:' + (kYoy > 0 ? \"#16a34a\" : (kYoy < 0 ? \"#dc2626\" : \"var(--muted)\")) + '\">' + yoyText + '</td>';\n        tbody.appendChild(tr);\n      }\n    }\n\n    function getSortValue(item, key) {\n      if (key === \"k\") return String(item.k || item.keyword || \"\").toLowerCase();\n      if (key === \"v\") return Number(item.v ?? item.search_volume ?? item.avg_monthly_searches ?? 0);\n      if (key === \"i\") return Number(item.i ?? item.competition_index ?? item.cmp_idx ?? 0);\n      if (key === \"co\") return String(item.co ?? item.competition ?? item.cmp ?? \"\").toLowerCase();\n      if (key === \"l\") return Number(item.l ?? item.top_of_page_bid_low ?? item.bid_l ?? 0);\n      if (key === \"h\") return Number(item.h ?? item.top_of_page_bid_high ?? item.bid_h ?? 0);\n      if (key === \"m3\") return Number(item.m3 ?? item.three_month_change ?? item.c_3m ?? 0);\n      if (key === \"y\") return Number(item.y ?? item.yoy_change ?? item.yoy_growth_percent ?? item.c_yoy ?? 0);\n      return 0;\n    }\n\n    function renderDashboard(input) {\n      try {\n        var data = parseData(input);\n        if (!data || !Array.isArray(data) || data.length === 0) return;\n        cachedData = data;\n\n        var main = data[0] || {};\n        var kwName = main.k || main.keyword || \"Keyword Overview\";\n        var vol = Number(main.v ?? main.search_volume ?? main.avg_monthly_searches ?? 0);\n        var low = Number(main.l ?? main.top_of_page_bid_low ?? main.bid_l ?? 0);\n        var high = Number(main.h ?? main.top_of_page_bid_high ?? main.bid_h ?? 0);\n        var comp = String(main.co ?? main.competition ?? main.cmp ?? \"HIGH\");\n        var compIdx = Number(main.i ?? main.competition_index ?? main.cmp_idx ?? 88);\n        var yoy = Number(main.y ?? main.yoy_change ?? main.c_yoy ?? 0);\n        var history = main.t || main.history || [];\n\n        var elTitle = document.getElementById(\"kw-title\");\n        if (elTitle) elTitle.textContent = kwName;\n\n        var slug = toSlug(main.k || main.keyword || kwName);\n        var detailUrl = \"https://www.xiaoflow.com/keywords/\" + slug;\n\n        var elLink = document.getElementById(\"btn-web-link\");\n        if (elLink) elLink.href = detailUrl;\n\n        var elViewAll = document.getElementById(\"btn-view-all\");\n        if (elViewAll) elViewAll.href = detailUrl;\n\n        var elVol = document.getElementById(\"kpi-volume\");\n        if (elVol) elVol.textContent = vol.toLocaleString();\n\n        var elCpc = document.getElementById(\"kpi-cpc\");\n        if (elCpc) elCpc.textContent = \"$\" + low.toFixed(2) + \" - $\" + high.toFixed(2);\n\n        var elComp = document.getElementById(\"kpi-comp\");\n        if (elComp) elComp.textContent = comp;\n\n        var elBadge = document.getElementById(\"kpi-comp-badge\");\n        if (elBadge) elBadge.textContent = compIdx + \"/100 Index\";\n\n        var elYoy = document.getElementById(\"kpi-yoy\");\n        if (elYoy) elYoy.textContent = (yoy > 0 ? \"+\" : \"\") + yoy + \"%\";\n\n        renderSvgChart(history);\n\n        var elCount = document.getElementById(\"table-count\");\n        if (elCount) elCount.textContent = Math.min(data.length, 100) + \" keywords\";\n\n        var elFooterText = document.getElementById(\"footer-count-text\");\n        if (elFooterText) elFooterText.textContent = \"Showing Top \" + Math.min(data.length, 100) + \" high-intent keyword opportunities\";\n\n        renderTableRows();\n      } catch (err) {\n        console.error(\"XiaoFlow Widget Render Error:\", err);\n      }\n    }\n\n    function renderSvgChart(history) {\n      try {\n        var svg = document.getElementById(\"trend-svg\");\n        if (!svg) return;\n        if (!history || history.length < 2) {\n          svg.innerHTML = '<text x=\"400\" y=\"100\" text-anchor=\"middle\" fill=\"#94a3b8\" font-size=\"12\">Search volume trend data unavailable</text>';\n          return;\n        }\n\n        var W = 800, H = 200, padT = 20, padB = 30, padL = 45, padR = 20;\n        var plotW = W - padL - padR;\n        var plotH = H - padT - padB;\n\n        var vals = [];\n        for (var i = 0; i < history.length; i++) {\n          vals.push(Number(history[i].v ?? history[i].search_volume ?? 0));\n        }\n        var minV = Math.min.apply(null, vals) * 0.9;\n        var maxV = Math.max.apply(null, vals.concat([100])) * 1.08;\n\n        var points = [];\n        for (var k = 0; k < history.length; k++) {\n          var x = padL + (k / (history.length - 1)) * plotW;\n          var val = Number(history[k].v ?? history[k].search_volume ?? 0);\n          var y = padT + (1 - (val - minV) / (maxV - minV)) * plotH;\n          var dateStr = (history[k].y ? String(history[k].y).slice(-2) : \"25\") + \"/\" + String(history[k].m || 1).padStart(2, \"0\");\n          points.push({ x: x, y: y, val: val, date: dateStr });\n        }\n\n        var pathD = \"M \" + points[0].x + \" \" + points[0].y;\n        for (var m = 0; m < points.length - 1; m++) {\n          var p0 = points[m];\n          var p1 = points[m + 1];\n          var mx = (p0.x + p1.x) / 2;\n          pathD += \" C \" + mx + \" \" + p0.y + \", \" + mx + \" \" + p1.y + \", \" + p1.x + \" \" + p1.y;\n        }\n\n        var fillD = pathD + \" L \" + points[points.length - 1].x + \" \" + (H - padB) + \" L \" + points[0].x + \" \" + (H - padB) + \" Z\";\n\n        var gridSvg = \"\";\n        for (var g = 0; g <= 3; g++) {\n          var gy = padT + (g / 3) * plotH;\n          var gVal = Math.round(maxV - (g / 3) * (maxV - minV));\n          gridSvg += '<line x1=\"' + padL + '\" y1=\"' + gy + '\" x2=\"' + (W - padR) + '\" y2=\"' + gy + '\" stroke=\"#e2e8f0\" stroke-width=\"1\" stroke-dasharray=\"4\"/>';\n          gridSvg += '<text x=\"' + (padL - 8) + '\" y=\"' + (gy + 4) + '\" text-anchor=\"end\" fill=\"#94a3b8\" font-size=\"10\" font-family=\"monospace\">' + (gVal >= 1000 ? (gVal/1000).toFixed(0) + \"k\" : gVal) + '</text>';\n        }\n\n        var labelsSvg = \"\";\n        var step = Math.max(1, Math.floor(points.length / 8));\n        for (var n = 0; n < points.length; n++) {\n          if (n % step === 0 || n === points.length - 1) {\n            labelsSvg += '<text x=\"' + points[n].x + '\" y=\"' + (H - 10) + '\" text-anchor=\"middle\" fill=\"#64748b\" font-size=\"10\" font-family=\"monospace\">' + points[n].date + '</text>';\n          }\n        }\n\n        var dotsSvg = \"\";\n        for (var d = 0; d < points.length; d++) {\n          dotsSvg += '<circle cx=\"' + points[d].x + '\" cy=\"' + points[d].y + '\" r=\"3.5\" fill=\"#2563eb\" stroke=\"#ffffff\" stroke-width=\"2\"><title>' + points[d].date + \": \" + points[d].val.toLocaleString() + '</title></circle>';\n        }\n\n        svg.innerHTML = '<defs>' +\n          '<linearGradient id=\"chartGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">' +\n            '<stop offset=\"0%\" stop-color=\"#2563eb\" stop-opacity=\"0.22\"/>' +\n            '<stop offset=\"100%\" stop-color=\"#2563eb\" stop-opacity=\"0.01\"/>' +\n          '</linearGradient>' +\n        '</defs>' +\n        gridSvg +\n        '<path d=\"' + fillD + '\" fill=\"url(#chartGrad)\"/>' +\n        '<path d=\"' + pathD + '\" fill=\"none\" stroke=\"#2563eb\" stroke-width=\"3\" stroke-linecap=\"round\"/>' +\n        dotsSvg +\n        labelsSvg;\n\n        if (points.length > 0) {\n          var elRange = document.getElementById(\"chart-range\");\n          if (elRange) elRange.textContent = points[0].date + \" - \" + points[points.length - 1].date;\n        }\n      } catch (err) {\n        console.error(\"XiaoFlow Chart Render Error:\", err);\n      }\n    }\n\n    // Message & event listeners\n    window.addEventListener(\"message\", function(e) {\n      if (!e) return;\n      var d = e.data;\n      if (!d) return;\n      if (typeof d === \"string\") {\n        try { d = JSON.parse(d); } catch (err) {}\n      }\n      renderDashboard(d);\n    });\n\n    function checkGlobals() {\n      try {\n        if (typeof window !== \"undefined\") {\n          if (window.__INITIAL_DATA__) renderDashboard(window.__INITIAL_DATA__);\n          if (window.openai) {\n            if (typeof window.openai.onData === \"function\") {\n              window.openai.onData(function(data) { renderDashboard(data); });\n            }\n            if (typeof window.openai.onToolResult === \"function\") {\n              window.openai.onToolResult(function(data) { renderDashboard(data); });\n            }\n            if (typeof window.openai.subscribe === \"function\") {\n              window.openai.subscribe(function(data) { renderDashboard(data); });\n            }\n            if (window.openai.toolResult) renderDashboard(window.openai.toolResult);\n            if (window.openai.toolOutput) renderDashboard(window.openai.toolOutput);\n            if (window.openai.data) renderDashboard(window.openai.data);\n          }\n        }\n      } catch (e) {}\n    }\n\n    checkGlobals();\n    var pollCount = 0;\n    var interval = setInterval(function() {\n      checkGlobals();\n      if (pollCount++ > 40) {\n        clearInterval(interval);\n      }\n    }, 200);\n\n    // Handshake\n    try {\n      if (window.parent && window.parent !== window) {\n        window.parent.postMessage({ type: \"ready\" }, \"*\");\n        window.parent.postMessage({ type: \"openai:ready\" }, \"*\");\n        window.parent.postMessage({ jsonrpc: \"2.0\", method: \"ui/ready\" }, \"*\");\n        window.parent.postMessage({ jsonrpc: \"2.0\", method: \"ui/notifications/ready\" }, \"*\");\n      }\n    } catch (err) {}\n  </script>\n</body>\n</html>","domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"],"font-src":["'self'","data:","https://fonts.gstatic.com"],"frame-src":["'none'"],"object-src":["'none'"],"base-uri":["'self'"]},"_meta":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"],"font-src":["'self'","data:","https://fonts.gstatic.com"],"frame-src":["'none'"],"object-src":["'none'"],"base-uri":["'self'"]},"ui":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"],"font-src":["'self'","data:","https://fonts.gstatic.com"],"frame-src":["'none'"],"object-src":["'none'"],"base-uri":["'self'"]}},"widget":{"domain":"mcp.xiaoflow.com","csp":{"default-src":["'self'"],"script-src":["'self'","'unsafe-inline'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https://quickchart.io","https://www.xiaoflow.com","https://mcp.xiaoflow.com"],"connect-src":["'self'","https://api.xiaoflow.com","https://mcp.xiaoflow.com"],"font-src":["'self'","data:","https://fonts.gstatic.com"],"frame-src":["'none'"],"object-src":["'none'"],"base-uri":["'self'"]}}}}]},"jsonrpc":"2.0","id":6},"http_status":200,"headers":{"content-type":"application/json"},"resource_uri":"ui://xiaoflow/keyword-dashboard-v3"}},"determinism_probe":{"status":"ok","latency_ms":348.05,"details":{"attempts":2,"successful":2,"matches":2,"stable_ratio":1.0,"baseline_signature":"db2b89d52dda2307acedb779fdc4e4ccd8b919ca1a1cedc3265998f6eca1c833","errors":[]}},"instruction_tool_reference_probe":{"status":"ok","latency_ms":null,"details":{"referenced_tools":[],"missing_tools":[],"observed_tool_count":12}},"session_resume_probe":{"status":"warning","latency_ms":null,"details":{"reason":"no_session_id","transport":"streamable-http","resume_expected":true,"protocol_version":"2025-03-26"}},"step_up_auth_probe":{"status":"warning","latency_ms":null,"details":{"oauth_present":true,"auth_required_checks":[],"supported_scopes":["email","mcp","openid","profile"],"scope_specificity_ratio":0.2,"broad_scopes":[],"challenge_headers":[],"step_up_signals":[],"minimal_scope_documented":false}},"transport_compliance_probe":{"status":"warning","latency_ms":376.35,"details":{"transport":"streamable-http","session_id_present":false,"protocol_header_present":false,"last_event_id_visible":false,"requested_protocol_version":"2025-03-26","bad_protocol_status_code":400,"bad_protocol_payload":{"jsonrpc":"2.0","error":{"code":-32000,"message":"Bad Request: Unsupported protocol version: 1999-99-99 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)"},"id":null},"bad_protocol_headers":{"content-type":"application/json"},"bad_protocol_error":null,"delete_status_code":null,"delete_error":null,"expired_session_status_code":null,"expired_session_error":null,"issues":["missing_session_id","missing_protocol_header"]}},"utility_coverage_probe":{"status":"missing","latency_ms":245.88,"details":{"completions":{"advertised":false,"sample_target":{"type":"resource","uri":"ui://xiaoflow/keyword-dashboard-v3"},"live_probe":"not_executed"},"pagination":{"supported":false,"next_cursor_methods":[],"metadata_signal":false},"tasks":{"advertised":false,"probe_status":"missing","http_status":200},"initialize_capability_keys":["prompts","resources","tools"]}},"advanced_capabilities_probe":{"status":"ok","latency_ms":null,"details":{"capabilities":{"prompts":true,"resources":true,"completions":false,"roots":false,"sampling":false,"elicitation":false,"structured_outputs":true,"resource_links":true},"enabled_count":4,"enabled":["prompts","resource_links","resources","structured_outputs"],"initialize_capability_keys":["prompts","resources","tools"]}},"tool_snapshot_probe":{"status":"ok","latency_ms":null,"details":{"current_tool_count":12,"previous_tool_count":12,"similarity":1.0,"added":[],"removed":[],"changed_outputs":[]}},"connector_replay_probe":{"status":"ok","latency_ms":null,"details":{"backward_compatible":true,"would_break_after_refresh":false,"added_tools":[],"removed_tools":[],"required_arg_breaks":[],"output_breaks":[],"additive_output_changes":[]}},"request_association_probe":{"status":"missing","latency_ms":null,"details":{"reason":"no_request_association_capabilities_advertised"}},"interactive_flow_probe":{"status":"ok","latency_ms":null,"details":{"risk_hits":[],"safe_hits":[],"oauth_supported":true,"prompt_available":false}},"action_safety_probe":{"status":"ok","latency_ms":null,"details":{"summary":{"tool_count":12,"high_risk_tools":0,"destructive_tools":0,"exec_tools":0,"egress_tools":12,"secret_tools":0,"bulk_access_tools":0,"declared_non_read_only_tools":1,"annotation_conflict_tools":0,"risk_distribution":{"low":0,"medium":12,"high":0,"critical":0},"capability_distribution":{"read":11,"network":12},"has_mutating_capability":false,"has_non_read_capability":false},"auth_present":true,"safeguard_count":2,"confirmation_signals":[],"reason":null}},"official_registry_probe":{"status":"missing","latency_ms":null,"details":{"registry_source":"github_topic_registry","direct_match":false,"official_peer_count":0}},"provenance_divergence_probe":{"status":"not_assessed","latency_ms":null,"details":{"direct_official_match":false,"registry_title":null,"server_card_title":"xiaoflow-mcp","registry_version":null,"server_card_version":"1.0.0","registry_homepage":null,"server_card_homepage":null,"registry_repository":null,"server_card_repository":null,"drift_fields":[],"metadata_document_count":2,"compared_fields":["title","version","homepage","repository"],"readable_sources":["server_card"],"comparable_field_count":0}},"schema_divergence_probe":{"status":"error","latency_ms":null,"details":{"severity":"critical","compared_tool_count":1,"tools_missing_from_live":["analyze_domain_keywords","batch_keyword_metrics","list_categories","search_keywords"],"tools_missing_from_card":["analyze_url","bulk_keyword_lookup","bulk_keyword_metrics","discover_keywords","get_domain_stats","get_keyword_details","get_keyword_expansion_status","get_quota","get_related_keywords","list_domain_keywords","start_keyword_expansion"],"tool_divergences":[{"output_schema_card_declared":false,"output_schema_live_declared":true,"tool":"get_keyword_metrics"}],"tools_with_omitted_schema":["get_keyword_metrics"],"compared_dimensions":["server_name","server_version","declared_vs_observed_auth","tool_membership","parameter_names","required_parameters","parameter_types","output_schema_presence"],"server_name_mismatch":true,"card_server_name":"xiaoflow-mcp","live_server_name":"xiaoflow-mcp-server","server_version_mismatch":true,"card_server_version":"1.0.0","live_server_version":"1.3.1","auth_scheme_mismatch":false,"card_auth_schemes":[],"live_oauth_observed":true}},"connector_publishability_probe":{"status":"warning","latency_ms":null,"details":{"transport":"streamable-http","tool_count":12,"high_risk_tools":0,"blockers":["protocol_version","session_resume","step_up_auth","transport_compliance","request_association"],"criteria":{"remote_transport":true,"initialize":true,"tools_list":true,"protocol_version":false,"session_resume":false,"step_up_auth":false,"transport_compliance":false,"connector_replay":true,"request_association":false,"action_safety":true,"server_card":true,"tool_surface":true,"auth_flow":true}}}}},"active_alerts":[{"code":"server_card_schema_drifted","severity":"critical","title":"Server card describes a different server: card says \"xiaoflow-mcp\", live says \"xiaoflow-mcp-server\"","message":"Severity: critical. The published server card's serverInfo.name does not match the live server. 1 tool(s) diverge on output-schema presence: get_keyword_metrics.","addressee":"publisher"}],"maintainer_analytics":{},"public_server_reputation":{},"maintainer_response_quality":{},"maintainer_annotations":[],"maintainer_rebuttals":[],"security_posture_summary":{},"tool_security_inventory":[],"transport_compliance":{},"utility_coverage":{},"write_action_governance":{},"provenance_divergence":{},"alias_consolidation":{},"alert_routing":{},"authenticated_validation":{},"hosted_runtime":{},"action_controls_diff":null,"benchmark_tasks":[],"latest_capability_counts":{},"point_loss_breakdown":[],"verdict_traces":{},"current_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_6c19e6acf5abcc00","generated_at":"2026-08-23T20:48:29.670499+00:00","trust_evaluated_at":"2026-08-23T20:48:29.670499+00:00","evidence_revision":"0cd896814f1d41348e27dcf5","source":"current_snapshot","server":"github-xiaoq-in/xiaoflow-mcp","last_validated_at":"2026-08-23T20:26:44.893477+00:00","validation_age_hours":0.36,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-08-23T20:26:44.893477+00:00","age_hours":0.36,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":69.79,"raw_score":69.79,"confidence_score":83.8,"confidence_weighted_score":58.4,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":69.79,"display_score":69.79,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Block for production","why":"unauthenticated behavior not proven","next_action":"revalidate, add safeguards, export policy","reason_count":1},"production_readiness_class":{"code":"needs_remediation","label":"Needs remediation","reason":"Degraded from Safe for evaluation: 1 open high/critical-severity alert(s) are active, including at least one that blocks even evaluation-level trust."},"evidence_confidence":{"score":83.75,"label":"high","validation_age_hours":0.36,"live_check_count":22,"basis":{"evidence_bearing_validations":7,"affirmative_live_check_count":22,"validation_age_hours":0.36,"freshness_threshold_hours":24}},"active_alerts":[{"code":"server_card_schema_drifted","severity":"critical","title":"Server card describes a different server: card says \"xiaoflow-mcp\", live says \"xiaoflow-mcp-server\""}],"active_alert_summary":{"critical":1,"high":0,"medium":0,"low":0,"high_or_critical":1,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-23T20:48:29.670499+00:00"}},"trust_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_6c19e6acf5abcc00","generated_at":"2026-08-23T20:48:29.670499+00:00","trust_evaluated_at":"2026-08-23T20:48:29.670499+00:00","evidence_revision":"0cd896814f1d41348e27dcf5","source":"current_snapshot","server":"github-xiaoq-in/xiaoflow-mcp","last_validated_at":"2026-08-23T20:26:44.893477+00:00","validation_age_hours":0.36,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-08-23T20:26:44.893477+00:00","age_hours":0.36,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":69.79,"raw_score":69.79,"confidence_score":83.8,"confidence_weighted_score":58.4,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":69.79,"display_score":69.79,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Block for production","why":"unauthenticated behavior not proven","next_action":"revalidate, add safeguards, export policy","reason_count":1},"production_readiness_class":{"code":"needs_remediation","label":"Needs remediation","reason":"Degraded from Safe for evaluation: 1 open high/critical-severity alert(s) are active, including at least one that blocks even evaluation-level trust."},"evidence_confidence":{"score":83.75,"label":"high","validation_age_hours":0.36,"live_check_count":22,"basis":{"evidence_bearing_validations":7,"affirmative_live_check_count":22,"validation_age_hours":0.36,"freshness_threshold_hours":24}},"active_alerts":[{"code":"server_card_schema_drifted","severity":"critical","title":"Server card describes a different server: card says \"xiaoflow-mcp\", live says \"xiaoflow-mcp-server\""}],"active_alert_summary":{"critical":1,"high":0,"medium":0,"low":0,"high_or_critical":1,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-23T20:48:29.670499+00:00"}},"agent_commerce":{},"latest_claim":null,"maintainer_profile_slug":null,"watch_summary":{},"partial":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"trust_evaluated_at":"2026-08-23T20:48:29.670499+00:00","evidence_revision":"0cd896814f1d41348e27dcf5","active_alert_summary":{"critical":1,"high":0,"medium":0,"low":0,"high_or_critical":1,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-23T20:48:29.670499+00:00"},"owner_opted_out":false},"latest_validation":null,"current_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_6c19e6acf5abcc00","generated_at":"2026-08-23T20:48:29.670499+00:00","trust_evaluated_at":"2026-08-23T20:48:29.670499+00:00","evidence_revision":"0cd896814f1d41348e27dcf5","source":"current_snapshot","server":"github-xiaoq-in/xiaoflow-mcp","last_validated_at":"2026-08-23T20:26:44.893477+00:00","validation_age_hours":0.36,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-08-23T20:26:44.893477+00:00","age_hours":0.36,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":69.79,"raw_score":69.79,"confidence_score":83.8,"confidence_weighted_score":58.4,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":69.79,"display_score":69.79,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Block for production","why":"unauthenticated behavior not proven","next_action":"revalidate, add safeguards, export policy","reason_count":1},"production_readiness_class":{"code":"needs_remediation","label":"Needs remediation","reason":"Degraded from Safe for evaluation: 1 open high/critical-severity alert(s) are active, including at least one that blocks even evaluation-level trust."},"evidence_confidence":{"score":83.75,"label":"high","validation_age_hours":0.36,"live_check_count":22,"basis":{"evidence_bearing_validations":7,"affirmative_live_check_count":22,"validation_age_hours":0.36,"freshness_threshold_hours":24}},"active_alerts":[{"code":"server_card_schema_drifted","severity":"critical","title":"Server card describes a different server: card says \"xiaoflow-mcp\", live says \"xiaoflow-mcp-server\""}],"active_alert_summary":{"critical":1,"high":0,"medium":0,"low":0,"high_or_critical":1,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-23T20:48:29.670499+00:00"}},"trust_snapshot":{"schema_version":"verify.trust_snapshot.v1","snapshot_id":"trustsnap_6c19e6acf5abcc00","generated_at":"2026-08-23T20:48:29.670499+00:00","trust_evaluated_at":"2026-08-23T20:48:29.670499+00:00","evidence_revision":"0cd896814f1d41348e27dcf5","source":"current_snapshot","server":"github-xiaoq-in/xiaoflow-mcp","last_validated_at":"2026-08-23T20:26:44.893477+00:00","validation_age_hours":0.36,"freshness":{"schema_version":"verify.freshness_profile.v1","last_validated_at":"2026-08-23T20:26:44.893477+00:00","age_hours":0.36,"bucket":"verified_last_24h","label":"Verified in last 24h","badges":["verified_last_24h"],"freshness_sla_hours":720.0,"freshness_sla_status":"met","stale_score_suppressed":false,"display_score":69.79,"raw_score":69.79,"confidence_score":83.8,"confidence_weighted_score":58.4,"tier_status":[{"tier":"community","label":"Community","freshness_sla_hours":720,"met":true,"priority_revalidation":false},{"tier":"pro","label":"Pro","freshness_sla_hours":168,"met":true,"priority_revalidation":true},{"tier":"enterprise","label":"Enterprise","freshness_sla_hours":24,"met":true,"priority_revalidation":true}]},"current_status":"healthy","current_score":69.79,"display_score":69.79,"stale_score_suppressed":false,"production_trust_decision":{"schema_version":"verify.executive_verdict.v1","decision":"Block for production","why":"unauthenticated behavior not proven","next_action":"revalidate, add safeguards, export policy","reason_count":1},"production_readiness_class":{"code":"needs_remediation","label":"Needs remediation","reason":"Degraded from Safe for evaluation: 1 open high/critical-severity alert(s) are active, including at least one that blocks even evaluation-level trust."},"evidence_confidence":{"score":83.75,"label":"high","validation_age_hours":0.36,"live_check_count":22,"basis":{"evidence_bearing_validations":7,"affirmative_live_check_count":22,"validation_age_hours":0.36,"freshness_threshold_hours":24}},"active_alerts":[{"code":"server_card_schema_drifted","severity":"critical","title":"Server card describes a different server: card says \"xiaoflow-mcp\", live says \"xiaoflow-mcp-server\""}],"active_alert_summary":{"critical":1,"high":0,"medium":0,"low":0,"high_or_critical":1,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-23T20:48:29.670499+00:00"}},"partial":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"snapshot_invariant":{"schema_version":"verify.snapshot_invariant.v1","server":"github-xiaoq-in/xiaoflow-mcp","ok":true,"surface_snapshot_ids":{"page":"trustsnap_6c19e6acf5abcc00","badge":null,"report":"trustsnap_6c19e6acf5abcc00","policy":null},"checked_surfaces":["page","report"],"unchecked_surfaces":["badge","policy"],"checked_count_surfaces":[],"count_mismatches":{},"checked_at":"2026-08-23T20:48:29.659305+00:00"},"history":{},"production_readiness":{"code":"needs_remediation","label":"Needs remediation","reason":"Degraded from Safe for evaluation: 1 open high/critical-severity alert(s) are active, including at least one that blocks even evaluation-level trust.","badge":"score-low","critical_alerts":1,"high_or_critical_alerts":1,"degraded_by_active_alerts":true},"agent_commerce_readiness":{},"evidence_confidence":{"score":83.75,"label":"high","reason":"Based on 7 recent validations, 22 captured checks, and validation age of 0.4 hours.","live_check_count":22,"validation_age_hours":0.36,"basis":{"evidence_bearing_validations":7,"affirmative_live_check_count":22,"validation_age_hours":0.36,"freshness_threshold_hours":24}},"recommended_for":[],"active_alerts":[{"code":"server_card_schema_drifted","severity":"critical","title":"Server card describes a different server: card says \"xiaoflow-mcp\", live says \"xiaoflow-mcp-server\"","message":"Severity: critical. The published server card's serverInfo.name does not match the live server. 1 tool(s) diverge on output-schema presence: get_keyword_metrics.","addressee":"publisher"}],"remediations":[],"cache_note":"Fast fallback response; full report evidence is deferred to protect web capacity. Fields listed in fields_unavailable (including tool_security_inventory, and write_action_governance) are not yet computed on this response -- an empty value means unchecked, not confirmed clean. Treat partial responses as indeterminate.","publisher_claim":{"verified":false,"status":"unclaimed","claim_url":"https://verify.sentinelsignal.io/claim?server=github-xiaoq-in%2Fxiaoflow-mcp&source=report_json","reason_code":"claim_to_publish_metadata","reason":"Claim this profile to verify publisher identity, add evidence, and manage trust metadata.","score_neutral":true},"observed_attention":{"schema":"verify.observed_attention.v1","window_days":30,"level":"none","label":"No observed attention","summary":"No recent machine-readable trust or discovery activity observed for this server.","segments":{"useful_ai_user":{"level":"none","observed":false,"description":"AI-assisted user sessions such as ChatGPT/User or Claude/User."},"machine_trust_evaluator":{"level":"none","observed":false,"description":"Synthetic sessions inspecting multiple trust surfaces such as report, policy, ledger, badge, trust-summary, or compare."},"possible_agent_or_script":{"level":"none","observed":false,"description":"Structured direct sessions with rapid profile, compare, report, policy, badge, or trust-surface fan-out."},"isolated_machine_surface":{"level":"none","observed":false,"description":"Aged-out direct synthetic singleton sessions that touched a machine-readable trust surface without becoming a broader evaluator."},"ai_crawler":{"level":"none","observed":false,"description":"Known AI crawler activity such as ClaudeBot, GPTBot, or similar crawlers."},"search_crawler":{"level":"none","observed":false,"description":"Search and SEO crawler activity."},"browser_like_automation":{"level":"none","observed":false,"description":"Browser-like synthetic sessions with rapid structured endpoint activity."},"confirmed_human":{"level":"none","observed":false,"description":"Confirmed browser-session human activity."}},"surfaces_observed":{"server_profile":false,"compare":false,"compare_json":false,"compare_api":false,"report_json":false,"policy":false,"ledger":false,"badge_metadata":false,"badge_svg":false,"trust_summary":false,"mcp_tool":false},"claim_prompt":{"recommended":false,"reason":"No claim prompt is recommended from observed attention in the current window."},"notes":["Observed attention is based on segmented first-party telemetry.","Crawler and evaluator activity is not treated as confirmed human demand.","Public levels are bucketed to avoid exposing raw traffic counts."]},"owner_activation":{"claim_recommended":false,"reason":"no_observed_attention"},"related_machine_surfaces":{"compare_index":"/compare.json","compare_api":"/v1/compare?server=github-xiaoq-in%2Fxiaoflow-mcp","trust_summary":"/v1/servers/github-xiaoq-in/xiaoflow-mcp/trust-summary","ledger":"/v1/servers/github-xiaoq-in/xiaoflow-mcp/ledger","policy":"/v1/servers/github-xiaoq-in/xiaoflow-mcp/policy","report":"/v1/servers/github-xiaoq-in/xiaoflow-mcp/report"},"intelligence_api":{"available":true,"signup_url":"https://verify.sentinelsignal.io/verify-intelligence-api","use_case":"Programmatic MCP server trust, comparison, policy, and evidence enrichment."},"trust_evaluated_at":"2026-08-23T20:48:29.670499+00:00","evidence_revision":"0cd896814f1d41348e27dcf5","active_alert_summary":{"critical":1,"high":0,"medium":0,"low":0,"high_or_critical":1,"total":1},"materialization":{"state":"partial","trust_core_complete":true,"fields_unavailable":["tool_security_inventory","security_posture_summary","write_action_governance","capability_taxonomy","remediations"],"materialized_at":"2026-08-23T20:48:29.670499+00:00"}}