{"ai_agent_requests_external":729786,"ai_agent_requests_total":11650438,"ai_agent_top_platforms":[{"name":"Internal","platform":"internal","requests":10652154},{"name":"Claude","platform":"claude","requests":289240},{"name":"Meta AI","platform":"meta","requests":168079},{"name":"Direct","platform":"direct","requests":142926},{"name":"Mcp","platform":"mcp","requests":104561},{"name":"ChatGPT","platform":"chatgpt","requests":101006},{"name":"Perplexity","platform":"perplexity","requests":47536},{"name":"Bing","platform":"bing","requests":43366},{"name":"Gemini","platform":"gemini","requests":34758},{"name":"Copilot","platform":"copilot","requests":26021}],"ai_agent_top_platforms_external":[{"name":"Claude","platform":"claude","requests":289240},{"name":"Meta AI","platform":"meta","requests":168079},{"name":"ChatGPT","platform":"chatgpt","requests":101006},{"name":"Perplexity","platform":"perplexity","requests":47536},{"name":"Bing","platform":"bing","requests":43366},{"name":"Gemini","platform":"gemini","requests":34758},{"name":"Copilot","platform":"copilot","requests":26021},{"name":"You.com","platform":"you","requests":9024},{"name":"Grok","platform":"grok","requests":6686},{"name":"DeepSeek","platform":"deepseek","requests":3150}],"annualized_run_rate_from_7d":268216,"calls_by_platform_30d":[{"calls":771,"kind":"unattributed","platform":"mcp-generic-client","unique_ips":14},{"calls":478,"kind":"assistant","platform":"connectors-manager","unique_ips":72},{"calls":147,"kind":"assistant","platform":"anthropic/api","unique_ips":24},{"calls":132,"kind":"assistant","platform":"anthropic/claudeai","unique_ips":24},{"calls":125,"kind":"assistant","platform":"chatgpt","unique_ips":21},{"calls":115,"kind":"unknown","platform":"brick.blue","unique_ips":1},{"calls":72,"kind":"assistant","platform":"claude-code","unique_ips":19},{"calls":53,"kind":"assistant","platform":"cursor","unique_ips":3},{"calls":50,"kind":"unknown","platform":"unknown","unique_ips":20},{"calls":38,"kind":"unknown","platform":"fastn connect","unique_ips":1},{"calls":32,"kind":"assistant","platform":"claude","unique_ips":15},{"calls":25,"kind":"unknown","platform":"mistral-mcp-client","unique_ips":3},{"calls":25,"kind":"assistant","platform":"copilot","unique_ips":2},{"calls":15,"kind":"tooling","platform":"actionist-apps-verification","unique_ips":1},{"calls":15,"kind":"unknown","platform":"tendle","unique_ips":6},{"calls":14,"kind":"unknown","platform":"agent-scout","unique_ips":2},{"calls":11,"kind":"unknown","platform":"agent-collector","unique_ips":3},{"calls":7,"kind":"unknown","platform":"clono","unique_ips":4},{"calls":5,"kind":"assistant","platform":"grok","unique_ips":1},{"calls":3,"kind":"unknown","platform":"copilot-cli","unique_ips":2}],"canonical_view":"mcp_funnel_real","canonical_view_active":true,"checkout_started":{"definition":"checkout_started events: a /go/c (signed, MCP-minted) or /go/p click that redirected to a Stripe Payment Link. origin mcp_relay = pressed on the relay page (via=relay_page/relay_buy, or a /go/p ref the relay page mints: pk-/k-/tok-); mcp = a signed /go/c token carrying an MCP session or key ref; web = everything else. A start is not a payment. Same exclusions as quota_wall_hits. last_7d / prior_7d (A3): the same counts over the trailing 7 days and the 7 days before that, always 7-day windows whatever the funnel's days argument is.","from_relay_page":1,"last_7d":{"from_relay_page":1,"mcp_attributed":2,"mcp_identities":2,"started":200},"mcp_attributed":2,"mcp_identities":2,"prior_7d":{"from_relay_page":0,"mcp_attributed":0,"mcp_identities":0,"started":0},"started":200,"table_exists":true,"window_days":30},"claim_ladder_30d":{"auth_channel_note":"The MCP gateway sends auth_channel from 2026-10-20 (dchub-mcp-server _trackAuthChannel); earlier rows read 'unrecorded'. query = the key in the connector URL (connect_url); header / bearer = the client config; oauth = a sign-in token; session_restore = no credential, restored server-side; session = no credential, a key auto-bound earlier in the same session; rest_api = a REST call with the key (api_endpoint_log, no auth channel recorded).","auth_channel_recorded":true,"bind_rate":0.0339,"by_claim_channel":{"install":{"called_rate":null,"keys_called":0,"keys_claimed":0,"keys_mature_7d":0,"keys_returned_24h":0,"keys_returned_7d":0,"returned_24h_rate":null,"returned_7d_rate_mature":null},"mcp":{"called_rate":0.6667,"keys_called":6,"keys_claimed":9,"keys_mature_7d":8,"keys_returned_24h":1,"keys_returned_7d":1,"returned_24h_rate":0.1111,"returned_7d_rate_mature":0.125},"rest":{"called_rate":0.7647,"keys_called":13,"keys_claimed":17,"keys_mature_7d":11,"keys_returned_24h":1,"keys_returned_7d":1,"returned_24h_rate":0.0588,"returned_7d_rate_mature":0.0909},"web":{"called_rate":0.4848,"keys_called":16,"keys_claimed":33,"keys_mature_7d":24,"keys_returned_24h":2,"keys_returned_7d":2,"returned_24h_rate":0.0606,"returned_7d_rate_mature":0.0833}},"by_email":{"bound":{"called_rate":1.0,"keys_called":2,"keys_claimed":2,"keys_mature_7d":2,"keys_returned_24h":1,"keys_returned_7d":1,"returned_24h_rate":0.5,"returned_7d_rate_mature":0.5},"unbound":{"called_rate":0.5789,"keys_called":33,"keys_claimed":57,"keys_mature_7d":41,"keys_returned_24h":3,"keys_returned_7d":3,"returned_24h_rate":0.0526,"returned_7d_rate_mature":0.0732}},"called_rate":0.5932,"definition":"Cohort = email_key_funnel_30d's keys_claimed (mcp_dev_keys.metadata.source = 'claim_api', created in the window, same exclusions). keys_called: a mcp_call_log row on the key (tool other than claim_free_key), or an api_endpoint_log row on the key's 24-char prefix, at or after the claim. keys_returned_24h: such a row 24h or more after the claim. keys_returned_7d: such a row 7 days or more after the claim, over keys_mature_7d (claimed 7+ days ago). keys_bound: a non-empty email now. returned_24h_by_channel: keys_returned_24h split by the auth_channel of their 24h+ rows (a key can be in several; 'unrecorded' = no channel on the row; 'rest_api' = a REST row). by_claim_channel: the rungs by how the key was claimed (web = client_name web-*, install = install-*, mcp = a claim_free_key call within 20s of the mint, rest = otherwise). Rows the gateway flagged is_qa are not calls; REST rows carry no user agent.","definition_changelog":{"1":"2026-10-20 (onboarding item 1). New block: claimed -> called -> returned 24h+ -> returned 7d+ (mature keys) -> bound, over the email_key_funnel cohort, plus returned_24h_by_channel from mcp_call_log.auth_channel.","2":"2026-10-22 (claim funnel leak). Calls also count from api_endpoint_log (REST, the key's 24-char prefix), so web-wall keys can register a call and a return (a REST return is channel rest_api); by_claim_channel splits the rungs by web / install / mcp / rest. The cohort is email_key_funnel v2 (our own claim calls and dchub-qa client names excluded)."},"definition_version":2,"excluded_internal_keys":5,"keys_bound":2,"keys_called":35,"keys_claimed":59,"keys_mature_7d":43,"keys_returned_24h":4,"keys_returned_7d":4,"last_7d":{"bind_rate":0.0,"by_claim_channel":{"install":{"called_rate":null,"keys_called":0,"keys_claimed":0,"keys_mature_7d":0,"keys_returned_24h":0,"keys_returned_7d":0,"returned_24h_rate":null,"returned_7d_rate_mature":null},"mcp":{"called_rate":0.0,"keys_called":0,"keys_claimed":1,"keys_mature_7d":0,"keys_returned_24h":0,"keys_returned_7d":0,"returned_24h_rate":0.0,"returned_7d_rate_mature":null},"rest":{"called_rate":0.6667,"keys_called":4,"keys_claimed":6,"keys_mature_7d":0,"keys_returned_24h":0,"keys_returned_7d":0,"returned_24h_rate":0.0,"returned_7d_rate_mature":null},"web":{"called_rate":0.4444,"keys_called":4,"keys_claimed":9,"keys_mature_7d":0,"keys_returned_24h":0,"keys_returned_7d":0,"returned_24h_rate":0.0,"returned_7d_rate_mature":null}},"called_rate":0.5,"excluded_internal_keys":3,"keys_bound":0,"keys_called":8,"keys_claimed":16,"keys_mature_7d":0,"keys_returned_24h":0,"keys_returned_7d":0,"measured":true,"offset_days":0,"returned_24h_by_channel":{},"returned_24h_rate":0.0,"returned_7d_rate_mature":null,"window_days":7},"measured":true,"prior_7d":{"bind_rate":0.0625,"by_claim_channel":{"install":{"called_rate":null,"keys_called":0,"keys_claimed":0,"keys_mature_7d":0,"keys_returned_24h":0,"keys_returned_7d":0,"returned_24h_rate":null,"returned_7d_rate_mature":null},"mcp":{"called_rate":1.0,"keys_called":2,"keys_claimed":2,"keys_mature_7d":2,"keys_returned_24h":0,"keys_returned_7d":0,"returned_24h_rate":0.0,"returned_7d_rate_mature":0.0},"rest":{"called_rate":1.0,"keys_called":5,"keys_claimed":5,"keys_mature_7d":5,"keys_returned_24h":0,"keys_returned_7d":0,"returned_24h_rate":0.0,"returned_7d_rate_mature":0.0},"web":{"called_rate":0.3333,"keys_called":3,"keys_claimed":9,"keys_mature_7d":9,"keys_returned_24h":2,"keys_returned_7d":2,"returned_24h_rate":0.2222,"returned_7d_rate_mature":0.2222}},"called_rate":0.625,"excluded_internal_keys":2,"keys_bound":1,"keys_called":10,"keys_claimed":16,"keys_mature_7d":16,"keys_returned_24h":2,"keys_returned_7d":2,"measured":true,"offset_days":7,"returned_24h_by_channel":{"header":1,"rest_api":2},"returned_24h_rate":0.125,"returned_7d_rate_mature":0.125,"window_days":7},"rates_are_null_when":"the denominator is 0, never 0.0","rest_calls_recorded":true,"returned_24h_by_channel":{"header":1,"rest_api":3,"unrecorded":1},"returned_24h_rate":0.0678,"returned_7d_rate_mature":0.093,"window_days":30},"conversions_30d":5,"conversions_attributed_30d":5,"conversions_attribution_basis":"conversions_attributed_30d counts every row that received ANY bucket other than 'unattributed' \u2014 INCLUDING the 'web-direct'/'organic-direct' channel fallback, which the SQL assigns precisely when there is NO signal link and no key-bound platform. It therefore means 'we know which CHANNEL this sale came through', NOT 'this sale is traced to an MCP signal'. Read the additive split instead: conversions_signal_linked_30d = bucketed via a real mcp_upgrade_signal or a key-bound platform; conversions_channel_fallback_30d = no MCP linkage at all, bucketed by the sale's own source column; conversions_unattributed_30d = neither, which is near-structurally 0 and must NOT be read as 'no attribution was lost'. The three sum to conversions_30d. \u2605For end-to-end signal->paid measurability read paid_signal_attribution_30d, which asks the stricter question over a stricter population \u2014 see conversions_reconciliation_30d for why its total differs.","conversions_by_platform_30d":[{"conversions":4,"platform":"web-direct"},{"conversions":1,"platform":"organic-direct"}],"conversions_channel_fallback_30d":5,"conversions_reconciliation_30d":{"conversions_30d":5,"excluded_by_honest_filter":2,"honest_paid_30d":3,"ladder":"conversions_30d >= honest_paid_30d >= signal_bridged_30d \u2014 each step applies a STRICTER filter to the same table, so a drop between them is by design, not lost data.","measured":true,"note":"conversions_30d counts mcp_conversions rows in 30d with refunded_at IS NULL. honest_paid_30d additionally requires stripe_customer_id NOT NULL and excludes seed/comp/NLR plans; the difference (excluded_by_honest_filter) is those rows and is NOT missing data. signal_bridged_30d is how many of the honest paid can be traced end-to-end to an upstream mcp_upgrade_signal. \u2605Quote honest_paid_30d as revenue and signal_bridged_30d as signal-bridged revenue. paid_attributed_7d/30d is a separate count (relayed checkout payments, packs included), not a rung of this ladder; quote it beside signal_bridged_30d, never in place of it. conversions_30d is the loosest of the three and is the one that must NOT be labelled 'the revenue KPI'.","paid_attributed_30d":0,"paid_attributed_7d":0,"paid_attributed_definition_version":9,"paid_attributed_including_self_30d":0,"paid_attributed_including_self_7d":0,"paid_attributed_including_self_basis":"the same count with operator self-traffic and operator payers (test purchases) left IN. A diagnostic, not the headline: the difference from paid_attributed_7d/30d is the operator's own test checkouts, excluded by design.","paid_attributed_population":"paid Checkout Sessions (mcp_checkout_payments, packs included) sold through a signed, real-UA relayed /go/c click, counted as distinct session or pk-/k- key ref. Same builder as /api/v1/mcp/handoff-funnel steps.paid_attributed. A different population from signal_bridged_30d, not a subset of honest_paid_30d.","signal_bridged_30d":0,"signal_bridged_population":"honest paid mcp_conversions rows only (Stripe customer present). Credit-pack purchases carry no Stripe customer and are never in this population."},"conversions_signal_linked_30d":0,"conversions_unattributed_30d":0,"demand_net_of_harvesters_7d":{"agents":76,"basis":"One query over mcp_calls_identity WHERE is_public_ip AND is_real_external \u2014 the SAME table, window and exclusions as real_external_calls_7d \u2014 split by mcp_calls_deloop.harvester_predicate() over the view's own `platform` column. Harvesters are NOT excluded from is_real_external and no week is restated: this is a DECOMPOSITION of the published headline, emitted beside it, exactly as demand_net_of_top_caller_7d is. CALLS are additive by construction \u2014 headline_calls == harvester_calls + calls \u2014 because both come from complementary FILTERs on one scan. AGENTS ARE NOT ADDITIVE and must never be summed: an agent_id with both harvester and non-harvester rows is counted in BOTH agent figures, so harvester_agents + agents can exceed headline_agents. A harvester here is a NAMED tag measured as one IP / one tool / no api_key at machine cadence, not a heuristic \u2014 see HARVESTER_PLATFORMS for the evidence per name. IP-derived PROXY, same caveat as every agent figure: NAT under-counts, rotating egress over-counts.","calls":330,"excluded_from_headline":false,"harvester_agents":0,"harvester_calls":0,"harvester_pct":0.0,"harvesters_named":["chain-hire","datacolo"],"headline_agents":76,"headline_calls":330,"identity":"headline_calls == harvester_calls + calls \u2014 holds by construction (complementary FILTERs on one scan). AGENTS DO NOT SUM: an agent_id with both harvester and non-harvester rows is counted in headline_agents, harvester_agents AND agents, so those three are three populations, not a partition"},"demand_net_of_top_caller_7d":{"agents":75,"basis":"calls_net_of_top = the canonical denominator (real_external_calls_7d) MINUS the single largest agent_id in the same window, from ONE query over mcp_calls_identity WHERE is_public_ip AND is_real_external. It is an ARITHMETIC COMPANION to the headline, not a replacement for it and not a new canonical population: the subtracted caller is NAMED in top_caller_client and is deliberately still counted in every other field. This exists because a top-caller share above 25% makes the headline track one caller's mood (agent_retention_master_shell lane 5), and a reader who wants the remainder should not have to subtract two published numbers by hand and hope they share a basis. \u2605 Do NOT read it as 'demand with the bots removed' \u2014 exactly one caller is removed, whoever is largest, and mcp_calls_deloop._AMBIGUOUS_NOT_EXCLUDED keeps registry gateways (smithery, glama, agent-toolscloud) in the population ON PURPOSE, because a false exclusion silently deletes a real customer. If the top caller is a real customer, this field subtracts a real customer. \u2605 The denominator retains the NULL-agent_id (Cloudflare POP) bucket so it stays byte-equal to real_external_calls_7d, while the subtrahend excludes it \u2014 so calls_net_of_top includes CF-POP rows by design. callers_net_of_top is distinct non-NULL agents minus one, floored at 0.","calls":303,"concentration_flag":false,"concentration_threshold_pct":25.0,"headline_agents":76,"headline_calls":330,"identity":"headline_calls == top_caller_calls + calls \u2014 holds by construction; all four come from one query over one window","top_caller_calls":27,"top_caller_client":"mcp","top_caller_pct":8.2},"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.","email_key_funnel_30d":{"bind_rate":0.0339,"definition":"bind_rate = keys_bound / keys_claimed; email_key_to_paid = keys_bound_paid / keys_bound. keys_claimed: distinct mcp_dev_keys.api_key with metadata.source = 'claim_api' (POST /api/v1/keys/claim: claim_free_key and the install pages) created in the window. keys_bound: those with a non-empty email now (at_claim = email on the claim itself; later = metadata.identified_at stamped by bind_email or the unlock page). keys_bound_paid: bound keys whose tier is now a paid tier (paid, enterprise, developer, pro, founding, starter); a FLOOR, since a buyer who paid with another key or address is not visible here. Never by tier 'identified' (the claim default). Excluded from the cohort: operator self-traffic sessions and client names (mcp_calls_deloop.not_self_traffic_predicate), QA sessions (handoff_definition.not_qa_minted_predicate), the install-verify-% probe namespace, client names dchub-qa* and the own-test families, claims whose claim_free_key call row is ours (tagged dchub-internal, or followed within 60s by 10+ dchub-internal tools from the same user agent), and internal or harness-persona mailboxes (routes._audience_identity).","definition_changelog":{"1":"2026-10-16 (item 3 proposal). New metric: claimed keys (mcp_dev_keys.metadata.source = 'claim_api', windowed on created_at), bound = non-empty email now, paid = a bound key on a paid tier now. Operator self-traffic, QA sessions, our own install-verify probes and internal / harness mailboxes are excluded from the cohort.","2":"2026-10-22 (claim funnel leak). Also excluded: client names dchub-qa* and the own-test families, and claims made by our own callers as seen on the claim_free_key call row (tagged dchub-internal, or followed within 60s by 10+ distinct dchub-internal tools from the same user agent: the 6-hourly every-tool sweep). 34 of 47 claims in the 7d cohort were ours on 10-22."},"definition_version":2,"email_key_to_paid":0.0,"excluded_internal_keys":5,"keys_bound":2,"keys_bound_at_claim":2,"keys_bound_later":0,"keys_bound_paid":0,"keys_claimed":59,"last_7d":{"bind_rate":0.0,"email_key_to_paid":null,"excluded_internal_keys":3,"keys_bound":0,"keys_bound_at_claim":0,"keys_bound_later":0,"keys_bound_paid":0,"keys_claimed":16,"measured":true,"offset_days":0,"window_days":7},"measured":true,"prior_7d":{"bind_rate":0.0625,"email_key_to_paid":0.0,"excluded_internal_keys":2,"keys_bound":1,"keys_bound_at_claim":1,"keys_bound_later":0,"keys_bound_paid":0,"keys_claimed":16,"measured":true,"offset_days":7,"window_days":7},"rates_are_null_when":"the denominator is 0 (no claimed keys, or none bound), never 0.0","window_days":30},"external_agents_7d":76,"external_ips_7d_complete":76,"full_answer_cap":{"basis":"COUNT(*) / COUNT(DISTINCT session_id) FROM mcp_call_log WHERE status = 'trial_cap_exceeded', windows rolling from now(). \u2605hits_*/sessions_* are the RAW gateway log and include our own harness: measured 2026-09-08, dchub-internal was 35,550 of 35,817 hits over 30d (99.25%), leaving 267 real \u2014 and 7 of 8,349 over 7d. Read real_hits_*/real_sessions_* for addressable deprivation; the raw pair is kept only so the split is auditable and is NOT a demand figure. Neither pair may be divided into real_external_*, which counts a different population again.","by_week":[{"hits":2138,"sessions":565,"week":"2026-08-17"},{"hits":8393,"sessions":2259,"week":"2026-08-24"},{"hits":8508,"sessions":2312,"week":"2026-08-31"},{"hits":7873,"sessions":2073,"week":"2026-09-07"},{"hits":4208,"sessions":1099,"week":"2026-09-14"},{"hits":1810,"sessions":507,"week":"2026-09-21"},{"hits":6,"sessions":6,"week":"2026-09-28"},{"hits":3,"sessions":2,"week":"2026-10-05"},{"hits":7,"sessions":1,"week":"2026-10-12"},{"hits":2,"sessions":0,"week":"2026-10-19"}],"first_hit_at":"2026-08-06T03:15:57.385000+00:00","hits_30d":298,"hits_30d_caveat":"RAW \u2014 includes our own harness, which was 92.28% of the 30d count when this response was built. This is NOT a count of callers walled; read real_hits_*/real_sessions_* for that, and hits_by_platform_30d for the split.","hits_7d":2,"hits_7d_caveat":"RAW \u2014 includes our own harness, which was 92.28% of the 30d count when this response was built. This is NOT a count of callers walled; read real_hits_*/real_sessions_* for that, and hits_by_platform_30d for the split.","hits_by_platform_30d":[{"hits":275,"platform":"dchub-internal"},{"hits":11,"platform":"claude"},{"hits":9,"platform":"curl"},{"hits":3,"platform":"mcp"}],"keys_30d":92,"last_hit_at":"2026-10-20T06:22:16.447000+00:00","measures":"the mcp-server per-DAY full-answer cap (_trialFullCallsExceeded / DCHUB_TRIAL_TOOL_DAILY_FULL; per-tool AND per-caller since dchub-mcp-server#294, 2026-09-01). Counts mcp_call_log rows whose status is the deprivation branch's own label \u2014 one row per GATED CALL, not per caller.","not_measured_here":"NOT the monthly quota \u2014 that is the `quota_wall` block beside this one, a different gate with a different limit. The two have never agreed and are not meant to: quota_wall has recorded zero hits in its lifetime while this gate fires thousands of times a week.","real_basis":"the same query and windows as hits_*, MINUS callers whose platform matches mcp_upgrade_gate._SYNTHETIC_CLIENT_PREFIXES \u2014 the identical tuple fire_upgrade_signal() short-circuits on, imported rather than copied so the two cannot drift. None means the import failed and the split is UNKNOWN, never 0.","real_hits_30d":23,"real_hits_7d":2,"real_sessions_30d":4,"real_sessions_7d":0,"sessions_30d":89,"sessions_30d_caveat":"RAW \u2014 includes our own harness, which was 92.28% of the 30d count when this response was built. This is NOT a count of callers walled; read real_hits_*/real_sessions_* for that, and hits_by_platform_30d for the split.","sessions_7d":0,"sessions_7d_caveat":"RAW \u2014 includes our own harness, which was 92.28% of the 30d count when this response was built. This is NOT a count of callers walled; read real_hits_*/real_sessions_* for that, and hits_by_platform_30d for the split.","sessions_caveat":"session_id is gateway-minted and rotates \u2014 Grok opens one per tool call. sessions_* is an UPPER bound on distinct humans/agents, never a person count. keys_30d (distinct api_key) is the durable-identity floor and is the number to trend.","sibling_gate_statuses_30d":[{"calls":84000,"status":"trial_used"},{"calls":48821,"status":"blocked_scraper"},{"calls":13013,"status":"anon_daily_cap"},{"calls":3430,"status":"rate_limited"},{"calls":1413,"status":"pro_wall"},{"calls":1004,"status":"anon_hard_wall"},{"calls":689,"status":"lp_wall"},{"calls":298,"status":"trial_cap_exceeded"},{"calls":227,"status":"mpp_offer_undercap"},{"calls":98,"status":"mpp_offer_prewall"},{"calls":52,"status":"trial_taste_bounded"},{"calls":51,"status":"trial_taste_inline"}],"status_literal":"trial_cap_exceeded","synthetic_share_pct_30d":92.28},"install_artifact_30d":{"basis":"distinct mcp_dev_keys.api_key whose metadata->>'client_name' matches 'install-%' (minus the reserved 'install-verify-%' probe namespace \u2014 see .excludes) and was created in the last 30 days, LEFT JOINed to mcp_call_log on api_key (that table's time column is `timestamp`, not created_at). Scored on KEYS, never sessions or IPs \u2014 Grok rotates egress IP per request and opens a session per tool call, inflating both by ~10x. \u2605This is a FLOOR: /api/v1/keys/claim returns an EXISTING key (with its original client_name) to an IP that already holds one, so an install-page visitor who already had a key never appears here. A zero means 'no NEW keys traced to the pages', not 'nobody visited'.","by_client":[],"calls":0,"excludes":"install-verify-% (our own mint probes)","keys_minted":0,"keys_returned":0,"keys_that_called":0,"ladder":"keys_minted >= keys_that_called >= keys_returned. MINTED IS NOT DISTRIBUTION \u2014 a key that never called is a row, not a user. keys_returned (active on 2+ distinct days) is the only rung that means the channel delivered someone who came back.","measured":true,"pages":["claude","chatgpt","cursor","grok","perplexity","gemini-cli","claude-code","claude-desktop","cline","vscode","windsurf","antigravity","zed"]},"keys_by_tier":{"enterprise":7,"free":134,"identified":792,"paid":57},"paid_signal_attribution_30d":{"attribution_rate_floor":10,"attribution_rate_pct":null,"attribution_rate_pct_withheld":0.0,"attribution_rate_withheld_reason":"paid_total 3 is below the floor of 10 -- a rate over 3 sales is not a measurement","bridged_to_signal":0,"bridged_via_attribution_signal_id":0,"bridged_via_caller_key":0,"bridged_via_relayed_click":0,"bridged_via_relayed_click_basis":"A third bridge lane for paid_signal_attribution. The paid row's MCP session is its own session_id when set, otherwise the session of the signed, real-UA /go/c/ click whose ref equals the client_reference_id of the mcp_checkout_payments row carrying this conversion's stripe_session_id \u2014 resolved by routes/handoff_definition._relayed_click_session_for, the SAME builder paid_attributed joins on, so the two cannot disagree about which session bought. The lane requires an mcp_upgrade_signals row on that session at or before the sale: a signal raised AFTER it is the customer hitting a wall they already paid to pass. It is tried LAST, so attribution_signal_id and the caller_id bridge keep priority and this lane only ever converts rows that were previously unattributable.","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":3,"unattributable":3},"paid_tool_demand_30d":[{"calls":1384,"tool":"analyze_site","users":655},{"calls":94,"tool":"get_dchub_recommendation","users":8},{"calls":85,"tool":"compare_sites","users":13},{"calls":43,"tool":"generate_site_analysis","users":5},{"calls":21,"tool":"export_dataset","users":3}],"pct_30d_of_lifetime":0.2,"pct_7d_of_lifetime":0.0,"press_headline_metric":"DC Hub served 405 external AI-agent tool calls in the week of 2026-10-12 (+18.4% WoW); 729,786 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.","pro_trial_offer":{"arms":{"holdout":{"eligible":2,"paid":0,"relay_opens":0,"shown":2,"trial_clicks":0,"trial_starts":0},"offer":{"eligible":2,"paid":0,"relay_opens":0,"shown":2,"trial_clicks":0,"trial_starts":0}},"basis":"per identity (pk- key ref; sk- session hash for a keyless wall, whose trial clicks and starts join on the session id the relay page's links carry). eligible = assigned in the window; shown = the eligible response carried the line (offer arm: ?offer link, holdout: plain link); relay_opens, trial_clicks (/go/p/pro_trial ref) and trial_starts (pro_trial_redemptions.key_ref) count only after assignment. paid = a start whose subscription was then booked as revenue (mcp_conversions mrr_cents > 0, not refunded, not test), joined on the trial checkout's client_reference_id (forward-only from 2026-10-19). identified is not measured here yet.","diagnosis":{"basis":"mcp_pro_trial_offer_calls, written by decide() before any rule; operator identities are recorded there too and are dropped at assignment.","decide_calls_window":4,"identities_at_threshold_7d":0,"identities_window":4,"keyless_identities_window":4,"last_decide_call_at":"2026-10-21T16:08:17.080192+00:00","reading":"assignments exist; the offer is firing"},"offer":"pro_trial_7d","threshold":5,"trigger_window_days":7,"window_days":30},"pro_wall":{"anonymous_callers_7d":{"anon_hits_7d":284,"basis":"mcp_tool_calls rows the gateway answered pro_wall (gate_status), keyed is not true, 7d, newest 5000; the caller IP is on the row itself (no session join). real_hits = the identity view's is_real_external. call_log_anon_hits_7d is the mcp_call_log anonymous count pro_wall.hits_7d is on; a gap between it and anon_hits_7d is rows only one of the two writers recorded. unmatched_hits = no IP on the row, NOT attributed. caller = HMAC label of the first X-Forwarded-For hop, never the IP. class edge_pop = a Cloudflare POP, which is not one caller. A caller with high hits_per_session and a short span_minutes is one loop.","call_log_anon_hits_7d":406,"distinct_callers":268,"distinct_callers_is_floor":false,"resolved_hits":284,"scan_capped":false,"source":"gate_status","status":"ok","top_callers":[{"caller":"dee1f2605279","class":"public","first_seen":"2026-10-17T17:25:07.361659","hits":11,"hits_per_session":null,"last_seen":"2026-10-22T19:53:05.269880","real_hits":0,"sessions":0,"share_pct":3.9,"span_minutes":7348.0,"tools":2},{"caller":"b457dbcd7eeb","class":"public","first_seen":"2026-10-18T04:36:07.710803","hits":5,"hits_per_session":1.0,"last_seen":"2026-10-23T04:43:03.414631","real_hits":0,"sessions":5,"share_pct":1.8,"span_minutes":7206.9,"tools":1},{"caller":"1907975ed56e","class":"public","first_seen":"2026-10-21T16:08:00.147926","hits":3,"hits_per_session":1.0,"last_seen":"2026-10-21T16:08:17.700203","real_hits":3,"sessions":3,"share_pct":1.1,"span_minutes":0.3,"tools":1},{"caller":"f842ee249af4","class":"public","first_seen":"2026-10-20T07:31:48.844649","hits":1,"hits_per_session":null,"last_seen":"2026-10-20T07:31:48.844649","real_hits":0,"sessions":0,"share_pct":0.4,"span_minutes":0.0,"tools":1},{"caller":"0a441dc0f76b","class":"public","first_seen":"2026-10-17T07:00:35.647332","hits":1,"hits_per_session":null,"last_seen":"2026-10-17T07:00:35.647332","real_hits":0,"sessions":0,"share_pct":0.4,"span_minutes":0.0,"tools":1}],"unmatched_hits":0},"basis":"mcp_call_log rows with status 'pro_wall' (a gated answer from a Pro-only tool); real_* drops probe platforms, scripting UAs and declared self-traffic sessions","distinct_keys_30d":25,"distinct_keys_7d":11,"hits_30d":1413,"hits_7d":417,"real_hits_30d":50,"real_hits_7d":5,"top_keys_7d":[{"hits":406,"key_hash":"anonymous","platform":"mcp","real_hits":5,"share_pct":97.4},{"hits":1,"key_hash":"2df8f2f6ee37","platform":"dchub-internal","real_hits":0,"share_pct":0.2},{"hits":1,"key_hash":"3f62f1fc6b6d","platform":"dchub-internal","real_hits":0,"share_pct":0.2},{"hits":1,"key_hash":"624f91e927af","platform":"dchub-internal","real_hits":0,"share_pct":0.2},{"hits":1,"key_hash":"1b66f3221bb0","platform":"dchub-internal","real_hits":0,"share_pct":0.2}],"top_keys_basis":"top 5 keys by pro_wall hits in 7d; key_hash = first 12 hex of sha256(api_key); hits >> real_hits on one row = one probe or script caller"},"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,"headroom":{"basis":"heaviest_key_calls_month = MAX(calls) over mcp_monthly_usage for this month; smallest_monthly_quota = the FREE tier's. could_any_key_have_hit is a ONE-WAY test: False proves no key of any tier reached its wall (every other quota is larger). True proves only that the cheapest tier's ceiling was passed by someone, NOT that any key hit its own.","could_any_key_have_hit":true,"heaviest_key_calls_month":497,"keys_with_usage_month":80,"smallest_monthly_quota":300},"hits_month":0,"keys_first_hit_7d":0,"keys_month":0,"last_hit_at":null,"lazily_created":true,"measures":"the per-key MONTHLY quota enforced by monthly_quota.py (quota = TIER_LIMITS[tier].mcp_daily * 30; free=300/mo, identified=1500/mo). Counts allowed=false decisions on THAT gate only.","month":"2026-10-01","not_measured_here":"NOT the gate a free caller actually hits. That is the mcp-server's per-DAY full-answer cap (_trialFullCallsExceeded, DCHUB_TRIAL_TOOL_DAILY_FULL, per-tool AND per-caller since dchub-mcp-server#294 on 2026-09-01). Its hits are NOT counted in this block and a 0 here is not evidence about it. \u2605 Do not read hits_month=0 as 'the paywall works' or as 'the paywall is broken' \u2014 it is evidence about the monthly quota and nothing else.","see_instead":"full_answer_cap \u2014 the per-DAY full-answer gate a free caller actually hits. THIS block (the monthly quota) has recorded zero hits in its lifetime; a 0 here is not evidence that callers are not being walled.","table_exists":true},"quota_wall_hits":{"by_status":[{"hits":302,"status":"trial_used"},{"hits":236,"status":"anon_daily_cap"},{"hits":10,"status":"pro_wall"},{"hits":3,"status":"other"},{"hits":1,"status":"lp_wall"}],"by_tool":[{"hits":102,"tool":"get_grid_intelligence"},{"hits":82,"tool":"get_market_dcpi_rank"},{"hits":46,"tool":"ai_capacity_index"},{"hits":29,"tool":"get_interconnection_queue"},{"hits":29,"tool":"get_retirement_headroom"},{"hits":29,"tool":"get_refined_queue"},{"hits":14,"tool":"execute_plan"},{"hits":13,"tool":"hyperscaler_deals"},{"hits":13,"tool":"get_energy_prices"},{"hits":12,"tool":"get_market_intel"},{"hits":11,"tool":"site_selection_canvas"},{"hits":11,"tool":"get_tax_incentives"},{"hits":10,"tool":"get_dchub_recommendation"},{"hits":9,"tool":"rank_markets"},{"hits":9,"tool":"get_intelligence_index"},{"hits":9,"tool":"get_grid_data"},{"hits":9,"tool":"list_transactions"},{"hits":8,"tool":"get_renewable_energy"},{"hits":7,"tool":"get_facility"},{"hits":7,"tool":"why_dchub"}],"definition":"quota_wall_hit events (mcp_funnel_events, written by the MCP server since 2026-10-16): one row per tool call whose logged status is a wall (anon_daily_cap, anon_hard_wall, blocked_paid_only, credits_depleted, lp_free_spent, lp_wall, metered_enforced, monthly_quota_blocked, pro_wall, trial_cap_exceeded, trial_used) or that wrote a paid_tool_blocked signal. Calls, not people; identities_30d = distinct key ref (pk-sha256) else session id. Excluded: is_qa (X-DCHub-QA / QA user agents / qa- ids), declared operator sessions, our scripted dchub-*-test user agents, internal platform tags, and Smithery burst-day scanner identities (mcp_calls_deloop.SMITHERY_BURST_RULE). month = this UTC calendar month. Starts at 0 on deploy: there is no backfill.","excluded":{"qa":2109,"smithery_burst":0},"hits_7d":552,"hits_month":552,"hits_window":552,"identities_window":169,"keyless_identities_window":118,"last_hit_at":"2026-10-24T01:59:48.988565+00:00","replaces":"quota_wall.hits_month counts the monthly quota only (never fired); this block counts the walls that do fire","table_exists":true,"window_days":30},"real_external_agents_7d":76,"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":79,"real_external_agents_complete_wk_wow_pct":29.5,"real_external_agents_prior_7d":76,"real_external_agents_prior_complete_wk":61,"real_external_agents_wow_pct":0.0,"real_external_calls_7d":330,"real_external_calls_complete_wk":405,"real_external_calls_complete_wk_wow_pct":18.4,"real_external_calls_prior_7d":377,"real_external_calls_wow_pct":-12.5,"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). \u2605 2026-08-20: 'prefer this for any trend claim' is conditional on comparability, and this sentence without that condition is what got the +89.5% across #202 rendered as 'the trend number'. Complete weeks fix the WINDOW, not the POPULATION \u2014 read real_external_complete_wk_comparability.quotable_as_trend before quoting either _wow_pct; when it is false the pct is published as null and the reason names itself.","real_external_complete_wk_comparability":{"changes":[],"crosses_definition_change":false,"harvester_dominated_weeks":[],"includes_harvester_dominated_week":false,"means":"every week in this delta counts the same population","quotable_as_trend":true,"superseded_by":[],"superseded_by_correction":false},"real_external_rolling_wow_comparability":{"changes":[],"crosses_definition_change":false,"harvester_dominated_weeks":[],"includes_harvester_dominated_week":false,"means":"every week in this delta counts the same population","quotable_as_trend":true,"superseded_by":[],"superseded_by_correction":false},"real_external_signals_7d":1373,"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_comparability":{"changes":[],"crosses_definition_change":false,"harvester_dominated_weeks":[],"includes_harvester_dominated_week":false,"means":"every week in this delta counts the same population","quotable_as_trend":true,"superseded_by":[],"superseded_by_correction":false},"real_external_signals_prior_7d":1430,"real_external_signals_wow_pct":-4.0,"signals_by_platform_30d":[{"conv_rate_pct":0.0,"converted":0,"platform":"mcp","sessions":519,"signals":2774,"unique_ips":180},{"conv_rate_pct":0.0,"converted":0,"platform":"chatgpt","sessions":54,"signals":289,"unique_ips":33},{"conv_rate_pct":0.0,"converted":0,"platform":"claude","sessions":98,"signals":239,"unique_ips":75},{"conv_rate_pct":0.0,"converted":0,"platform":"connectors-manager","sessions":184,"signals":184,"unique_ips":50},{"conv_rate_pct":0.0,"converted":0,"platform":"brickbluebot","sessions":114,"signals":132,"unique_ips":68},{"conv_rate_pct":0.0,"converted":0,"platform":"cursor","sessions":26,"signals":30,"unique_ips":13},{"conv_rate_pct":0.0,"converted":0,"platform":"phase-a","sessions":3,"signals":27,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"grok","sessions":14,"signals":27,"unique_ips":11},{"conv_rate_pct":0.0,"converted":0,"platform":"brickblue","sessions":21,"signals":26,"unique_ips":13},{"conv_rate_pct":0.0,"converted":0,"platform":"fastnconnect","sessions":12,"signals":12,"unique_ips":4},{"conv_rate_pct":0.0,"converted":0,"platform":"tendle","sessions":11,"signals":11,"unique_ips":8},{"conv_rate_pct":0.0,"converted":0,"platform":"agent-collector","sessions":11,"signals":11,"unique_ips":11},{"conv_rate_pct":0.0,"converted":0,"platform":"clono","sessions":7,"signals":7,"unique_ips":7},{"conv_rate_pct":0.0,"converted":0,"platform":"copilot","sessions":2,"signals":7,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"research","sessions":4,"signals":6,"unique_ips":2},{"conv_rate_pct":0.0,"converted":0,"platform":"qa826","sessions":6,"signals":6,"unique_ips":2},{"conv_rate_pct":0.0,"converted":0,"platform":"f7-call","sessions":5,"signals":5,"unique_ips":1},{"conv_rate_pct":0.0,"converted":0,"platform":"atlasview","sessions":5,"signals":5,"unique_ips":3},{"conv_rate_pct":0.0,"converted":0,"platform":"mcp-generic-client","sessions":3,"signals":5,"unique_ips":3},{"conv_rate_pct":0.0,"converted":0,"platform":"actionist-apps-verification","sessions":1,"signals":2,"unique_ips":1}],"time_to_convert_90d":[{"converted_sessions":2,"median_days_to_convert":6.08,"platform":"claude"},{"converted_sessions":1,"median_days_to_convert":5.02,"platform":"connectors-manager"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"anthropic/claudeai"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"atlasview"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"brickblue"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"brickbluebot"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"chat-ui-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":"clono"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"codex"},{"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":"dataset-eval"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"dch-agent"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"f7-call"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"fastnconnect"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"grok"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"handoff-proof"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"huggingface"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mcp"},{"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":"mpp-prose"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"mpp-trace"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"new-agent-trial"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"northwind-agent"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"perplexity"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"phase-a"},{"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":"qa826"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"ravix"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"relay-trace"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"research"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"skeptic"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"skeptic-verifier"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"smithery"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"tendle"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"tendle-review"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"actionist-apps-verification"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"triage"},{"converted_sessions":0,"median_days_to_convert":null,"platform":"agent-collector"}],"tool_calls_30d":28025,"tool_calls_7d":5158,"tool_calls_7d_complete":5284,"tool_calls_7d_complete_real":341,"tool_calls_7d_probes":4828,"tool_calls_7d_real":330,"tool_calls_complete_days_comparability":{"changes":[],"crosses_definition_change":false,"harvester_dominated_weeks":[],"includes_harvester_dominated_week":false,"means":"every week in this delta counts the same population","quotable_as_trend":true,"superseded_by":[],"superseded_by_correction":false},"tool_calls_per_day_complete":755,"tool_calls_per_day_complete_real":49,"tool_calls_prior_7d_complete_real":378,"tool_calls_total":77052,"tool_calls_total_basis":"COUNT(*) mcp_tool_calls \u2014 exact","tool_calls_wow_pct":-9.8,"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":27,"top_caller_calls_7d_complete":27,"top_caller_client":"mcp","top_caller_denominator_7d":330,"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":8.2,"top_caller_pct_7d_complete":8.2,"top_caller_platform":"mcp","top_signal_tools_30d":[{"callers":149,"n":699,"sessions":539,"tool":"analyze_site"},{"callers":91,"n":284,"sessions":106,"tool":"get_grid_intelligence"},{"callers":170,"n":1279,"sessions":104,"tool":"get_interconnection_queue"},{"callers":64,"n":140,"sessions":68,"tool":"rank_markets"},{"callers":42,"n":80,"sessions":56,"tool":"ai_capacity_index"},{"callers":140,"n":553,"sessions":43,"tool":"get_market_intel"},{"callers":42,"n":90,"sessions":42,"tool":"get_grid_data"},{"callers":50,"n":85,"sessions":42,"tool":"get_fiber_intel"},{"callers":47,"n":76,"sessions":38,"tool":"get_energy_prices"},{"callers":20,"n":40,"sessions":37,"tool":"compare_sites"}],"unique_ips_7d_real":83,"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":1380}
