Model Context Protocol bridge (Streamable HTTP) for ads.txt, sellers.json, and supply-chain investigations.
Use this URL in your MCP client (remote / HTTP transport):
https://mcp.decryptads.com/mcp
Transport path is /mcp, not the site root. Backend: same REST API as api.decryptads.com/docs.
MCP is available to signed-in DecryptAds accounts (free, researcher, and enterprise). Each user connects with their own API key (same tokens as the REST API). Some tools still require researcher / enterprise (e.g. Legal dossier, Crawl, Auto-Investigate, Feed Builder). Per-host ad-density and privacy scores are available to all signed-in tiers, including free.
svw_…); it is displayed only once.Send the token on every MCP request using either header (same key value):
Authorization: Bearer svw_YOUR_KEY_HERE # or X-API-Key: svw_YOUR_KEY_HERE
Prefer Authorization: Bearer … when the client has a standard OAuth/Bearer field.
Use X-API-Key if your client only supports custom headers or you already use that style for REST.
Do not send both with different values.
The bridge validates the key, then forwards it to the API (rate limits and monthly quota apply per user). Revoke the key in the app to disable MCP immediately.
See also: How to use the API.
These rules are also published as MCP server instructions to connected clients.
AI agents and operators must follow them to avoid overloading database-backed endpoints
(especially validation alerts) and hitting rate / monthly quota limits.
publisher_* tools across a long list of
hosts concurrently — especially
publisher_validation_alerts,
publisher_autoinvestigate, and
publisher_jurisdiction_partners.
publisher_autoinvestigate once per host for the scored overview when the key
has researcher or enterprise access (free-tier keys get 403 on
Auto-Investigate). For the full ad-density and privacy
crawl envelopes on that same host, call publisher_ad_density_score and
publisher_privacy_score (available to all signed-in tiers, including free). Call publisher_validation_alerts or
publisher_jurisdiction_partners when you need those payloads for the same host
(available to all tiers, including free).
ingest_hostnames triggers live fetches;
use it only when the user asks to rescan, and keep batches small.
legal_dossier one query at a time.
Prefer a hostname, ads ID (pub-… / seller id), or registry/tax ID over vague
name sweeps. Requires a researcher or enterprise account.
list_projects, get_project, and pin_to_project read/write the
same Projects as the webapp UI for that user. There is no shared/team project store.
Legacy aliases (list_cases, pin_to_case, …) still work.
list_feeds, preview_feed, and create_feed
require the feed_builder feature. Free-tier keys get 403.
sellers_json domain lookup, declared_supply,
reverse_owner / reverse_manager, Auto-Investigate, validation alerts).
Investigate one hostname at a time. Shared monthly quota still applies.
Bursting or parallel host lists will return 429.
MCP uses the same API key as REST; session webapp traffic is not on this 30/min cap.
Full tool list below. Canonical page for agents: this document at https://mcp.decryptads.com/.
Edit ~/.cursor/mcp.json or a project .cursor/mcp.json. Bearer (recommended):
{
"mcpServers": {
"decryptads": {
"url": "https://mcp.decryptads.com/mcp",
"headers": {
"Authorization": "Bearer svw_YOUR_KEY_HERE"
}
}
}
}
Same key via X-API-Key:
{
"mcpServers": {
"decryptads": {
"url": "https://mcp.decryptads.com/mcp",
"headers": {
"X-API-Key": "svw_YOUR_KEY_HERE"
}
}
}
}
Restart Cursor (or reload MCP). Tools appear in the MCP panel after a successful connection.
Same url and headers block (Bearer or X-API-Key) in claude_desktop_config.json under mcpServers. Restart the app fully.
claude mcp add --transport http decryptads https://mcp.decryptads.com/mcp \ --header "Authorization: Bearer svw_YOUR_KEY_HERE" # or claude mcp add --transport http decryptads https://mcp.decryptads.com/mcp \ --header "X-API-Key: svw_YOUR_KEY_HERE"
More clients and examples: Using DecryptAds with MCP (blog).
After you connect with a valid API key, your MCP client lists tools from the server
(tools/list). Names and descriptions match the deployed bridge.
Tools are grouped like the app: publisher page, ad system page, then shared utilities.
publisher_*)Same endpoints as /publisher/<host> and Auto-Investigate.
publisher_autoinvestigate (researcher+)publisher_declared_supplypublisher_jurisdiction_partnerspublisher_validation_alertspublisher_cppa_data_broker_matchpublisher_texas_data_broker_matchpublisher_vermont_data_broker_matchpublisher_oregon_data_broker_matchpublisher_tcf_vendor_list_matchpublisher_tranco_rankpublisher_ad_density_score (signed-in, including free) — ad-density lab score + details; GET /crawl/ad_density_score/<host>publisher_privacy_score (signed-in, including free) — privacy lab score + details; GET /crawl/privacy_score/<host>publisher_crawl_historypublisher_crawl_logpublisher_list_scanspublisher_store_appsSame as the Domain DNS / RDAP card on publisher and ad-system pages. Cache-only (no live dig/RDAP). Auth required (free+).
ns_rdap — cached NS + RDAP for a hostname’s eTLD+1 (GET /crawl/dns_rdap/<host>)ns_peers — other corpus domains sharing that host’s exact NS set (hostname → lookup → peers)ns_peers_request — same peers lookup when you already have an NS list (GET /crawl/dns_rdap_ns_peers?ns=…)
Same as the TLS certificate card on publisher and ad-system pages.
Cache-only (no live handshake). Auth required (free+). Does not strip www.
hostname_tls — cached leaf certificate for a hostname (GET /crawl/tls/<host>)tls_peers — other corpus hostnames presenting that host’s current leaf (hostname → lookup → peers)tls_peers_request — same peers lookup when you already have a leaf SHA-256 (GET /crawl/tls_peers?leaf_sha256=)ad_system_*)Same endpoints as the ad-system profile, explore sites/accounts, and sellers.diff.
ad_system_detailad_system_crawl_logad_system_list_scansad_system_known_tag_registryad_system_sellers_json_snapshotsad_system_sellers_diffad_system_list_declaring_sitesad_system_list_accountsad_system_orphaned_sellersingest_hostnamesvalidate_schain_serializedvalidate_schain_jsonget_hostnames_for_file_sha256get_top_ad_systems_ranking — GET /stats/ad_systemsget_ad_systems_high_risk — Geo Risk; GET /stats/ad_systems_high_risk (not /ad_systems_high_risk or /analytics/…)search_data_broker_registry — CA/TX/VT/OR filing search; GET /stats/data_broker_registry_search (web UI: /data_broker)get_ad_systems_data_broker — corpus ad systems overlapping those registries; GET /stats/ad_systems_data_brokerget_market_shareget_suspicious_direct_accountsget_network_clustersget_seller_transparency_scoresget_publishers_missing_ownerdomainget_duplicate_ads_txt_linesreverse_lookup_ownerdomainreverse_lookup_managerdomainvalidate_tag_certification_idsanalyze_file_commentslegal_dossier — company registries, officers, and ad-supply crosswalk from a
website, company/seller name, ads ID, or registry/tax/LEI ID
(GET /analytics/legal_dossier). Heavy — one query at a time.
Researcher / enterprise only.
compare_latest_files_between_hostsdiff_file_snapshots_by_sha256diff_sellers_json_by_sha256lookup_declaration_seller_listingslookup_seller_id_declarationslookup_seller_id_publisher_counts — unique publisher-host
counts per seller/account id in latest ads.txt ∪ app-ads.txt
(POST /analytics/seller_id_publisher_counts). Researcher+ only.
lookup_dark_pool_wallets — dark-pool P0 tag + 0–100 score
per DIRECT (advertising_system, seller_id) wallet
(POST /analytics/dark_pool/wallets). Researcher+ only.
get_seller_supply_profilelookup_seller_json_rowssearch_sellers_by_name_substringlist_sellers_for_registrable_domainget_ads_txt_lines_for_snapshotget_app_ads_txt_lines_for_snapshotlist_ads_txt_entries_for_publisher_accountlist_app_ads_txt_entries_for_publisher_accountsearch_store_apps_catalogget_store_app_catalog_detaillist_projects — list projects for the API-key owner (GET /me/projects)get_project — project status + pins by id or namecreate_project / update_project / delete_projectpin_to_project — pin an SPA route (e.g. publisher/example.com)update_project_pin / remove_project_pinlist_cases, get_case, create_case, update_case, delete_case, pin_to_case, update_case_pin, remove_case_pinlist_feeds / get_feed / create_feed / update_feed / delete_feedpreview_feed — live count without savinglist_feed_members / get_feed_delta / run_feedlist_feed_criteria / classify_feed_valueResearcher+ only. Free-tier keys get 403. Daily or weekly schedules are available; you can still save and run feeds manually.
get_impressionlog_analysis_job — poll job status (upload files in the web app)
Large impression-log uploads are not exposed via MCP; use the web UI, then poll with
get_impressionlog_analysis_job.
example.com” → publisher_autoinvestigate (one host; researcher+)example.com” → publisher_ad_density_score then publisher_privacy_score (same host; signed-in including free)legal_dossier (one query; researcher+)list_projectsget_projectpublisher/example.com to project 12” → pin_to_projectabc…” → preview_feed (researcher+)publisher_declared_supplyexample.com” → ns_rdapexample.com’s nameservers?” → ns_peersexample.com” → hostname_tlsexample.com?” → tls_peerspublisher_validation_alertsget_ad_systems_high_risk (GET /stats/ad_systems_high_risk)search_data_broker_registryget_ad_systems_data_brokerpublisher_oregon_data_broker_matchad_system_sellers_diffad_system_list_declaring_sitesvalidate_schain_jsoningest_hostnames (small batches)Avoid prompts that imply parallel multi-host investigation (“check validation alerts for these 50 domains at once”).
MCP and REST share the same API keys and backend. For scripts without an AI assistant, call the REST API directly.