com.sulvo.publisher-revenue-audit/audit
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Publisher revenue audit: ads.txt and ad-stack checks, Sulvo onboarding, and Boost ad-block recovery
| Author | com.sulvo.publisher-revenue-audit |
|---|---|
| Access | mixed |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 266 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"audit": {
"url": "https://publisher-revenue-audit.sulvo.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (41)
check_https_certificateread-onlyCheck a publisher domain for HTTPS and certificate issues: expired/untrusted/hostname-mismatch certs, HTTPS down, HTTP that does not upgrade, and certs expiring within 14 days. Does not write a finding when both HTTP and HTTPS are unreachable.
Parameters:
domain(required) — string — Publisher domain, for example example.com.outputFormat— string
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
run_agentic_readiness_auditread-onlyFree top-of-funnel scan: could a buyer agent find and buy this publisher? Checks adagents.json, standardized taxonomy tagging, audience segments in a readable schema, and a product/deals catalog. Returns what a buyer agent would see and what it cannot.
Parameters:
domain(required) — string — Publisher domain, for example example.com.outputFormat— string
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
check_crawler_blocksread-onlyCheck whether robots.txt or a live probe blocks AmazonAdBot / Google ad crawlers. robots.txt Disallow and Amazon Crawl-delay are high-confidence fails. A WAF 403 against our scanner is a medium-confidence warn that needs verification.
Parameters:
domain(required) — string — Publisher domain, for example example.com.outputFormat— string
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
get_sulvo_boost_setupread-onlyInstructions for setting up Sulvo Boost: first-party serving from the publisher's own CDN that recovers ad-blocked impressions. Covers Cloudflare, AWS and Fastly, plus the WordPress plugin for publishers who would rather not use a terminal.
Parameters:
cdn— string — The CDN fronting the site; omit to get all three options.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
start_sulvo_revenue_onboardingCreate or resume a verified-account activation workspace after the public audit and signup steps.
Parameters:
domain(required) — stringgoal— string — The publisher's #1 goal: increase demand and CPMs, or recover ad-blocked impressions (Boost).retagTiming— string — Demand goal only: retag now (requires passback/backup mapping) or after site approval (no passback).outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.auditArtifactId— string
Hints: read-only no · destructive no · idempotent not declared · open-world no
get_sulvo_revenue_onboarding_statusread-onlyReturn the backend-owned journey stage, readiness dimensions, and one next best action.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.outputFormat— string
Hints: read-only yes · destructive no · idempotent not declared · open-world no
attach_sulvo_revenue_auditdestructiveAttach a current public revenue audit artifact. Input requires expectedVersion and auditArtifactId.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
connect_sulvo_backup_providerReturn the GAM or AdSense authorization URL. Input requires provider set to gam or adsense.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive no · idempotent not declared · open-world no
import_sulvo_backup_unitsdestructiveImport connected provider units. Input requires provider and expectedVersion.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
review_sulvo_placement_recommendationsdestructiveSave accept, edit, or reject decisions. Input requires expectedVersion and decisions.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
save_sulvo_placement_planSave a placement revision. Input requires expectedVersion and payload.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input(required) — object — A revision containing from 1 to 50 placements plus the consent/runtime attestations preflight requires.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive no · idempotent not declared · open-world no
map_sulvo_placement_backupdestructiveMap a display placement backup. Input requires expectedVersion, stablePlacementId, provider, and providerId.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
get_sulvo_installation_instructionsread-onlyReturn installation values for the locked revision. Input is empty.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
verify_sulvo_placement_installationVerify every stable placement container and the inert loader for the locked revision.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive no · idempotent not declared · open-world no
lock_sulvo_placement_revisiondestructiveLock the exact mapped revision. Input requires expectedVersion and revisionId.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
run_sulvo_activation_preflightRun the complete bounded activation preflight for the locked workspace revision.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive no · idempotent not declared · open-world no
verify_sulvo_site_ownershipVerify the required ads.txt and inert Sulvo head-tag ownership evidence.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive no · idempotent not declared · open-world no
submit_sulvo_activation_workspacedestructiveSubmit the proven revision. Input requires expectedVersion and revisionId.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
submit_sulvo_site_for_approvaldestructiveRetag-after-approval journeys: submit the bare site for Google approval (ads.txt ownership only, no tags). Input requires expectedVersion.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
set_sulvo_onboarding_journeydestructiveSet or change the journey intake answers on the workspace. Input requires expectedVersion plus at least one of mode, goal, retagTiming.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
rollback_sulvo_activationdestructiveReturn the workspace domain to publisher-owned backup-only serving.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
get_sulvo_activation_smoke_statusread-onlyReturn active-probe, real-page, and remediation status for the latest activation attempt.
Parameters:
workspaceId(required) — string — Activation workspace identifier returned by the start or status tool.input— object — Fields required by this journey action.outputFormat— stringidempotencyKey— string — Optional retry key. Reuse it when retrying the same mutation.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
run_publisher_revenue_auditread-onlyRun a public publisher revenue-readiness screen using directional public evidence. Audits ad stacks, ads.txt hygiene, consent readiness, PageSpeed metrics, and unblocked premium ad unit opportunities (such as Sulvo) to recover lost yield.
Parameters:
domain(required) — string — Publisher domain to screen, for example example.com. Private/local targets, raw IPs, internal hosts, and non-standard ports are rejected.metrics— object — Optional publisher-supplied metrics used for directional revenue interpretation.options— object — Optional output and audit controls.vertical— string — Optional publisher vertical used for interpretation.
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
apply_for_sulvo_accountdestructiveSubmit an unauthenticated Sulvo account application lead through the current signup API. Audit tools remain available without login, API key, or OAuth; ad-unit generation should wait for Sulvo account approval.
Parameters:
domain(required) — string — Primary publisher domain to submit for Sulvo account review. The current signup backend accepts root publisher domains.email(required) — string — Applicant email address Sulvo should use for follow-up.outputFormat— string
Hints: read-only no · destructive yes · idempotent not declared · open-world yes
start_sulvo_signupdestructiveRun normal Sulvo signup step 1: verify the publisher domain and create the unauthenticated signup lead.
Parameters:
domain(required) — string — Primary publisher root domain to submit for Sulvo signup.email(required) — string — Applicant email address.outputFormat— stringmonthlyPageviews— number — Optional expected monthly pageviews to carry into the response. The current lead API stores traffic during account creation.
Hints: read-only no · destructive yes · idempotent not declared · open-world yes
create_sulvo_signup_accountdestructiveRun normal Sulvo signup step 2: create the pending Sulvo user/account. The current signup backend requires a password before the account can continue to ads.txt and review.
Parameters:
domain(required) — string — Primary publisher root domain used in signup start.email(required) — string — Applicant email address.firstName(required) — stringlastName(required) — stringpassword(required) — string — Password for the pending Sulvo account. This is required by the current signup backend.monthlyPageviews(required) — numberphone— stringutmMedium— stringutmSource— stringmixpanelId— stringutmContent— stringoutputFormat— string
Hints: read-only no · destructive yes · idempotent not declared · open-world yes
update_sulvo_signup_companydestructiveRun normal Sulvo signup step 3: save optional company information for a pending Sulvo signup.
Parameters:
userId(required) — stringzip— stringcity— stringstate— stringaddress— stringcountry— stringwebsite— stringoutputFormat— stringemployeeCount— numbermonthlyAdRevenue— number
Hints: read-only no · destructive yes · idempotent not declared · open-world yes
get_sulvo_signup_ads_txtread-onlyRun normal Sulvo signup step 4a: fetch the ads.txt lines the publisher must add for site ownership verification.
Parameters:
userId(required) — stringoutputFormat— string
Hints: read-only yes · destructive no · idempotent not declared · open-world no
verify_sulvo_signup_ads_txtRun normal Sulvo signup step 4b: verify whether the submitted publisher domain has the required Sulvo ads.txt lines.
Parameters:
userId(required) — stringoutputFormat— string
Hints: read-only no · destructive no · idempotent not declared · open-world no
get_sulvo_signup_statusread-onlyReturn the current signup status capability. The current signup API has no public approval-status endpoint, so this tool reports that limitation instead of guessing approval state.
Parameters:
userId(required) — stringoutputFormat— string
Hints: read-only yes · destructive no · idempotent not declared · open-world no
submit_sulvo_signup_documentsread-onlyExplains how to complete Sulvo signup document review. Document submission is done in Sulvo onboarding - upload monthly earnings proof or connect an AdSense account - not through this connector, which has no access to the user's local files.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_publisher_revenue_audit_checklistread-onlyReturn the public checklist and interpretation notes used by the publisher revenue-readiness screen.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_publisher_monetization_benchmarksread-onlyGet comparative yield and CPM industry benchmarks by publisher vertical to compare standard stacks (AdSense and managed wrappers) against Sulvo Premium Ad Units.
Parameters:
vertical— string — Optional publisher vertical to retrieve benchmarks for. Defaults to other.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
create_sulvo_ad_unitCreate a Sulvo ad unit for an approved publisher. Requires SULVO_API_KEY (with the inventory:write scope) in the server environment, never passed as an argument — an account owner mints a write-scoped key in the Sulvo dashboard (Account Settings -> API key). The Sulvo account must be approved; the backend rejects unapproved accounts. Returns the created unit id and container root.
Parameters:
domain(required) — string — Publisher domain the ad unit belongs to.type(required) — string — Ad unit type.size— object — Ad size as width/height, or a responsive token like responsive_all. Required by the backend for most non-interstitial types.custom— string — Optional custom unit name.focusedAd— boolean — Only valid for the display type.placement— number — Optional placement weight (0-1).outputFormat— string
Hints: read-only no · destructive no · idempotent not declared · open-world no
create_sulvo_interstitial_unitsCreate Sulvo interstitial ad units (tagless) for an approved publisher. Requires SULVO_API_KEY (with the inventory:write scope) in the server environment.
Parameters:
domain(required) — string — Publisher domain the units belong to.adTypes(required) — array — One or more interstitial ad types to create.outputFormat— string
Hints: read-only no · destructive no · idempotent not declared · open-world no
create_sulvo_auto_sticky_unitsCreate Sulvo auto-sticky ad units for an approved publisher. Requires SULVO_API_KEY (with the inventory:write scope) in the server environment.
Parameters:
domain(required) — string — Publisher domain the units belong to.adTypes(required) — array — One or more sticky ad types to create.outputFormat— string
Hints: read-only no · destructive no · idempotent not declared · open-world no
delete_sulvo_ad_unitdestructiveDelete a Sulvo ad unit by id for an approved publisher. Requires SULVO_API_KEY (with the inventory:write scope) in the server environment. The key's account must own the unit; the backend enforces ownership.
Parameters:
adId(required) — string — The ad unit id to delete.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
get_sulvo_reportread-onlyFetch a Sulvo report (read-only). Requires SULVO_API_KEY in the server environment (a publisher generates it in the dashboard: Account Settings -> API key). Covers by-date, by-date-and-ad-unit, by-domain-and-ad-unit, bot-filtering, bot-scores, invalid-activity, direct-bidder-analysis, and ad-units-by-domain.
Parameters:
reportType(required) — string — Which report to fetch.end— string — End date (YYYY-MM-DD or ISO).start— string — Start date (YYYY-MM-DD or ISO). Required by most date-bounded reports.adRoots— array — Filter to these ad unit roots.domains— array — Filter to these publisher domains.adProvider— string — Optional provider filter (e.g. relabe, adsense).directBidder— string — Required for direct-bidder-analysis: the bidder name.outputFormat— string
Hints: read-only yes · destructive no · idempotent not declared · open-world no
list_sulvo_advanced_reportsread-onlyList the saved Sulvo advanced reports for the account. Requires SULVO_API_KEY (with the reports:read scope) in the server environment.
Parameters:
outputFormat— string
Hints: read-only yes · destructive no · idempotent not declared · open-world no
save_sulvo_advanced_reportdestructiveCreate/update a Sulvo advanced report (adUnit, dimensions, or customData), run immediately (emailed) or on a recurring schedule. Requires SULVO_API_KEY (with the reports:write scope) in the server environment. Note: advanced reports are delivered by email, not returned inline.
Parameters:
reportType(required) — string — Advanced report type.toAddress(required) — string — Email address the report is delivered to.immediateRun(required) — boolean — true to run now (emailed), false to only schedule (requires frequency).end— stringname— stringutms— array — customData (UTM) reports only.start— stringadRoots— arraydomains— arrayreportId— string — Provide to update an existing saved report.timeZone— string — IANA timezone for scheduled delivery.frequency— string — Required when immediateRun is false.dimensions— arrayoutputFormat— stringutmHourlyBreakdown— boolean
Hints: read-only no · destructive yes · idempotent not declared · open-world yes
delete_sulvo_advanced_reportdestructiveDelete a saved Sulvo advanced report by id. Requires SULVO_API_KEY (with the reports:write scope) in the server environment.
Parameters:
reportId(required) — string — The advanced report id to delete.
Hints: read-only no · destructive yes · idempotent not declared · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.