{"server":{"name":"clicktrust","version":"0.1.0"},"transports":[{"kind":"http","url":"https://clicktrust.cc/mcp","description":"Streamable HTTP + SSE for hosted agents (all tools)"},{"kind":"http","url":"https://clicktrust.cc/mcp/web","description":"Website operations only: accounts, tag, blocking, IP lists, traps (surface=web)"},{"kind":"stdio","command":"npx -y @clicktrust/mcp","description":"stdio launcher for desktop/IDE clients"}],"auth":{"scoped_api_key":{"headerExample":"Authorization: Bearer ctk_mcp_…"},"oauth":{"authorizationUrl":"https://clicktrust.cc/api/oauth/authorize","tokenUrl":"https://clicktrust.cc/api/oauth/token","pkce":true}},"scopes":{"all":["web:read","web:write","inapp:read","inapp:write","inapp:sdk","mmp:read","mmp:write","mmp:postback","reports:read","reports:write","audience:read","audience:write","iplists:read","iplists:write","trap:read"],"byNamespace":{"web":["web:read","web:write"],"inapp":["inapp:read","inapp:write","inapp:sdk"],"mmp":["mmp:read","mmp:write","mmp:postback"],"reports":["reports:read","reports:write"],"audience":["audience:read","audience:write"],"iplists":["iplists:read","iplists:write"],"trap":["trap:read"]},"adminOnly":["admin:web","admin:site"],"note":"Tools scoped admin:* change a customer's website and accept only keys minted from Admin → API Keys. Partner keys are read-only on the web surface."},"surface":"all","namespaces":["audience","inapp","iplists","mmp","reports","site","trap","web"],"tools":[{"name":"audience.exclusion.export_url","namespace":"audience","description":"Return a dashboard URL the partner can use to download the audience-exclusion CSV. We don't stream large CSVs back through MCP.","scope":"audience:read","inputSchema":{"type":"object","properties":{"accountId":{"type":"number","optional":true},"platform":{"type":"string","enum":["google","meta"],"default":"google"}}}},{"name":"audience.exclusion.preview","namespace":"audience","description":"Preview the audience-exclusion list for an account (counts of users by risk bucket: 0=clean, 1=sus, 2=fraud).","scope":"audience:read","inputSchema":{"type":"object","properties":{"accountId":{"type":"number","optional":true},"dateFrom":{"type":"string","optional":true},"dateTo":{"type":"string","optional":true}}}},{"name":"audience.unsubscribe.add","namespace":"audience","description":"Add an email to the partner's unsubscribe list so future workflow emails skip them.","scope":"audience:write","inputSchema":{"type":"object","properties":{"email":{"type":"string"},"reason":{"type":"string","optional":true}}}},{"name":"inapp.accounts.create_native","namespace":"inapp","description":"Create a native (iOS/Android/Flutter) tracking account. platform must be one of ios|android|flutter. bundleId / packageName are recommended for store-store mapping.","scope":"inapp:write","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"platform":{"type":"string","enum":["ios","android","flutter"]},"bundleId":{"type":"string","optional":true},"packageName":{"type":"string","optional":true},"appStoreId":{"type":"string","optional":true},"playStoreUrl":{"type":"string","optional":true}}}},{"name":"inapp.app_events.list","namespace":"inapp","description":"Recent app events for a native account. Filter by name (event name) or eventCategory.","scope":"inapp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"name":{"type":"string","optional":true},"limit":{"type":"number","default":100}}}},{"name":"inapp.app_events.summary","namespace":"inapp","description":"Per-event-name counts over the last N days for a native account.","scope":"inapp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"days":{"type":"number","default":7}}}},{"name":"inapp.device_blocklist.list","namespace":"inapp","description":"Per-account device blocklist (iOS/Android/Flutter), keyed on the SDK-reported deviceIdHash.","scope":"inapp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true}}}},{"name":"inapp.device_blocklist.remove","namespace":"inapp","description":"Soft-remove a device blocklist entry (sets is_active=false).","scope":"inapp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"deviceIdHash":{"type":"string"}}}},{"name":"inapp.device_blocklist.upsert","namespace":"inapp","description":"Add or refresh a device blocklist entry for a native account.","scope":"inapp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"deviceIdHash":{"type":"string"},"platform":{"type":"string","enum":["ios","android","flutter"]},"reason":{"type":"string"},"deviceModel":{"type":"string","optional":true},"osVersion":{"type":"string","optional":true},"bundleId":{"type":"string","optional":true}}}},{"name":"inapp.sdk.install_md","namespace":"inapp","description":"Render the markdown install instructions for an account's SDK (with the trackingId + secret pre-filled). Useful for an LLM to surface to a developer.","scope":"inapp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true}}}},{"name":"inapp.sdk.rotate_secret","namespace":"inapp","description":"Rotate the SDK secret for a native account. Existing installs keep working until they re-init; new installs must use the new secret.","scope":"inapp:sdk","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true}}}},{"name":"iplists.blocklist.list","namespace":"iplists","description":"Read the per-account fraud blocklist (the IPs we'd push to the partner's ad platforms via autopush). Filter by accountId.","scope":"iplists:read","inputSchema":{"type":"object","properties":{"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"limit":{"type":"number","default":200}}}},{"name":"iplists.whitelist.add","namespace":"iplists","description":"ADMIN KEY ONLY. Add a single IP (or CIDR like 10.0.0.0/24) to the customer's whitelist with an optional human-readable label.","scope":"admin:web","inputSchema":{"type":"object","properties":{"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"ipAddress":{"type":"string"},"label":{"type":"string","optional":true}}}},{"name":"iplists.whitelist.bulk_upload","namespace":"iplists","description":"ADMIN KEY ONLY. Bulk-add IPs to the customer's whitelist. Each entry is { ipAddress, label? }. Useful for importing an office VPN range or partner allowlist.","scope":"admin:web","inputSchema":{"type":"object","properties":{"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"entries":{"type":"array","items":{"type":"object","properties":{"ipAddress":{"type":"string"},"label":{"type":"string","optional":true}}}}}}},{"name":"iplists.whitelist.list","namespace":"iplists","description":"List the tenant-wide IP whitelist (entries here are NEVER flagged as fraud). Returns entries with id, ipAddress, label, createdAt.","scope":"iplists:read","inputSchema":{"type":"object","properties":{"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true}}}},{"name":"iplists.whitelist.remove","namespace":"iplists","description":"ADMIN KEY ONLY. Remove a whitelist entry by its id (returned from iplists.whitelist.list).","scope":"admin:web","inputSchema":{"type":"object","properties":{"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"entryId":{"type":"number"}}}},{"name":"mmp.affiliates.create","namespace":"mmp","description":"Add an affiliate (e.g. a media buyer or partner network) to an account. Returns the created row including auto-generated slug.","scope":"mmp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"name":{"type":"string"},"slug":{"type":"string","optional":true},"contactEmail":{"type":"string","optional":true},"contactName":{"type":"string","optional":true},"fraudScanningEnabled":{"type":"boolean","optional":true},"autoBlockThreshold":{"type":"number","optional":true},"notes":{"type":"string","optional":true}}}},{"name":"mmp.affiliates.invite","namespace":"mmp","description":"Send an affiliate-portal invitation. Returns the invite URL the affiliate should open.","scope":"mmp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"affiliateId":{"type":"number"},"email":{"type":"string"}}}},{"name":"mmp.affiliates.list","namespace":"mmp","description":"List all affiliates configured under an account.","scope":"mmp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true}}}},{"name":"mmp.affiliates.update","namespace":"mmp","description":"Update an existing affiliate (status, contact info, fraud thresholds, notes).","scope":"mmp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"affiliateId":{"type":"number"},"name":{"type":"string","optional":true},"contactEmail":{"type":"string","optional":true},"contactName":{"type":"string","optional":true},"status":{"type":"string","enum":["active","paused","banned"],"optional":true},"fraudScanningEnabled":{"type":"boolean","optional":true},"autoBlockThreshold":{"type":"number","optional":true},"notes":{"type":"string","optional":true}}}},{"name":"mmp.clicks.list","namespace":"mmp","description":"Stream of MMP-tracked clicks for an account. Filter by affiliateId / offerId. Default limit 100.","scope":"mmp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"affiliateId":{"type":"number","optional":true},"offerId":{"type":"number","optional":true},"limit":{"type":"number","default":100},"offset":{"type":"number","default":0}}}},{"name":"mmp.offer_affiliates.upsert","namespace":"mmp","description":"Attach an affiliate to an offer (or update its terms). Allows per-affiliate payout overrides.","scope":"mmp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"offerId":{"type":"number"},"affiliateId":{"type":"number"},"payoutOverride":{"type":"number","optional":true},"status":{"type":"string","enum":["active","paused","rejected"],"optional":true}}}},{"name":"mmp.offers.create","namespace":"mmp","description":"Create an offer. payoutType is one of CPI/CPA/CPC/revshare. Currency defaults to USD. attributionModel is last_click or first_click.","scope":"mmp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"name":{"type":"string"},"slug":{"type":"string","optional":true},"description":{"type":"string","optional":true},"payoutType":{"type":"string","enum":["CPI","CPA","CPC","revshare"],"default":"CPI"},"payoutAmount":{"type":"number"},"currency":{"type":"string","default":"USD"},"targetGeos":{"type":"array","items":{"type":"string"},"optional":true},"targetPlatforms":{"type":"array","items":{"type":"string","enum":["ios","android","web","flutter"]},"optional":true},"conversionEvent":{"type":"string","default":"install"},"attributionWindowDays":{"type":"number","default":7},"attributionModel":{"type":"string","enum":["last_click","first_click"],"default":"last_click"},"destUrlIos":{"type":"string","optional":true},"destUrlAndroid":{"type":"string","optional":true},"dailyCap":{"type":"number","optional":true},"totalCap":{"type":"number","optional":true}}}},{"name":"mmp.offers.list","namespace":"mmp","description":"List all offers under an account.","scope":"mmp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true}}}},{"name":"mmp.offers.update","namespace":"mmp","description":"Update an existing offer (payout, status, caps, destination URLs).","scope":"mmp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"offerId":{"type":"number"},"name":{"type":"string","optional":true},"description":{"type":"string","optional":true},"payoutType":{"type":"string","enum":["CPI","CPA","CPC","revshare"],"optional":true},"payoutAmount":{"type":"number","optional":true},"currency":{"type":"string","optional":true},"status":{"type":"string","enum":["active","paused","archived"],"optional":true},"attributionModel":{"type":"string","enum":["last_click","first_click"],"optional":true},"destUrlIos":{"type":"string","optional":true},"destUrlAndroid":{"type":"string","optional":true},"dailyCap":{"type":"number","nullable":true,"optional":true},"totalCap":{"type":"number","nullable":true,"optional":true}}}},{"name":"mmp.postbacks.list","namespace":"mmp","description":"List postback delivery attempts (most recent first). Filter by status (pending|delivered|failed). Default limit 100.","scope":"mmp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"status":{"type":"string","enum":["pending","delivered","failed"],"optional":true},"limit":{"type":"number","default":100},"offset":{"type":"number","default":0}}}},{"name":"mmp.postbacks.replay","namespace":"mmp","description":"Reset a single postback row to pending so the worker retries delivery. Useful when an affiliate's endpoint was temporarily down.","scope":"mmp:postback","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"postbackId":{"type":"number"}}}},{"name":"mmp.settings.enable","namespace":"mmp","description":"Turn on Lite-MMP for an account so the rest of the mmp.* tools become available.","scope":"mmp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true}}}},{"name":"mmp.settings.get","namespace":"mmp","description":"Read Lite-MMP settings + 30-day stats for an account (affiliates, active offers, clicks, attributed conversions, postback queue).","scope":"mmp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true}}}},{"name":"mmp.tracking_domains.add","namespace":"mmp","description":"Add a custom tracking-domain CNAME. Returns the verification token the partner must set as a TXT record or HTTP-file.","scope":"mmp:write","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"hostname":{"type":"string"}}}},{"name":"mmp.tracking_domains.list","namespace":"mmp","description":"List custom tracking domains (CNAMEs) configured for the account.","scope":"mmp:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true}}}},{"name":"reports.aggregate.query","namespace":"reports","description":"Aggregate fraud stats over a date range: total clicks, fraud rate, top countries, top IPs. Optional accountId.","scope":"reports:read","inputSchema":{"type":"object","properties":{"accountId":{"type":"number","optional":true},"dateFrom":{"type":"string"},"dateTo":{"type":"string"}}}},{"name":"reports.data.query","namespace":"reports","description":"Pull raw click rows + verdicts (the same rows the dashboard table shows). Filters: accountId, fraudFilter, dateFrom/dateTo, page/pageSize.","scope":"reports:read","inputSchema":{"type":"object","properties":{"accountId":{"type":"number","optional":true},"fraudFilter":{"type":"string","enum":["clean","sus","fraud"],"optional":true},"dateFrom":{"type":"string","optional":true},"dateTo":{"type":"string","optional":true},"page":{"type":"number","default":1},"pageSize":{"type":"number","default":100}}}},{"name":"reports.scheduled.create","namespace":"reports","description":"Create a new scheduled report. Frequency is daily/weekly/monthly; recipients is a list of emails.","scope":"reports:write","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"accountId":{"type":"number","optional":true},"frequency":{"type":"string","enum":["daily","weekly","monthly"],"default":"weekly"},"columns":{"type":"array","items":{"type":"string"}},"recipients":{"type":"array","items":{"type":"string"}},"reportType":{"type":"string","enum":["summary","detailed","fraud_only"],"default":"summary"},"format":{"type":"string","enum":["csv","pdf"],"default":"csv"},"timezone":{"type":"string","default":"UTC"}}}},{"name":"reports.scheduled.list","namespace":"reports","description":"List scheduled reports for the caller. Returns name, frequency, next run, recipients.","scope":"reports:read","inputSchema":{"type":"object","properties":{}}},{"name":"reports.scheduled.run_now","namespace":"reports","description":"Force a scheduled report to run immediately (sends to its configured recipients). Useful when an exec wants the latest numbers.","scope":"reports:write","inputSchema":{"type":"object","properties":{"reportId":{"type":"number"}}}},{"name":"site.assets.delete","namespace":"site","description":"ADMIN. Delete an uploaded asset by name. Pages still referencing it will show a broken link.","scope":"admin:site","inputSchema":{"type":"object","properties":{"name":{"type":"string"}}}},{"name":"site.assets.list","namespace":"site","description":"ADMIN. List uploaded site assets with their URLs.","scope":"admin:site","inputSchema":{"type":"object","properties":{}}},{"name":"site.assets.upload","namespace":"site","description":"ADMIN. Upload an image/PDF/CSS/JS/font (base64, ≤5 MB) for use in pages or posts. Returns a permanent URL under /site-assets/<name>. Re-uploading the same name replaces it. Stored in the database so it survives deploys.","scope":"admin:site","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"contentType":{"type":"string"},"base64":{"type":"string"},"alt":{"type":"string","optional":true}}}},{"name":"site.blog.create","namespace":"site","description":"ADMIN. Create a blog post (markdown or HTML content, same renderer as the blog). Draft unless publish=true. Slug is derived from the title unless given.","scope":"admin:site","inputSchema":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"slug":{"type":"string","optional":true},"excerpt":{"type":"string","optional":true},"tags":{"type":"array","items":{"type":"string"},"optional":true},"metaDescription":{"type":"string","optional":true},"seoTitle":{"type":"string","optional":true},"coverImageUrl":{"type":"string","optional":true},"author":{"type":"string","optional":true},"publish":{"type":"boolean","optional":true}}}},{"name":"site.blog.get","namespace":"site","description":"ADMIN. Fetch one blog post by id or slug, including full content.","scope":"admin:site","inputSchema":{"type":"object","properties":{"id":{"type":"number","optional":true},"slug":{"type":"string","optional":true}}}},{"name":"site.blog.list","namespace":"site","description":"ADMIN. List blog posts (newest first) with slug, status, tags and dates.","scope":"admin:site","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","published"],"optional":true},"limit":{"type":"number","default":50}}}},{"name":"site.blog.update","namespace":"site","description":"ADMIN. Edit a blog post (title, content, excerpt, tags, SEO, cover, author) or change its status (draft|published). Only passed fields change.","scope":"admin:site","inputSchema":{"type":"object","properties":{"id":{"type":"number"},"title":{"type":"string","optional":true},"content":{"type":"string","optional":true},"excerpt":{"type":"string","optional":true},"tags":{"type":"array","items":{"type":"string"},"optional":true},"metaDescription":{"type":"string","optional":true},"seoTitle":{"type":"string","optional":true},"coverImageUrl":{"type":"string","nullable":true,"optional":true},"author":{"type":"string","optional":true},"status":{"type":"string","enum":["draft","published"],"optional":true}}}},{"name":"site.pages.create","namespace":"site","description":"ADMIN. Create a website page at a URL path. Provide title and content (HTML, or markdown with format=markdown). Starts as a draft unless publish=true. layout=site renders inside the standard nav/footer; layout=blank serves your HTML as the whole body. Reserved app paths (/dashboard, /admin, /api, /blog, …) are refused; other existing marketing routes CAN be replaced — the page wins once published.","scope":"admin:site","inputSchema":{"type":"object","properties":{"path":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"format":{"type":"string","enum":["html","markdown"],"optional":true},"layout":{"type":"string","enum":["site","blank"],"optional":true},"metaDescription":{"type":"string","optional":true},"seoTitle":{"type":"string","optional":true},"ogImageUrl":{"type":"string","optional":true},"canonicalUrl":{"type":"string","optional":true},"showInNav":{"type":"boolean","optional":true},"navLabel":{"type":"string","optional":true},"navOrder":{"type":"number","optional":true},"publish":{"type":"boolean","optional":true}}}},{"name":"site.pages.delete","namespace":"site","description":"ADMIN. Archive a page (kept in the database, no longer served, path freed only after deleting). Pass hard=true to delete permanently.","scope":"admin:site","inputSchema":{"type":"object","properties":{"id":{"type":"number","optional":true},"path":{"type":"string","optional":true},"hard":{"type":"boolean","optional":true}}}},{"name":"site.pages.get","namespace":"site","description":"ADMIN. Fetch one page by id or path, including its full HTML and SEO fields.","scope":"admin:site","inputSchema":{"type":"object","properties":{"id":{"type":"number","optional":true},"path":{"type":"string","optional":true}}}},{"name":"site.pages.list","namespace":"site","description":"ADMIN. List website pages managed through MCP (drafts and published), with path, status, nav settings and size. Compiled marketing pages are not listed, but a published page can replace one by using its path.","scope":"admin:site","inputSchema":{"type":"object","properties":{"status":{"type":"string","enum":["draft","published","archived"],"optional":true}}}},{"name":"site.pages.publish","namespace":"site","description":"ADMIN. Publish a draft (or re-publish an archived page) so it is served at its path.","scope":"admin:site","inputSchema":{"type":"object","properties":{"id":{"type":"number","optional":true},"path":{"type":"string","optional":true}}}},{"name":"site.pages.unpublish","namespace":"site","description":"ADMIN. Take a page offline (status=draft). Its path reverts to whatever the app served before.","scope":"admin:site","inputSchema":{"type":"object","properties":{"id":{"type":"number","optional":true},"path":{"type":"string","optional":true}}}},{"name":"site.pages.update","namespace":"site","description":"ADMIN. Edit a page: any of title, content (+format), layout, SEO fields, nav settings, or move it to a new path (newPath). Only the fields you pass change. Published pages update live within a minute.","scope":"admin:site","inputSchema":{"type":"object","properties":{"id":{"type":"number","optional":true},"path":{"type":"string","optional":true},"title":{"type":"string","optional":true},"content":{"type":"string","optional":true},"format":{"type":"string","enum":["html","markdown"],"optional":true},"layout":{"type":"string","enum":["site","blank"],"optional":true},"metaDescription":{"type":"string","optional":true},"seoTitle":{"type":"string","optional":true},"ogImageUrl":{"type":"string","optional":true},"canonicalUrl":{"type":"string","optional":true},"showInNav":{"type":"boolean","optional":true},"navLabel":{"type":"string","optional":true},"navOrder":{"type":"number","optional":true},"newPath":{"type":"string","optional":true}}}},{"name":"trap.account.set","namespace":"trap","description":"Enable or disable one or more traps for an account. Pass trapIds (array of catalog ids) and action=enable|disable. Enabling an opt-in trap adds it to the account's overrides; disabling adds it to the disabled list. Returns the new enabled/total counts. ADMIN KEY ONLY (admin:web).","scope":"admin:web","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"trapIds":{"type":"array","items":{"type":"string"}},"action":{"type":"string","enum":["enable","disable"]}}}},{"name":"trap.account.status","namespace":"trap","description":"Show which traps are enabled vs disabled for a specific account. Returns per-trap state (enabled/disabled) with the reason (default, opt-in override, explicitly disabled, or platform-scoped out), plus enabled/total counts. Identify the account by trackingId or accountId. Optionally filter to only enabled or only disabled.","scope":"web:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"state":{"type":"string","enum":["enabled","disabled"],"optional":true},"category":{"type":"string","enum":["bot_detection","ip_analysis","fingerprint","referer","time_pattern","macro_utm","behavioral","viewability","lead_gen","geo","attention","gam_creative","social_fraud","mobile_app","video_player","brand_safety","mmp_attribution","ctv_inventory"],"optional":true}}}},{"name":"trap.catalog.get","namespace":"trap","description":"Get the full definition of a single trap by its id, including its plain-English meaning, detection method, risk weighting, and the meanings of its category / risk / MRC classifications. Use trap.catalog.list to discover ids.","scope":"trap:read","inputSchema":{"type":"object","properties":{"id":{"type":"string"}}}},{"name":"trap.catalog.list","namespace":"trap","description":"List ClickTrust's fraud-detection traps with their names, definitions (what each detects and why it matters), risk weighting, detection method, and MRC (GIVT/SIVT) class. Optionally filter by category, severity, mrcCategory, platformScope, or a free-text search over id/name/description.","scope":"trap:read","inputSchema":{"type":"object","properties":{"category":{"type":"string","enum":["bot_detection","ip_analysis","fingerprint","referer","time_pattern","macro_utm","behavioral","viewability","lead_gen","geo","attention","gam_creative","social_fraud","mobile_app","video_player","brand_safety","mmp_attribution","ctv_inventory"],"optional":true},"severity":{"type":"string","enum":["low","medium","high"],"optional":true},"mrcCategory":{"type":"string","enum":["GIVT","SIVT"],"optional":true},"platformScope":{"type":"string","enum":["web","in_app","both","ctv"],"optional":true},"search":{"type":"string","optional":true},"limit":{"type":"number","optional":true}}}},{"name":"trap.taxonomy","namespace":"trap","description":"Explain the classification system behind the traps: every detection category and its meaning, the risk levels (clean/low/medium/high) and what they imply, the MRC GIVT vs SIVT definitions, and per-category trap counts. Use this to interpret what any verdict means.","scope":"trap:read","inputSchema":{"type":"object","properties":{}}},{"name":"web.accounts.create","namespace":"web","description":"ADMIN KEY ONLY. Create a web tracking account (a site to protect) for the customer named by ownerEmail. Returns the install snippet. Options: isLeadGen (form-fill scanning), gtmMode (deploy via Google Tag Manager, not domain-locked), tagUnlocked (one tag for many sites, not domain-locked). A domain is required unless gtmMode or tagUnlocked is set.","scope":"admin:web","inputSchema":{"type":"object","properties":{"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"name":{"type":"string"},"domain":{"type":"string","optional":true},"isLeadGen":{"type":"boolean","optional":true},"gtmMode":{"type":"boolean","optional":true},"tagUnlocked":{"type":"boolean","optional":true},"skipBlankUtm":{"type":"boolean","optional":true},"skipBlankReferer":{"type":"boolean","optional":true}}}},{"name":"web.accounts.features","namespace":"web","description":"Report the full feature/capability map for accounts: every toggleable capability (scanning surfaces page/creative/pathfinder/GTM, lead-gen scanning, session replay, heatmaps, Lite-MMP, trap enablement counts, macro rules) and whether each is enabled. Omit trackingId/accountId to get all owned accounts; pass one to scope to a single account.","scope":"web:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true}}}},{"name":"web.accounts.get","namespace":"web","description":"Look up a single tracking account by trackingId or numeric accountId. Returns blocking config, scanning modes, and SDK info.","scope":"web:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true}}}},{"name":"web.accounts.list","namespace":"web","description":"List every web/in-app tracking account owned by the caller. Returns id, trackingId, name, domain, platform, and active status.","scope":"web:read","inputSchema":{"type":"object","properties":{"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true}}}},{"name":"web.accounts.set_active","namespace":"web","description":"ADMIN KEY ONLY. Activate or deactivate a tracking account. Deactivating stops the tag and rejects its beacons immediately; data is kept. Prefer this over deleting.","scope":"admin:web","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"isActive":{"type":"boolean"}}}},{"name":"web.accounts.update","namespace":"web","description":"ADMIN KEY ONLY. Edit a web tracking account: name, domain (landing URL the tag is locked to), tagUnlocked (multi-site tag, no domain lock), gtmMode, isLeadGen, skipBlankUtm/skipBlankReferer. Only the fields you pass change. Use web.accounts.set_active to deactivate.","scope":"admin:web","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"name":{"type":"string","optional":true},"domain":{"type":"string","nullable":true,"optional":true},"tagUnlocked":{"type":"boolean","optional":true},"gtmMode":{"type":"boolean","optional":true},"isLeadGen":{"type":"boolean","optional":true},"skipBlankUtm":{"type":"boolean","optional":true},"skipBlankReferer":{"type":"boolean","optional":true}}}},{"name":"web.accounts.update_blocking","namespace":"web","description":"ADMIN KEY ONLY. Set real-time blocking for a site: enabled, blockAction (redirect_404 | captcha | custom_redirect), captchaType, blockingRuleMode (category | trap) and the blocked risk categories / traps. Same settings as the dashboard's Blocking tab; takes effect on the next beacon.","scope":"admin:web","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"enabled":{"type":"boolean"},"blockAction":{"type":"string","enum":["redirect_404","captcha","custom_redirect"],"optional":true},"captchaType":{"type":"string","enum":["math","checkbox"],"optional":true},"customRedirectUrl":{"type":"string","nullable":true,"optional":true},"blockingRuleMode":{"type":"string","enum":["category","trap"],"optional":true},"blockedRiskCategories":{"type":"array","items":{"type":"string","enum":["high","medium","low"]},"optional":true},"blockedTrapCategories":{"type":"array","items":{"type":"string"},"optional":true},"blockedTraps":{"type":"array","items":{"type":"string"},"optional":true}}}},{"name":"web.blocking.get","namespace":"web","description":"Read the real-time blocking configuration for a site (enabled, action, captcha type, rule mode, blocked categories/traps).","scope":"web:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true}}}},{"name":"web.heatmap.clicks","namespace":"web","description":"Get click heatmap data: list of all clicks with x/y coordinates, timestamps, and fraud verdicts. Returns grid coordinates for rendering overlay on page mockup.","scope":"web:read","inputSchema":{"type":"object","properties":{"accountId":{"type":"number"},"pageUrl":{"type":"string"},"fraudFilter":{"type":"string","enum":["clean","sus","fraud"],"optional":true},"dateFrom":{"type":"string","optional":true},"dateTo":{"type":"string","optional":true},"gridSize":{"type":"number","default":50}}}},{"name":"web.heatmap.patterns","namespace":"web","description":"Identify behavioral patterns: scroll depth distribution, time-on-page, mouse movement, click velocity. Compares clean vs. fraudulent visitors to show behavioral anomalies.","scope":"web:read","inputSchema":{"type":"object","properties":{"accountId":{"type":"number"},"pageUrl":{"type":"string","optional":true},"dateFrom":{"type":"string","optional":true},"dateTo":{"type":"string","optional":true}}}},{"name":"web.heatmap.summary","namespace":"web","description":"Get heatmap data summary for an account or page: click density, scroll depth distribution, mouse behavior patterns, time-on-page. Compare clean vs. fraudulent traffic side-by-side.","scope":"web:read","inputSchema":{"type":"object","properties":{"accountId":{"type":"number"},"pageUrl":{"type":"string","optional":true},"dateFrom":{"type":"string","optional":true},"dateTo":{"type":"string","optional":true},"compareClean":{"type":"boolean","default":true}}}},{"name":"web.scripts.snippet","namespace":"web","description":"Return the install snippet for an account (the same `<script>` shown in the partner dashboard). Use this after creating a new account or to remind a user how to install.","scope":"web:read","inputSchema":{"type":"object","properties":{"trackingId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true}}}},{"name":"web.session.export","namespace":"web","description":"Export a session as JSON or HAR (HTTP Archive) format for sharing with team or external fraud analysts. Includes full click timeline + metadata.","scope":"web:read","inputSchema":{"type":"object","properties":{"sessionId":{"type":"string"},"format":{"type":"string","enum":["json","har"],"default":"json"}}}},{"name":"web.session.get","namespace":"web","description":"Retrieve full session replay: all clicks in sequence with timestamps, coordinates, analysis verdicts, page views, and user agent fingerprint. Use sessionId from web.session.list.","scope":"web:read","inputSchema":{"type":"object","properties":{"sessionId":{"type":"string"}}}},{"name":"web.session.list","namespace":"web","description":"List recorded user sessions for an account. Returns session metadata: id, duration, click count, fraud score, user agent, country. Filters: accountId, dateFrom/dateTo, fraudFilter (clean|sus|fraud), country, limit.","scope":"web:read","inputSchema":{"type":"object","properties":{"accountId":{"type":"number"},"dateFrom":{"type":"string","optional":true},"dateTo":{"type":"string","optional":true},"fraudFilter":{"type":"string","enum":["clean","sus","fraud"],"optional":true},"country":{"type":"string","optional":true},"limit":{"type":"number","default":50}}}},{"name":"web.single.analyze","namespace":"web","description":"Run an ad-hoc fraud analysis on a single click payload (IP, user agent, referer, optional country/macros). Returns the same risk + fraud_type the live `/api/collect` path produces.","scope":"web:read","inputSchema":{"type":"object","properties":{"ip":{"type":"string"},"userAgent":{"type":"string"},"referer":{"type":"string","optional":true},"requestUrl":{"type":"string","optional":true},"country":{"type":"string","optional":true},"macros":{"type":"object","additionalProperties":{"type":"string"},"optional":true}}}},{"name":"web.traffic.query","namespace":"web","description":"Query the click stream for an account or for the whole tenant. Filters: fraudFilter (clean|sus|fraud), accountId, dateFrom/dateTo (ISO dates), country, page, pageSize. Returns analysis verdicts inline.","scope":"web:read","inputSchema":{"type":"object","properties":{"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"fraudFilter":{"type":"string","enum":["clean","sus","fraud"],"optional":true},"dateFrom":{"type":"string","optional":true},"dateTo":{"type":"string","optional":true},"page":{"type":"number","default":1},"pageSize":{"type":"number","default":50}}}},{"name":"web.traffic.tqi","namespace":"web","description":"Get Traffic Quality Index (TQI) for one or more accounts. TQI is a 0–10 score where 10 = all clicks are clean and 0 = all clicks are fraudulent. Returns TQI per account plus aggregate stats (total clicks, fraudulent count, total analyzed). Optionally filter by date range and timezone.","scope":"web:read","inputSchema":{"type":"object","properties":{"ownerEmail":{"type":"string","optional":true},"ownerUserId":{"type":"string","optional":true},"accountId":{"type":"number","optional":true},"dateFrom":{"type":"string","optional":true},"dateTo":{"type":"string","optional":true},"tz":{"type":"string","optional":true}}}}]}