{"ai_agent_requests_external":333428,"ai_agent_requests_total":4668297,"ai_agent_top_platforms":[{"name":"Internal","platform":"internal","requests":4067691},{"name":"Direct","platform":"direct","requests":142926},{"name":"Claude","platform":"claude","requests":142821},{"name":"Mcp","platform":"mcp","requests":103492},{"name":"Meta AI","platform":"meta","requests":62751},{"name":"ChatGPT","platform":"chatgpt","requests":48054},{"name":"Gemini","platform":"gemini","requests":32900},{"name":"Copilot","platform":"copilot","requests":25763},{"name":"Perplexity","platform":"perplexity","requests":11093},{"name":"Mcp_Generic","platform":"mcp_generic","requests":6700}],"ai_agent_top_platforms_external":[{"name":"Claude","platform":"claude","requests":142821},{"name":"Meta AI","platform":"meta","requests":62751},{"name":"ChatGPT","platform":"chatgpt","requests":48054},{"name":"Gemini","platform":"gemini","requests":32900},{"name":"Copilot","platform":"copilot","requests":25763},{"name":"Perplexity","platform":"perplexity","requests":11093},{"name":"Grok","platform":"grok","requests":6233},{"name":"DeepSeek","platform":"deepseek","requests":3107},{"name":"Cursor","platform":"cursor","requests":601},{"name":"You.com","platform":"you","requests":66}],"annualized_run_rate_from_7d":247676,"calls_by_platform_30d":[{"calls":9289,"platform":"mcp-generic-client","unique_ips":199},{"calls":3260,"platform":"smithery connect","unique_ips":1},{"calls":2560,"platform":"datacolo","unique_ips":2},{"calls":461,"platform":"anthropic/api","unique_ips":6},{"calls":304,"platform":"unknown","unique_ips":122},{"calls":157,"platform":"claude","unique_ips":13},{"calls":94,"platform":"anthropic/claudeai","unique_ips":11},{"calls":72,"platform":"claude-code","unique_ips":20},{"calls":64,"platform":"fabrique-c3-idempotency","unique_ips":1},{"calls":53,"platform":"connectors-manager","unique_ips":14},{"calls":33,"platform":"chatgpt","unique_ips":12},{"calls":15,"platform":"mcphub","unique_ips":2},{"calls":11,"platform":"cursor","unique_ips":1},{"calls":10,"platform":"mistral","unique_ips":3},{"calls":9,"platform":"visual studio code","unique_ips":1},{"calls":4,"platform":"arbor-hive-connector","unique_ips":1},{"calls":2,"platform":"robinsaige-verifier","unique_ips":1},{"calls":2,"platform":"toolrouter","unique_ips":1},{"calls":1,"platform":"claude-ai","unique_ips":1}],"canonical_view":"mcp_funnel_real","canonical_view_active":true,"conversions_30d":5,"conversions_attributed_30d":5,"conversions_by_platform_30d":[{"conversions":2,"platform":"web-direct"},{"conversions":1,"platform":"claude"},{"conversions":1,"platform":"mcp"},{"conversions":1,"platform":"organic-direct"}],"conversions_unattributed_30d":0,"deprecated_aliases":{"external_ips_7d_complete":"external_agents_7d","top_caller_calls_7d_complete":"top_caller_calls_7d","top_caller_pct_7d_complete":"top_caller_pct_7d"},"deprecated_aliases_note":"These keys are unchanged in VALUE and kept only so existing readers do not break. Their '_complete' suffix is INACCURATE: since PR #2254 they are computed on the rolling 7d window ending now, NOT on complete days, and none of them has a _prior sibling to form a delta against. Read the replacement key named here. For a window whose baseline does not move between requests, use GET /api/v1/reports/weekly-series \u2014 fixed, non-overlapping, complete ISO weeks only.","external_agents_7d":68,"external_ips_7d_complete":68,"keys_by_tier":{"enterprise":6,"free":114,"identified":392,"paid":43},"paid_signal_attribution_30d":{"attribution_rate_pct":25.0,"bridged_to_signal":1,"bridged_via_attribution_signal_id":1,"bridged_via_caller_key":0,"definition":"honest paid = stripe_customer_id NOT NULL, seed/comp/NLR excluded (identical filter to conversions_30d_real). 'bridged' = the paid row links to an upstream mcp_upgrade_signal via attribution_signal_id OR a shared caller_id (email/session/anon-hash) whose signal preceded the sale. 'unattributable' = no such bridge exists \u2014 reported honestly, NOT fabricated. This is the true end-to-end measurability of the signal -> paid path.","paid_total":4,"unattributable":3},"paid_tool_demand_30d":[{"calls":939,"tool":"get_grid_intelligence","users":209},{"calls":609,"tool":"analyze_site","users":201},{"calls":437,"tool":"get_fiber_intel","users":195},{"calls":304,"tool":"get_dchub_recommendation","users":190},{"calls":273,"tool":"compare_sites","users":185}],"pct_30d_of_lifetime":0.5,"pct_7d_of_lifetime":0.1,"press_headline_metric":"DC Hub served 2,368 external AI-agent tool calls in the week of 2026-08-03 (-71.6% WoW); 333,428 external requests led by Claude and Meta AI since launch.","press_headline_metric_basis":"weekly figure and WoW = the last COMPLETE ISO week of GET /api/v1/reports/weekly-series (weeks[-1].calls and wow.calls_pct, wow.baseline_is_fixed=true) \u2014 the CANONICAL identity population (mcp_calls_identity, agent_id, is_public_ip AND is_real_external; see real_external_agents_basis for the full definition) on a FIXED window. Deliberately NOT the rolling real_external_calls_7d / real_external_calls_wow_pct pair, which is correct as data but recomputes per request and so cannot be quoted verbatim; NOT tool_calls_7d_complete_real (complete-days population); NOT real_external_signals_7d (mcp_upgrade_signals, a signal count). Several weekly populations and windows live in this payload; this sentence quotes exactly one pair and names it here. Both numbers are stable between reads and stay stable until the next ISO week closes.","probe_platforms":["internal-dchub","curl","python-script","node-script","node-http-client","postman","insomnia","verify","dchub-canon-probe","canon"],"quota_wall":{"blocked_month":0,"by_tier_month":[],"enforce":true,"hits_month":0,"interpretation":"mcp_quota_wall_hits is created on the FIRST wall hit (ensure_wall_hits_table); there is no migration. table_exists=false means no key has ever reached its monthly quota \u2014 not that enforcement is broken. Verify with max(calls) in mcp_monthly_usage against TIER_LIMITS[tier].mcp_daily * 30 before suspecting the gate.","keys_first_hit_7d":0,"keys_month":0,"last_hit_at":null,"lazily_created":true,"month":"2026-08-01","table_exists":false},"real_external_agents_7d":68,"real_external_agents_basis":"COUNT(DISTINCT agent_id) / COUNT(*) FROM mcp_calls_identity WHERE is_public_ip AND is_real_external, rolling window ending now. Identity: agent_id = md5(first public X-Forwarded-For token), NULL for Cloudflare POP ranges (edge proxies never count as agents); is_public_ip drops private/CGNAT ranges. Exclusions: is_real_external = this module's real_calls_predicate() rendered into the view, plus the view's internal-IP and scripted-UA backstops \u2014 crawlers, probes, QA harnesses and self-traffic are OUT. calls counts every real-external call (including CF-POP rows that carry no agent identity). An IP-derived PROXY for agents: NAT under-counts, rotating egress over-counts.","real_external_agents_complete_wk":38,"real_external_agents_complete_wk_wow_pct":-55.3,"real_external_agents_prior_7d":39,"real_external_agents_prior_complete_wk":85,"real_external_agents_wow_pct":74.4,"real_external_calls_7d":2026,"real_external_calls_complete_wk":2368,"real_external_calls_complete_wk_wow_pct":-71.6,"real_external_calls_prior_7d":2745,"real_external_calls_wow_pct":-26.2,"real_external_complete_wk_basis":"COMPLETE ISO weeks (Mon-Sun) on mcp_calls_identity WHERE is_public_ip AND is_real_external \u2014 the partial current week is excluded by construction. Prefer this over the rolling WoW for any trend claim: a rolling distinct-agent count is dominated by whichever outlier days fall inside each window (2026-08-08: rolling read -65.3% while complete weeks read +37% on the same population, because one 30-agent day left the window).","real_external_signals_7d":942,"real_external_signals_basis":"COUNT(*) FROM mcp_funnel_real, rolling window ending now. mcp_funnel_real is a VIEW over **mcp_upgrade_signals** \u2014 this counts PAYWALL/UPGRADE SIGNALS (an agent hit a gated tool), NOT tool calls. It is NOT a subset of real_external_calls_7d and must never be compared to it: different table, different unit, different denominator, and the two routinely move in opposite directions. One call can raise zero or one signal, and a signal can outlive the call that raised it. For weekly external CALL volume use real_external_calls_7d (mcp_calls_identity, agent_id, same rolling window). Exclusions: the view's own mcp_client deny-list (self-heal, probes, QA harnesses, registry scanners) \u2014 NOT this module's real_calls_predicate(), so the exclusion sets are related but not equal.","real_external_signals_prior_7d":1181,"real_external_signals_wow_pct":-20.2,"signals_by_platform_30d":[{"conv_rate_pct":0.0,"converted":0,"platform":"mcp","sessions":382,"signals":4913,"unique_ips":168},{"conv_rate_pct":0.0,"converted":0,"platform":"smithery","sessions":417,"signals":926,"unique_ips":35},{"conv_rate_pct":1.613,"converted":1,"platform":"claude","sessions":15,"signals":62,"unique_ips":19},{"conv_rate_pct":0.0,"converted":0,"platform":"chatgpt","sessions":1,"signals":16,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"connectors-manager","sessions":12,"signals":12,"unique_ips":3},{"conv_rate_pct":0.0,"converted":0,"platform":"smitheryconnect","sessions":1,"signals":10,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"mistral","sessions":2,"signals":9,"unique_ips":3},{"conv_rate_pct":0.0,"converted":0,"platform":"mcp-generic-client","sessions":3,"signals":7,"unique_ips":3},{"conv_rate_pct":0.0,"converted":0,"platform":"cursor","sessions":7,"signals":7,"unique_ips":4},{"conv_rate_pct":0.0,"converted":0,"platform":"copilot","sessions":6,"signals":6,"unique_ips":3},{"conv_rate_pct":0.0,"converted":0,"platform":"mcphub","sessions":3,"signals":3,"unique_ips":2},{"conv_rate_pct":0.0,"converted":0,"platform":"skeptic","sessions":2,"signals":2,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"grok","sessions":1,"signals":2,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"visualstudiocode","sessions":1,"signals":1,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"claude-code","sessions":1,"signals":1,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"preflight","sessions":1,"signals":1,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"qa2","sessions":1,"signals":1,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"chat-ui-mcp","sessions":1,"signals":1,"unique_ips":1}],"time_to_convert_90d":[{"converted_sessions":1,"median_days_to_convert":4.15,"platform":"claude"},{"converted_sessions":1,"median_days_to_convert":19.04,"platform":"mcp"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"chatgpt"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"claude-code"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"claude-desktop"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"connectors-manager"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"copilot"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"cursor"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"deplete-two"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"e2e"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"fa3"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"fib"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"gap-poll"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"glama"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"grok"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"lechat"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"liner-mcp-verifier"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mcp-generic-client"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mcphub"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mistral"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mozilla/5.0"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mozilla/5.0 (linux; android 10; k) applewebkit/537.36 (khtml"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mozilla/5.0 (linux; android 11; rmx3581 build/rp1a.201005.00"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mozilla/5.0 (linux; android 12; infinix x6817) applewebkit/5"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mozilla/5.0 (linux; android 5.0) applewebkit/537.36 (khtml, "},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mozilla/5.0 (linux; arm_64; android 14; sm-a346e) applewebki"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mozilla/5.0 (macintosh; intel mac os x 10_15_7) applewebkit/"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mozilla/5.0 (x11; linux x86_64) applewebkit/537.36 (khtml, l"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"my-agent"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"node-fetch"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"opencode"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"preflight"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"qa2"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"reup-1"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"reup-2"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"reup-4"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"reup-5"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"reup-6"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"reup-7"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"reup-8"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"reup-9"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"skeptic"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"smithery"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"smitheryconnect"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"trace-agent"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"unknown"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"urlkey"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"uv2"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"vbind"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"visualstudiocode"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"vm2"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"anthropicapi"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"zowza-indexer"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"chat-ui-mcp"}],"tool_calls_30d":24805,"tool_calls_7d":4763,"tool_calls_7d_complete":4722,"tool_calls_7d_complete_real":2073,"tool_calls_7d_probes":2682,"tool_calls_7d_real":2081,"tool_calls_per_day_complete":675,"tool_calls_per_day_complete_real":296,"tool_calls_prior_7d_complete_real":2797,"tool_calls_total":260147,"tool_calls_wow_pct":-25.9,"top_caller_basis":"MAX(calls) per agent_id over agent_id IS NOT NULL / COUNT(*) FROM mcp_calls_identity WHERE is_public_ip AND is_real_external, rolling window ending now \u2014 the SAME table, window and exclusions as real_external_calls_7d, so pct is exactly calls / real_external_calls_7d and a reader who does the division gets the printed number. NUMERATOR excludes the NULL agent_id bucket (Cloudflare POP ranges are edge proxies, not a caller), so a POP bucket can never be published as 'the top caller'. DENOMINATOR keeps every real-external row, CF-POP rows included, so it stays identical to the published calls figure. callers = COUNT(DISTINCT agent_id), the same population as real_external_agents_7d. An IP-derived PROXY: NAT under-counts concentration, rotating egress over-counts it.","top_caller_calls_7d":156,"top_caller_calls_7d_complete":156,"top_caller_client":"Smithery Connect","top_caller_denominator_7d":2026,"top_caller_note":"Registry gateways and directory probes are deliberately NOT excluded from this population (mcp_calls_deloop._AMBIGUOUS_NOT_EXCLUDED) because a false exclusion would delete a real customer. Read the client name before treating this share as customer concentration.","top_caller_pct_7d":7.7,"top_caller_pct_7d_complete":7.7,"top_caller_platform":"smithery","top_signal_tools_30d":[{"callers":167,"n":459,"sessions":385,"tool":"get_grid_intelligence"},{"callers":157,"n":340,"sessions":330,"tool":"get_fiber_intel"},{"callers":152,"n":465,"sessions":292,"tool":"get_renewable_energy"},{"callers":161,"n":309,"sessions":285,"tool":"get_dchub_recommendation"},{"callers":153,"n":459,"sessions":283,"tool":"get_energy_prices"},{"callers":161,"n":272,"sessions":272,"tool":"compare_sites"},{"callers":158,"n":301,"sessions":270,"tool":"analyze_site"},{"callers":149,"n":434,"sessions":267,"tool":"get_water_risk"},{"callers":151,"n":408,"sessions":248,"tool":"get_grid_data"},{"callers":146,"n":443,"sessions":238,"tool":"get_market_intel"}],"unique_ips_7d_real":90,"unique_ips_7d_real_basis":"SECONDARY: DISTINCT raw ip_address strings (XFF chains count once per form), live real_calls_predicate() only. Superseded by real_external_agents_7d for any 'agents' display.","upgrade_signals_7d":1097}
