{"name":"voidly","version":"2.10.0","description":"Global internet censorship observatory over MCP: country rankings, domain blocking checks, citable incidents with evidence, shutdown-risk forecasts and classifier scores across 130 countries, aggregated from OONI, IODA and CensoredPlanet.","homepage":"https://voidly.ai","documentation":"https://voidly.ai/api-docs","transport":{"type":"streamable-http","url":"https://api.voidly.ai/mcp"},"tools":[{"name":"get_censorship_index","description":"Get the global censorship index with rankings for all monitored countries. Returns country scores, risk tiers, and measurement counts for 130 countries, aggregated from OONI, IODA and CensoredPlanet (the index is computed on the recent measurement window)."},{"name":"get_country_status","description":"Get detailed censorship status for a specific country including blocked domains, anomaly rates, risk tier, and recent incidents."},{"name":"check_domain_blocked","description":"Check if a specific domain is blocked in a country. Returns blocking status, evidence sources, confidence level, and blocking method (DNS, TCP, TLS, HTTP)."},{"name":"get_active_incidents","description":"Get citable censorship incidents (multi-source, evidence-backed) ranked best-first — real censorship events surface ahead of single-source IODA connectivity-outage signals. Each incident is citable with a human-readable ID (e.g., IR-2026-0142). Set citable=false to include raw outage signals."},{"name":"get_incident_detail","description":"Get detailed information about a specific censorship incident including evidence links, affected domains, blocking methods, and timeline."},{"name":"verify_claim","description":"Verify a censorship claim against real measurement data from OONI, CensoredPlanet, and IODA. Returns verdict with supporting evidence."},{"name":"get_risk_forecast","description":"Get 7-day internet shutdown and censorship risk forecast for a country using XGBoost ML model trained on historical OONI data and political event calendar."},{"name":"get_platform_risk","description":"Get censorship risk score for a specific platform across all monitored countries. Shows which countries block it and the overall global risk level."},{"name":"check_service_accessibility","description":"Real-time check: is a domain/service accessible in a specific country right now? Returns blocking status, block rate across ISPs, and evidence."},{"name":"get_most_censored","description":"Get the most censored countries ranked by censorship severity score. Returns country name, score, risk tier, and top blocked categories."},{"name":"agent_relay_stats","description":"Get Voidly Agent Relay network statistics including total registered agents, 24-hour active agents, channel count, message volume, and capability registry."},{"name":"get_shutdown_risk","description":"KeepItOn-validated 7-day shutdown probability for a country (gate-promoted model; live version in the response). Includes honest validation caveats inline."},{"name":"get_shutdown_risk_leaderboard","description":"All scored countries sorted by current 7-day shutdown probability, with risk bands and as-of dates."},{"name":"get_shutdown_risk_accountability","description":"Running public record of archived shutdown-risk predictions joined to actual KeepItOn outcomes — the model proves itself in the open."},{"name":"get_atlas_score","description":"Atlas Score v2 A–F censorship grade(s). Pass country_code for one country; omit for all graded countries."},{"name":"get_multi_horizon_forecast","description":"1/7/30-day censorship forecasts for a country with per-horizon SHAP top features and 90% conformal intervals."},{"name":"get_global_heatmap","description":"Single-call shutdown-risk heatmap across every watched country, sorted by risk."},{"name":"get_high_risk_countries","description":"Countries whose 7-day forecast exceeds a risk threshold (default 0.5)."},{"name":"get_election_risk","description":"Election-aware censorship risk briefing for a country: upcoming elections joined with forecast and historical election-censorship correlation."},{"name":"get_upcoming_elections","description":"Upcoming elections worldwide with censorship-risk overlay."},{"name":"get_isp_risk_index","description":"ISPs in a country ranked by composite censorship score (aggressiveness, category breadth, blocking methods)."},{"name":"get_platform_scores","description":"All monitored platforms (WhatsApp, X, Telegram, …) ranked by global censorship risk."},{"name":"get_incident_stats","description":"Aggregate incident statistics. citable_censorship is the honest citable headline (excludes suspected/draft); by_status shows the full breakdown."},{"name":"get_incident_report","description":"Citable report for one incident. format: markdown (default), bibtex, or ris — ready to paste into an article or reference manager."},{"name":"get_incident_evidence","description":"Evidence permalinks backing one incident — the raw measurements a journalist can verify."},{"name":"export_incidents","description":"Bulk export of the incident corpus (json, csv, or jsonl). Status column distinguishes corroborated vs suspected rows. Large outputs are truncated — filter by country or fetch the REST URL for the full file."},{"name":"get_incidents_since","description":"Incidents created or updated after an ISO timestamp (delta sync), oldest first. PAGINATED: the response carries has_more and next_cursor. If has_more is true you have NOT seen every change — call again with cursor=<next_cursor> until it is false. Paging is at-least-once, so de-duplicate on hashId. Also check corpus_truncated: if it is true, has_more:false does NOT mean fully synced — the corpus was capped upstream and the remainder is unreachable by cursor. Say so rather than reporting a complete sync."},{"name":"get_classifier_score","description":"Country-day censorship classifier score (GradientBoosting v3.3, LOCO mean F1 0.711 across countries; the LOCO median 0.870 is inflated by small-sample countries)."},{"name":"get_classifier_info","description":"Classifier transparency: version, training data, honest evaluation methodology and caveats."},{"name":"get_anomaly_dbscan","description":"Unsupervised DBSCAN second-opinion anomaly score for a country (CenDTect-style; AUC 0.65 — weaker than the supervised classifier, surfaces shape-anomalous days labels never saw)."},{"name":"get_probe_stats","description":"Voidly probe network status: nodes, countries, test cadence, recent measurement volume."},{"name":"get_data_freshness","description":"Per-source data freshness receipts (OONI, IODA, CensoredPlanet, probes) — when each pipeline last delivered."},{"name":"get_prediction_track_record","description":"Public prediction track record across Voidly forecast products — hits, misses, and honest baselines."},{"name":"get_ai_service_availability","description":"Which AI services (ChatGPT, Claude, Gemini, HuggingFace, …) are reachable per country — state blocking vs vendor geo-restriction, labeled separately."},{"name":"get_country_profile","description":"Consolidated measured-censorship profile for a country in ONE call: data freshness (last measurement + band), 30-day measurement volume, censorship-technique mix (how they block), and the domains nationally blocked there (confirmed across >=3 networks). Best single call for a country overview."},{"name":"get_censorship_techniques","description":"How a country censors, not just what — breakdown of blocking techniques (DNS manipulation, TCP-reset injection, Tor blocking, connection interference, DPI/middlebox, header manipulation). E.g. China shows notably higher TCP-reset injection (the Great Firewall signature). Omit country_code for a global all-country view."},{"name":"get_censorship_technique_trend","description":"How the censorship METHOD mix shifts over TIME — monthly percentage composition of blocking techniques (DNS manipulation, TCP-reset injection, Tor blocking, connection interference, DPI/middlebox). Companion to get_censorship_techniques (a snapshot); this is the trend. Shares are coverage-robust (not raw counts), so they are not skewed by growing measurement volume. Omit country_code for global; months defaults to 12."},{"name":"get_censorship_by_category","description":"How each CONTENT CATEGORY is blocked — the blocking-technique composition per content type (news, communication tools, anonymity/VPN, search, adult, etc.). Reveals content-targeted blocking: e.g. several censors reserve TCP-reset / connection-level interference for messaging while DNS-poisoning news. Omit country_code for a global view; add it to see one country."},{"name":"get_most_blocked_domains","description":"Global leaderboard of the most-blocked domains, ranked by how many countries nationally block them. HONEST: the top is dominated by legal gambling/piracy/adult blocks, NOT political censorship — use category=ANON to isolate circumvention tools (ProtonVPN, Psiphon, Lantern), or category=NEWS for news sites."},{"name":"get_data_confidence","description":"Per-country data-trustworthiness scores (0-100 + band high/medium/low) — how much to trust Voidly's censorship measurements for each country, derived from freshness, volume, stability, and source diversity. The observatory auditing its own data quality; use it to weight conclusions about sparsely-measured countries."},{"name":"get_censorship_by_region","description":"Censorship aggregated by world region (continent by default, or UN sub-region with level=subregion): countries measured, block fraction, and confirmed national blocks per region. HONEST: confirmed-block counts are a measurement-density map, not a censorship ranking (e.g. Africa shows 0 confirmed blocks despite a high block fraction, because the >=3-network confirmation gate needs dense coverage). Use block_fraction + countries_measured for context."},{"name":"get_measurement_freshness","description":"How recently Voidly measured each country — last-measurement timestamp + band (live/recent/aging/stale) across ALL monitored countries. Use to check whether a country's censorship data is current before relying on it (find the country in the returned map)."},{"name":"get_censorship_intent","description":"What each censor TARGETS: per-country category mix of nationally-blocked domains (confirmed across >=3 networks), rolled into three focus shares — political_speech (NEWS/POLR/HUMR), regulated_morality (GMB/PORN/ALDR), circumvention_tooling (ANON/VOIP) — plus the full category breakdown + primary_focus. Reveals WHY a country censors (Iran/Russia=speech, Indonesia/Thailand=morality). HONEST: China under-counted (GFW=anomaly not confirmed); shares are over tagged domains only. Pass country=XX for one country."},{"name":"get_category_leaders","description":"Which countries most censor a given Citizen Lab content category — ranked by distinct domains nationally blocked (confirmed across >=3 networks), with example domains. E.g. category=LGBT -> Russia/Iran/Indonesia; also NEWS, HUMR, ANON, POLR, GMB, PORN. HONEST: anomaly-based censors (China GFW) under-counted; counts are a floor."},{"name":"get_co_blocking","description":"Country PAIRS that nationally block the same domains ('censorship twins') — shared blocklist size + Jaccard + the meaningful signal shared_political (NEWS/HUMR/POLR) and shared_tooling (ANON/VPN), which strips coincidental gambling/adult overlap. Iran-Russia share 135 domains incl. 23 of the same human-rights orgs + 25 of the same VPN tools (4.6x the next pair on political). HONEST: overlap is correlation, NOT proof of coordination; China under-counted."},{"name":"get_network_depth","description":"Per-country measurement DEPTH: how many distinct ISP networks (ASNs) Voidly has evidence from — a proxy for how many independent vantage points back a country's data, which bounds what the >=3-network confirmed-block gate can confirm. RU 510 / IN 80 / IR 50 networks; ~42 countries carry ASN tags. HONEST: coverage depth, NOT a censorship score; an absent/shallow country is under-measured, not free. Pass country=XX for one country."},{"name":"get_category_coverage","description":"How much of Voidly's measured-domain corpus carries a Citizen Lab content category (~69% via the 14k-domain Citizen Lab list) — the observatory disclosing its own categorization blind spot. Returns tagged/untagged counts + per-category domain counts. Use to gauge how complete any 'by category' analysis is."},{"name":"get_censorship_summary","description":"One-call snapshot of the state of global censorship Voidly measures — countries measured, countries with confirmed national blocks, the deepest censor (Iran, ~789 domains), the broadest-blocked category, measurement depth + data coverage, and freshness, plus links to the per-metric endpoints. The ideal first call: 'give me the state of global censorship'. HONEST: most_blocked_category is broad legal gambling-blocking NOT political; China under-counted (GFW=anomaly)."},{"name":"get_national_blocklist","description":"The COMPLETE list of domains a country blocks nationally (confirmed across >=3 independent networks) — the core 'what does country X block?' product. Returns restriction_map (full domain list), partial_map (sub-national 1-2 network blocks), and confirmed_block_layer (data-recency window). Use this for a full report; for a single domain use check_domain_blocked, for a summary use get_country_profile. HONEST: includes legal gambling/piracy blocks (not only political); a domain NOT listed is accessible OR not measured (absence is not 'accessible'); China under-counted (GFW=anomaly)."},{"name":"get_domain_timeline","description":"Full-corpus block TIMELINE for one domain: when it was FIRST observed blocked in each country and how the blocking METHOD evolved over time, sorted earliest-first (censorship-spread order). The long-horizon companion to check_domain_blocked / get_domain_history (which show current/recent status). Use for 'when did country X start blocking Y?' and 'how did they block it (DNS vs TCP-reset vs blockpage)?'. Pass domain=twitter.com (optional country=IR to focus one country). HONEST: the evidence corpus begins 2026-02, so blocks predating it are not captured (first dates can cluster at corpus-start); a country absent from the list is accessible OR unmeasured."},{"name":"get_classifier_scope","description":"How accurate is Voidly's v3.3 censorship classifier? The honest answer under THREE evaluation regimes of increasing difficulty, in one call: stratified-random (in-distribution upper bound, AUC ~0.90 / F1 ~0.73), leave-country-out (cross-country generalization, F1 mean ~0.71 / median ~0.87 over 127 countries), and forward-temporal (train past / predict future, AUC ~0.67 / F1 ~0.47) — plus the generalization gap (delta AUC -0.23, 'DEGRADES forward') and which metric to cite for which use. Reads the live training sidecars. Use when asked 'how accurate is the model?' — never quote one number alone. HONEST: the retired v2 '0.998 F1' had country-tier leakage and is not a live claim."},{"name":"get_isp_categories","description":"Per-ISP selective targeting: which CONTENT CATEGORIES a network (ASN) blocks vs leaves alone, separating targeted political censorship from blanket filtering. Pass country=XX&asn=NNNN for one network's per-category block rates + a blanket/selective/permissive/mixed label (e.g. KZ AS207446 blocks 94% of VPN/circumvention tools but 0% of news — a 'VPN-blocker'; RU AS47541 is the opposite, blocking news not VPNs); pass country=XX for the country's networks ranked. HONEST: block_rate is over MEASURED domains per category (a category absent is UNMEASURED, not 'allowed'); ASN coverage is dominated by CensoredPlanet DNS and is sparse for many networks, so most read 'blanket'."},{"name":"get_country_compare","description":"Head-to-head censorship comparison of two countries: each one's nationally-blocked domain count + Citizen Lab category profile, the SHARED blocklist (domains both confirm-block nationally, incl. shared political news/human-rights and shared circumvention tooling), and a per-category side-by-side showing who blocks more in each category. Built on the confirmed-national layer (>=3 independent networks) — counts agree with get_national_blocklist + get_co_blocking (e.g. IR vs RU: IR 789 blocked, 135 shared, RU blocks more NEWS while IR blocks more human-rights/VPN). Use for 'how does country X's censorship differ from Y's?'. HONEST: counts are a floor over the confirmed layer, not a census; deliberately no 'uniquely blocked' lists (absence in one country's layer is unconfirmed, not accessible); China under-counted (GFW=anomaly)."},{"name":"get_categories","description":"Citizen Lab content-category legend: maps every category code used across the censorship data (NEWS, POLR, HUMR, ANON, GMB, LGBT, REL, ...) to its human name plus how many domains carry it in the corpus, how many are confirmed blocked nationally somewhere, and how many countries block that category. The reference for interpreting any category code returned by get_category_leaders, get_censorship_intent, or the national blocklist. HONEST: national counts are over the >=3-network confirmed layer (a floor); China under-counted (GFW=anomaly)."}],"tool_count":54,"capabilities":{"tools":true,"resources":false,"prompts":false},"not_served_here":{"note":"Agent relay, memory, channel, attestation and probe tools are not implemented on this transport. Calling them here returns JSON-RPC error -32602.","agent_relay_rest":"https://api.voidly.ai/v1/agent/stats","relay_info":"https://api.voidly.ai/v1/relay/info","stdio_mcp_server":"npx @voidly/mcp-server","openapi":"https://api.voidly.ai/openapi.yaml"}}