_ registry / mcp streamable-http · checked 11h ago

convertlyft

https://mcp.convertlyft.com

Registry code: e12d7876b8e7360c

api record

Convertlyft is web analytics that names the fix, for one website per workspace:

funnels, session replays, rage and dead clicks, form friction, errors, page speed and SEO.

endpoint
https://mcp.convertlyft.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is convertlyft live?
Yes — it answered the hub's last check (checked 11h ago). It answered 100% of checks over the last 30 days.
Is convertlyft free to use?
No — it asks for a key or a login before it will serve.
What tools does convertlyft have?
39 tools: cvl_public_agent_readiness, cvl_kpi, cvl_explain, cvl_change_undo, cvl_remember, cvl_seo_track_keywords, cvl_seo_set_competitor_state, cvl_seo_set_keyword_money, ….
Is convertlyft safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
708ms

last good check

priced tools
0

of 39 tools

_ answered our checks, 90 days 2 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 39 tools
38 auth-required 1 never probed 38 of 39 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • cvl_kpi auth-required 11h ago

    Visitors, sessions, conversion rate, revenue by currency, median engaged time and site health for a window — the same figures, from the same code, as the dashboard header. Every figure is an object, never a bare number: read "state" first. When state is "ok" it carries "value", a rendered "display", and its own "previous" and "delta" so you never divide; when state is anything else there is NO "value" key at all and "reason" is a sentence you can show a person. A non-ok figure means the number does not exist for this workspace or this range — never that it is zero. Pass from/to once, then present the returned window.handle on later calls so the whole chain reads one window.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "to": {
          "type": "string",
          "format": "date-time",
          "description": "End of the window, same full-timestamp shape: 2026-01-10T23:59:59Z. A date alone means the end of that day, UTC. Omit for now."
        },
        "from": {
          "type": "string",
          "format": "date-time",
          "description": "Start of the window, as a full ISO 8601 TIMESTAMP: 2026-01-01T00:00:00Z. A date alone (2026-01-01) means the start of that day, UTC. Omit for all time — which means all time, not today."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "source": {
          "type": "string",
          "description": "Restrict to one utm_source a visit carried, e.g. google. A source no visit carried is refused with the ones that did; a channel such as paid is not a source."
        },
        "campaign": {
          "type": "string",
          "description": "Restrict to one campaign."
        },
        "window_handle": {
          "type": "string",
          "description": "The handle from an earlier call in this chain. Present it and you get that call’s exact window and data_complete_through back. Takes precedence over from/to."
        }
      },
      "additionalProperties": false
    }
    arguments 35 lines
  • cvl_explain auth-required 37h ago

    The methodology behind one figure on the KPI header: its definition, the population it was computed over (denominator, numerator and row count), the filters in force, the condition that decides when it is withheld rather than shown, and the attribution epoch before which campaign-filtered counts are undercounted. It returns no figure value — call cvl_kpi for that, and present the same window.handle here so the explanation describes the numbers you already have. Repeat any source or campaign you passed to cvl_kpi: the handle carries the window, not the filters, so without them this describes the unfiltered population and says so in `filters`.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "to": {
          "type": "string",
          "format": "date-time",
          "description": "End of the window, same full-timestamp shape: 2026-01-10T23:59:59Z. A date alone means the end of that day, UTC. Omit for now."
        },
        "from": {
          "type": "string",
          "format": "date-time",
          "description": "Start of the window, as a full ISO 8601 TIMESTAMP: 2026-01-01T00:00:00Z. A date alone (2026-01-01) means the start of that day, UTC. Omit for all time — which means all time, not today."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "figure": {
          "enum": [
            "visitors",
            "sessions",
            "converted_sessions",
            "conversion",
            "revenue",
            "engaged_time",
            "crash_free_rate",
            "lcp_p75_ms"
          ],
          "type": "string",
          "description": "One figure to explain: visitors, sessions, converted_sessions, conversion, revenue, engaged_time, crash_free_rate, lcp_p75_ms. Omit it and every figure on the header comes back."
        },
        "source": {
          "type": "string",
          "description": "Restrict to one utm_source a visit carried, e.g. google. A source no visit carried is refused with the ones that did; a channel such as paid is not a source."
        },
        "verbose": {
          "type": "boolean",
          "description": "true adds each figure’s definition, when it is withheld, and why a row count is missing — the same prose on every call, so it is left out by default."
        },
        "campaign": {
          "type": "string",
          "description": "Restrict to one campaign."
        },
        "window_handle": {
          "type": "string",
          "description": "The handle from the cvl_kpi call whose figure you are asking about."
        }
      },
      "additionalProperties": false
    }
    arguments 53 lines
  • cvl_change_undo auth-required never probed

    Remove a marker you wrote, using the undo computed when it was applied. Takes the proposal_id cvl_change_apply returned. Calling it twice is safe — the second call reports the same result and removes nothing.

    mcp-tool

    {
      "type": "object",
      "required": [
        "proposal_id"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "proposal_id": {
          "type": "string",
          "description": "The proposal_id cvl_change_apply returned."
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • cvl_remember auth-required never probed

    Append one row to this workspace’s ledger so the next session does not derive it again. A finding MUST carry the receipt_id of the call it came from and the window it covers — a claim about the data with no receipt behind it is refused, by design. A decision, preference or question needs no receipt. You cannot delete anything here; only the owner can, from their settings.

    mcp-tool

    {
      "type": "object",
      "required": [
        "kind",
        "statement"
      ],
      "properties": {
        "to": {
          "type": "string",
          "format": "date-time",
          "description": "ISO 8601 end. Required for a finding. A timestamp with a zone, like 2026-01-01T00:00:00Z; a day alone (2026-01-01) means the end of that day, UTC."
        },
        "from": {
          "type": "string",
          "format": "date-time",
          "description": "ISO 8601 start of the window the finding covers. Omit for all time. A timestamp with a zone, like 2026-01-01T00:00:00Z; a day alone (2026-01-01) means the start of that day, UTC."
        },
        "kind": {
          "enum": [
            "finding",
            "decision",
            "preference",
            "question"
          ],
          "type": "string",
          "description": "finding = a claim about the data, needs a receipt. decision = what was chosen. preference = how this owner wants things done. question = something you asked and nobody answered."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "statement": {
          "type": "string",
          "description": "One sentence, in the words a person would read."
        },
        "window_to": {
          "type": "string",
          "description": "Older name for to, still accepted."
        },
        "receipt_id": {
          "type": "string",
          "description": "Required for a finding: the receipt_id returned by the call the finding came from."
        },
        "window_from": {
          "type": "string",
          "description": "Older name for from, still accepted."
        }
      },
      "additionalProperties": false
    }
    arguments 53 lines
  • cvl_seo_track_keywords auth-required never probed

    Add searches to rank tracking in a market. Checks follow the market's existing schedule; plan limits apply. Idempotent.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keywords"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates; location_code is accepted too). Omit for the primary market."
        },
        "keywords": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 120
          },
          "maxItems": 200,
          "description": "One or more searches, at most 200, each at most 120 characters."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Older name for market, still accepted."
        }
      },
      "additionalProperties": false
    }
    arguments 35 lines
  • cvl_seo_set_competitor_state auth-required never probed

    Pin a competitor (always used), dismiss one (hidden 180 days, or until it shares twice as many money keywords), or clear the choice. An authority site cannot be pinned. Idempotent.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain",
        "state"
      ],
      "properties": {
        "state": {
          "enum": [
            "pinned",
            "dismissed",
            "none"
          ],
          "type": "string"
        },
        "domain": {
          "type": "string"
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates; location_code is accepted too). Omit for the primary market."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Older name for market, still accepted."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • cvl_seo_set_keyword_money auth-required never probed

    Mark a search as a money keyword (counts for competitors and opportunities) or not. The same call with the other value undoes it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keyword",
        "money"
      ],
      "properties": {
        "money": {
          "type": "boolean"
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates; location_code is accepted too). Omit for the primary market."
        },
        "keyword": {
          "type": "string",
          "description": "The search, as typed."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Older name for market, still accepted."
        }
      },
      "additionalProperties": false
    }
    arguments 34 lines
  • cvl_seo_map_keyword_page auth-required never probed

    Say which page of the site targets a search. Answers the page it had before.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keyword",
        "page_url"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates; location_code is accepted too). Omit for the primary market."
        },
        "keyword": {
          "type": "string",
          "description": "The search, as typed."
        },
        "pageUrl": {
          "type": "string",
          "description": "Older name for page_url, still accepted."
        },
        "page_url": {
          "type": "string",
          "description": "Full address of the page. (pageUrl is accepted too.)"
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Older name for market, still accepted."
        }
      },
      "additionalProperties": false
    }
    arguments 39 lines
  • cvl_public_seo_scan_result auth-required never probed

    The result of a scan cvl_public_seo_scan started, by its scan_id. Same shape as that tool's answer; waits up to about 45 seconds if the scan is still running, then returns {status: "running", scan_id} again. Does not start a scan and does not count against the 5 scans a day. A scan_id stays readable for at least 24 hours (a finished scan of the same site is reused for 24 hours); the crawler may delete scans older than 30 days.

    mcp-tool

    {
      "type": "object",
      "required": [
        "scan_id"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "scan_id": {
          "type": "string",
          "maxLength": 80,
          "description": "The scan_id cvl_public_seo_scan returned."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • cvl_docs_search auth-required never probed

    Search Convertlyft’s public documentation for agents — https://convertlyft.com/llms.txt and https://convertlyft.com/llms-full.txt (the API, the MCP door, dates, limits, worked examples). Returns the best-matching sections, quoted, each with where it came from. Plain word matching, not a summary. No account needed; same per-address limits as the other public tools.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "query": {
          "type": "string",
          "maxLength": 200,
          "description": "What to look for, like \"rate limit\" or \"connect Claude\"."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • cvl_call_read auth-required 11h ago

    Run a Convertlyft READ tool that is not in your tool list, by name, with its arguments. It answers exactly as calling that tool directly would, with the same permissions. It refuses every write or spend tool: those are in your list and are called directly. Use cvl_search_tools to find the name and arguments.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The read tool to run, as cvl_search_tools named it."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "arguments": {
          "type": "object",
          "description": "Its arguments, as its inputSchema describes them."
        }
      },
      "additionalProperties": false
    }
    arguments 24 lines
  • cvl_whoami auth-required never probed

    What this credential is, which workspace it reads, the scopes it holds, when it expires, and how many calls are left in the current windows; today’s paid-work limit in credits, the credit balance (owner or billing seat), new public scans left today, and which tools each missing scope blocks. Call this first when a tool refuses you — the answer usually names the fix.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • cvl_behavior_report auth-required 37h ago

    Friction for a window: the pages people spend time on and scroll through, the rage clicks, the dead clicks (the tag’s own, minus the ones a link or a call answered — the Friction page’s count), and the form start-vs-submit funnel. Rows carry the same field names as cvl_dead_clicks, cvl_rage_clicks, cvl_page_attention and cvl_form_friction. Every collection is always present — an empty list means nobody did it, never that this tool does not report it. counts says which lists were capped, how many rows there really are, and the next_cursor that pages_cursor, rage_clicks_cursor or dead_clicks_cursor take. Medians under 30 visits and form rates under 30 starts are null. Instants are UTC.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "to": {
          "type": "string",
          "format": "date-time",
          "description": "End of the window, same full-timestamp shape. Omit for now. A timestamp with a zone, like 2026-01-01T00:00:00Z; a day alone (2026-01-01) means the end of that day, UTC."
        },
        "from": {
          "type": "string",
          "format": "date-time",
          "description": "Start of the window, as a full ISO 8601 TIMESTAMP: 2026-01-01T00:00:00Z. A date alone means the start of that day, UTC. Omit for all time — which means all time, not today."
        },
        "limit": {
          "type": "number",
          "description": "Rows per list. Default 8, ceiling 200."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "pages_cursor": {
          "type": "string",
          "description": "counts.pages.next_cursor from the previous answer, for the pages after it."
        },
        "window_handle": {
          "type": "string",
          "description": "A handle from an earlier report, to ask about the identical window."
        },
        "dead_clicks_cursor": {
          "type": "string",
          "description": "counts.dead_clicks.next_cursor from the previous answer."
        },
        "rage_clicks_cursor": {
          "type": "string",
          "description": "counts.rage_clicks.next_cursor from the previous answer."
        }
      },
      "additionalProperties": false
    }
    arguments 43 lines
  • cvl_change_apply auth-required never probed

    Record that the site changed, so the impact can be measured against it. Needs the preview_token from cvl_change_preview of the same note and marked_at: preview, show the person, apply only after they agree. Retry with the same idempotency_key and you get the same single marker back — never a second one. Returns the proposal id you undo with.

    mcp-tool

    {
      "type": "object",
      "required": [
        "idempotency_key",
        "preview_token"
      ],
      "properties": {
        "note": {
          "type": "string",
          "description": "What you changed, in your own words. Optional."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "marked_at": {
          "type": "string",
          "description": "When the change went live, ISO 8601. Defaults to now. May not be in the future."
        },
        "preview_token": {
          "type": "string",
          "description": "What cvl_change_preview returned for this same note and marked_at. Valid 30 minutes."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Your own key for this change. Reuse it to retry safely; use a new one for a new change."
        }
      },
      "additionalProperties": false
    }
    arguments 33 lines
  • cvl_run_crawl auth-required never probed

    Start a crawl of this workspace’s own site with the Convertlyft spider: every page’s status, title, description, headings, words and technical findings. A first-party crawler, not a paid provider; it uses the account’s credits, 1 per crawled page, so at most max_pages credits (dry_run: true says so and buys nothing; confirm_cost caps it). It starts immediately and runs for a few minutes; the SEO tab follows it live, and cvl_site_pages / cvl_page_content read it once it has finished. Use it when the person asks for a crawl or an audit, or when they ask about their pages and no crawl exists yet.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "max_pages": {
          "type": "number",
          "description": "How many pages to crawl at most. Defaults to 100; the ceiling is 500."
        },
        "confirm_cost": {
          "type": "integer",
          "minimum": 0,
          "description": "Run only if the estimate is at most this many credits; otherwise refuse and buy nothing."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • cvl_seo_keyword_metrics auth-required never probed

    For searches you name: monthly volume, difficulty, intent and the last 12 months of volume, as the provider estimates them. Each answer bought uses the account’s credits, inside this site’s daily limit, with no per-call confirmation. The answer is stored, so asking the same question again uses no credits (refresh: true buys again). cvl_usage shows what was used. Estimated at most 450 credits per answer bought; the charge is the provider’s actual cost. dry_run: true gives the estimate and today’s limit left without buying; confirm_cost caps it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keywords"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "refresh": {
          "type": "boolean",
          "description": "Buy a fresh answer instead of reading the stored one. Default false: the same question asked again is read back without using credits."
        },
        "keywords": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 120
          },
          "maxItems": 200,
          "description": "One or more searches, at most 200, each at most 120 characters."
        },
        "confirm_cost": {
          "type": "integer",
          "minimum": 0,
          "description": "Run only if the estimate is at most this many credits; otherwise refuse and buy nothing."
        },
        "language_code": {
          "type": "string",
          "maxLength": 3,
          "description": "Language, like en. Omit for the market’s own."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Country as a location code (e.g. 2784 for the United Arab Emirates). Omit for this site’s primary market, or the United States (2840) when none is set."
        }
      },
      "additionalProperties": false
    }
    arguments 48 lines
  • cvl_seo_domain_overview auth-required never probed

    Any site’s organic footprint in one country: how many searches it ranks for, how many of those in the top 3, and the provider’s estimate of its monthly search traffic. Each answer bought uses the account’s credits, inside this site’s daily limit, with no per-call confirmation. The answer is stored, so asking the same question again uses no credits (refresh: true buys again). cvl_usage shows what was used. Estimated at most 60 credits per answer bought; the charge is the provider’s actual cost. dry_run: true gives the estimate and today’s limit left without buying; confirm_cost caps it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "maxLength": 253,
          "description": "A site’s bare hostname, like example.com. Any site, not only this workspace’s."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "refresh": {
          "type": "boolean",
          "description": "Buy a fresh answer instead of reading the stored one. Default false: the same question asked again is read back without using credits."
        },
        "confirm_cost": {
          "type": "integer",
          "minimum": 0,
          "description": "Run only if the estimate is at most this many credits; otherwise refuse and buy nothing."
        },
        "language_code": {
          "type": "string",
          "maxLength": 3,
          "description": "Language, like en. Omit for the market’s own."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Country as a location code (e.g. 2784 for the United Arab Emirates). Omit for this site’s primary market, or the United States (2840) when none is set."
        }
      },
      "additionalProperties": false
    }
    arguments 44 lines
  • cvl_seo_competitor_gap auth-required never probed

    The searches one competitor ranks for that the site does not, best competitor positions first, with monthly volume and the competitor’s ranking page. Each answer bought uses the account’s credits, inside this site’s daily limit, with no per-call confirmation. The answer is stored, so asking the same question again uses no credits (refresh: true buys again). cvl_usage shows what was used. Estimated at most 54 credits per answer bought at the default limit; the charge is the provider’s actual cost. dry_run: true gives the estimate and today’s limit left without buying; confirm_cost caps it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain",
        "competitor"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Rows at most. Default 50."
        },
        "domain": {
          "type": "string",
          "maxLength": 253,
          "description": "A site’s bare hostname, like example.com. Any site, not only this workspace’s."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "refresh": {
          "type": "boolean",
          "description": "Buy a fresh answer instead of reading the stored one. Default false: the same question asked again is read back without using credits."
        },
        "competitor": {
          "type": "string",
          "maxLength": 253,
          "description": "The competitor’s bare hostname."
        },
        "confirm_cost": {
          "type": "integer",
          "minimum": 0,
          "description": "Run only if the estimate is at most this many credits; otherwise refuse and buy nothing."
        },
        "language_code": {
          "type": "string",
          "maxLength": 3,
          "description": "Language, like en. Omit for the market’s own."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Country as a location code (e.g. 2784 for the United Arab Emirates). Omit for this site’s primary market, or the United States (2840) when none is set."
        }
      },
      "additionalProperties": false
    }
    arguments 56 lines
  • cvl_seo_link_gap auth-required never probed

    Referring domains that link to one or more of the named competitors and not to the site, with which competitors each links to, its spam score and rank. Each answer bought uses the account’s credits, inside this site’s daily limit, with no per-call confirmation. The answer is stored, so asking the same question again uses no credits (refresh: true buys again). cvl_usage shows what was used. Estimated at most 78 credits per answer bought at the default limit; the charge is the provider’s actual cost. dry_run: true gives the estimate and today’s limit left without buying; confirm_cost caps it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain",
        "competitors"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Rows at most. Default 50."
        },
        "domain": {
          "type": "string",
          "maxLength": 253,
          "description": "A site’s bare hostname, like example.com. Any site, not only this workspace’s."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "refresh": {
          "type": "boolean",
          "description": "Buy a fresh answer instead of reading the stored one. Default false: the same question asked again is read back without using credits."
        },
        "competitors": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 253
          },
          "maxItems": 20,
          "description": "Up to 20 competitor hostnames."
        },
        "confirm_cost": {
          "type": "integer",
          "minimum": 0,
          "description": "Run only if the estimate is at most this many credits; otherwise refuse and buy nothing."
        }
      },
      "additionalProperties": false
    }
    arguments 50 lines
  • cvl_search_tools auth-required never probed

    Find a Convertlyft tool that is not in your tool list, and the skills (step-by-step playbooks) that fit. Your list holds a core set; behaviour, SEO, errors, site and workspace reads are here. Answers name, title and one line per tool; schema:true adds the input schema. Run a read it finds with cvl_call_read. Writes are always in your list already: call them directly.

    mcp-tool

    {
      "type": "object",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "minimum": 1,
          "description": "How many tools to return, at most 10. Default 5."
        },
        "query": {
          "type": "string",
          "maxLength": 200,
          "description": "Words for what you want to know, like \"rage clicks on a page\" or \"keyword rankings\". A tool name works too."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "schema": {
          "type": "boolean",
          "description": "true adds each tool’s full inputSchema, scopes and labels. Default false: name, title and one line."
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • cvl_skills_list auth-required never probed

    The Convertlyft skills: step-by-step playbooks for jobs like finding where people get stuck, fixing errors, auditing SEO or diagnosing a drop. Each has a name and when to use it. Open one with cvl_skill_read before starting that job.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • cvl_skill_read auth-required never probed

    One Convertlyft skill, in full: its SKILL.md, or one of its reference files when the skill points to one. cvl_skills_list names them. Follow the steps it gives with the other Convertlyft tools.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "file": {
          "type": "string",
          "maxLength": 200,
          "description": "A reference file the skill names, like \"references/page-analysis.md\". Default SKILL.md."
        },
        "name": {
          "type": "string",
          "maxLength": 100,
          "description": "The skill, as cvl_skills_list names it, like \"finding-ux-friction\"."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • cvl_check_claim auth-required never probed

    Submit the sentence you are about to say plus the receipt ids of the data you were given. Returns ok, or the exact span no receipt supports for the figure your sentence names, and a corrected sentence. A numeral is checked against the figure you NAME, so "Visitors were 41" is refused when visitors are 45 and 41 is the session count — a real number on the wrong figure is the failure this catches, not just an invented one. A rate needs its denominator ("3.2% of 1,200 sessions"), and a date or period you state ("last month", "October 10") is checked against the receipt window. A refusal names rule_code and rule_text, and a corrected_sentence when one can be built from the receipt. Deterministic — no model reads your sentence. Call this before you state a number to a human.

    mcp-tool

    {
      "type": "object",
      "required": [
        "sentence",
        "receipt_ids"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "sentence": {
          "type": "string",
          "description": "The sentence you are about to say, verbatim."
        },
        "receipt_ids": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Every receipt whose figures the sentence draws on. A numeral passes if it is present in at least one of them UNDER THE FIGURE THE SENTENCE NAMES — so name the figure (\"Visitors were 45\", not \"The number was 45\"), because a real number attached to the wrong figure is refused, and a numeral in a sentence naming no figure cannot be checked at all."
        }
      },
      "additionalProperties": false
    }
    arguments 28 lines
  • cvl_seo_run_flow auth-required never probed

    Run the SEO chain again from the newest crawl (or from one step): keywords, competitors, opportunities and briefs. It buys search data with the account’s credits inside the daily limit, with no per-call confirmation, and starts at once; cvl_seo_flow follows it. A step that meets the limit waits for tomorrow. cvl_usage shows what was used. It has no single per-call price: each purchase is charged at its cost; dry_run: true shows today’s limit left and buys nothing.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "fromStep": {
          "enum": [
            "crawl",
            "enrich",
            "competitors",
            "opportunities",
            "briefs"
          ],
          "type": "string",
          "description": "Older name for from_step, still accepted."
        },
        "from_step": {
          "enum": [
            "crawl",
            "enrich",
            "competitors",
            "opportunities",
            "briefs"
          ],
          "type": "string",
          "description": "Start from this step. (fromStep is accepted too.)"
        }
      },
      "additionalProperties": false
    }
    arguments 39 lines
  • cvl_seo_make_brief auth-required never probed

    Make the competitor page brief for one search: it reads the live top results, crawls the top pages and writes suggestions. It buys search data and a model pass with the account’s credits inside the daily limit, with no per-call confirmation. A brief made in the last 7 days is returned as it is unless force is true. cvl_seo_brief reads it. It has no single per-call price: each purchase is charged at its cost; dry_run: true shows today’s limit left and buys nothing.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keyword"
      ],
      "properties": {
        "force": {
          "type": "boolean",
          "description": "Make it again even when a brief from the last 7 days exists."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates; location_code is accepted too). Omit for the primary market."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "keyword": {
          "type": "string",
          "description": "The search, as typed."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Older name for market, still accepted."
        }
      },
      "additionalProperties": false
    }
    arguments 38 lines
  • cvl_seo_backlink_profile auth-required never probed

    Any site’s backlink headline counts from the provider’s link index: referring domains, backlinks, broken backlinks, referring pages and when it was first seen. Each answer bought uses the account’s credits, inside this site’s daily limit, with no per-call confirmation. The answer is stored, so asking the same question again uses no credits (refresh: true buys again). cvl_usage shows what was used. Estimated at most 74 credits per answer bought; the charge is the provider’s actual cost. dry_run: true gives the estimate and today’s limit left without buying; confirm_cost caps it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "maxLength": 253,
          "description": "A site’s bare hostname, like example.com. Any site, not only this workspace’s."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "refresh": {
          "type": "boolean",
          "description": "Buy a fresh answer instead of reading the stored one. Default false: the same question asked again is read back without using credits."
        },
        "confirm_cost": {
          "type": "integer",
          "minimum": 0,
          "description": "Run only if the estimate is at most this many credits; otherwise refuse and buy nothing."
        }
      },
      "additionalProperties": false
    }
    arguments 34 lines
  • cvl_operator_run auth-required never probed

    Queue today’s operator run for this workspace. It does NOT execute here — a worker claims the row and runs it, so this returns a run id and a status, never a report. If the workspace has already spent its daily cap the call is refused and names the cap and the spend; asking twice on one day attaches to the existing row rather than starting a second run.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "run_type": {
          "type": "string",
          "description": "Which run to queue. Lowercase, letters/digits/underscore. Defaults to seo_daily."
        }
      },
      "additionalProperties": false
    }
    arguments 17 lines
  • cvl_change_preview auth-required 37h ago

    Show exactly what cvl_change_apply would write, and the undo it would hand back, without writing anything. Nothing is queued and nothing is stored by this call. Returns the preview_token cvl_change_apply needs for this same change (valid 30 minutes).

    mcp-tool

    {
      "type": "object",
      "properties": {
        "note": {
          "type": "string",
          "description": "What you changed, in your own words. Optional."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "marked_at": {
          "type": "string",
          "description": "When the change went live, ISO 8601. Defaults to now. May not be in the future."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • cvl_propose auth-required never probed

    Queue a fix for the OWNER to approve. This does not apply anything and cannot: approval is a human act on this product, and no credential can approve a proposal, including its own. baseline is what you saw before proposing and revert_plan is how to undo it — both are required, because a proposal that cannot be staleness-checked or undone is one an owner cannot safely accept. Proposing the same fix_identity twice replaces the earlier card rather than showing two.

    mcp-tool

    {
      "type": "object",
      "required": [
        "fix_identity",
        "title",
        "baseline",
        "revert_plan"
      ],
      "properties": {
        "title": {
          "type": "string",
          "description": "One line the owner reads on the card."
        },
        "detail": {
          "type": "object",
          "description": "What you propose to change. Free shape."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "baseline": {
          "description": "The state you observed before proposing. Required."
        },
        "revert_plan": {
          "description": "How to put it back. Required."
        },
        "fix_identity": {
          "type": "string",
          "description": "Stable identity for this fix. Re-proposing the same identity supersedes the queued card."
        }
      },
      "additionalProperties": false
    }
    arguments 37 lines
  • cvl_error_fix_shipped auth-required never probed

    Tell Convertlyft that the fix for one error is live on the site. Call it only once the change is deployed — not when it is written or merged. It starts the clock on "stayed fixed": once the affected pages have had enough page loads that the old rate would have produced at least 3 of these errors and none came, the error reads as stayed fixed. The earliest report wins; reporting again changes nothing. An error that is set aside, or merged into another, is refused — the refusal names the error to report instead. It records a date; it changes nothing on the site.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "ref": {
          "type": "string",
          "description": "The short ref every brief prints, like CVL-Ea1b2c3d4. Send this or fingerprint."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "fingerprint": {
          "type": "string",
          "description": "The issue fingerprint, exactly as cvl_issues_list gave it. Send this or ref."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • cvl_crawl_start auth-required never probed

    Start a crawl of any public website with the Convertlyft crawler and get a crawl_id straight away; the crawl runs for a few minutes. It uses the account’s credits: 1 per crawled page, charged when the crawl ends and never more than limit; the answer gives max_credits, the balance and the balance after the most it can cost. It obeys the site’s robots.txt, skips sign-in endpoints (/api/auth/*), never fetches private or internal addresses, and runs no AI on the pages. Limits per workspace: one crawl running at a time (an SEO-tab crawl counts), 500 pages per crawl. Past a limit the answer says which and when to retry. mode "links" returns just the map of URLs, never page text; "full" also returns each page’s text. Follow it with cvl_crawl_status, then read pages with cvl_crawl_page. To audit THIS workspace’s own site for the SEO tab, use cvl_run_crawl instead.

    mcp-tool

    {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "Where to start, like https://example.com. http or https only."
        },
        "mode": {
          "enum": [
            "full",
            "links"
          ],
          "type": "string",
          "description": "\"full\" (default) keeps each page’s text; \"links\" is the URL map only."
        },
        "depth": {
          "type": "integer",
          "description": "How many links deep from the start page. Optional; 0 is the start page only."
        },
        "limit": {
          "type": "integer",
          "description": "Most pages to fetch. Defaults to 100; the ceiling is 500."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "render": {
          "enum": [
            "auto",
            "always",
            "never"
          ],
          "type": "string",
          "description": "Load pages in a browser: \"auto\" (default) where the crawler sees a page needs it, \"always\", or \"never\"."
        },
        "webhook": {
          "type": "string",
          "description": "Optional https URL we POST to once when the crawl finishes, signed with the webhook_secret this call returns."
        }
      },
      "additionalProperties": false
    }
    arguments 49 lines
  • cvl_seo_untrack_keywords auth-required never probed

    Remove searches from rank tracking in a market. Idempotent.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keywords"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates; location_code is accepted too). Omit for the primary market."
        },
        "keywords": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 120
          },
          "maxItems": 200,
          "description": "One or more searches, at most 200, each at most 120 characters."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Older name for market, still accepted."
        }
      },
      "additionalProperties": false
    }
    arguments 35 lines
  • cvl_seo_opportunity_track auth-required never probed

    Act on an opportunity by tracking its search. Idempotent.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keyword"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates; location_code is accepted too). Omit for the primary market."
        },
        "keyword": {
          "type": "string",
          "description": "The search, as typed."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Older name for market, still accepted."
        }
      },
      "additionalProperties": false
    }
    arguments 30 lines
  • cvl_seo_add_keywords auth-required never probed

    Add searches to the keyword list, optionally for one page. Idempotent.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keywords"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates; location_code is accepted too). Omit for the primary market."
        },
        "pageUrl": {
          "type": "string",
          "description": "Older name for page_url, still accepted."
        },
        "keywords": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 120
          },
          "maxItems": 200,
          "description": "One or more searches, at most 200, each at most 120 characters."
        },
        "page_url": {
          "type": "string",
          "description": "Full address of the page. (pageUrl is accepted too.)"
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Older name for market, still accepted."
        }
      },
      "additionalProperties": false
    }
    arguments 43 lines
  • cvl_public_seo_scan auth-required never probed

    Scan a public website for SEO problems with the Convertlyft crawler: up to 16 pages, robots.txt obeyed, no JavaScript run, nothing changed on the site. Waits up to about 45 seconds and returns the crawler's own summary: the score out of 100 with its four parts, how many critical issues, warnings and notes, the top 3 issues with up to 3 example pages each, the first fix, what this scan did not check, what AI agents could reach, and report_url — the full result on convertlyft.com/seo-audit. If the scan is still running at 45 seconds it returns {status: "running", scan_id}; call cvl_public_seo_scan_result with that scan_id. A scan_id stays readable for at least 24 hours (a finished scan of the same site is reused for 24 hours); the crawler may delete scans older than 30 days. No account needed. Without one, the limits per address are 20 calls a minute and 200 a day, and 10,000 calls a day across everyone without an account (past one, HTTP 429 naming it, with Retry-After); and 5 new scans a day per address, or per workspace when signed in (a reused scan does not count). Past the scan limit the answer is an error naming it, with retry_after_seconds.

    mcp-tool

    {
      "type": "object",
      "required": [
        "url"
      ],
      "properties": {
        "url": {
          "type": "string",
          "maxLength": 2048,
          "description": "The site to scan, like https://example.com or example.com. The scan starts at the home page."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
  • cvl_seo_serp auth-required never probed

    The live first page of Google results for one search in one country: position, address, domain and title of each organic result, the "People also ask" questions, and every other block the page held — ads, AI overview, map pack, video and the rest — as features, typed by the provider. Ads and other blocks take places, so the first page can hold fewer than 10 organic results; organic_note says so. Each answer bought uses the account’s credits, inside this site’s daily limit, with no per-call confirmation. The answer is stored, so asking the same question again uses no credits (refresh: true buys again). cvl_usage shows what was used. Estimated at most 30 credits per answer bought; the charge is the provider’s actual cost. dry_run: true gives the estimate and today’s limit left without buying; confirm_cost caps it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keyword"
      ],
      "properties": {
        "device": {
          "enum": [
            "desktop",
            "mobile"
          ],
          "type": "string",
          "description": "Default: the device this site’s rank tracking uses, else desktop. The answer’s question.device says which."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "keyword": {
          "type": "string",
          "maxLength": 120,
          "description": "One search, as typed."
        },
        "refresh": {
          "type": "boolean",
          "description": "Buy a fresh answer instead of reading the stored one. Default false: the same question asked again is read back without using credits."
        },
        "confirm_cost": {
          "type": "integer",
          "minimum": 0,
          "description": "Run only if the estimate is at most this many credits; otherwise refuse and buy nothing."
        },
        "language_code": {
          "type": "string",
          "maxLength": 3,
          "description": "Language, like en. Omit for the market’s own."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Country as a location code (e.g. 2784 for the United Arab Emirates). Omit for this site’s primary market, or the United States (2840) when none is set."
        }
      },
      "additionalProperties": false
    }
    arguments 52 lines
  • cvl_seo_keyword_ideas auth-required never probed

    Searches around one seed: ideas in the same topic (mode ideas, the default), searches that contain the seed (suggestions), or what Google lists beside it (related) — each with monthly volume, difficulty, cost per click and intent as the provider estimates them. Each answer bought uses the account’s credits, inside this site’s daily limit, with no per-call confirmation. The answer is stored, so asking the same question again uses no credits (refresh: true buys again). cvl_usage shows what was used. Estimated at most 54 credits per answer bought at the default limit; the charge is the provider’s actual cost. dry_run: true gives the estimate and today’s limit left without buying; confirm_cost caps it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keyword"
      ],
      "properties": {
        "mode": {
          "enum": [
            "ideas",
            "suggestions",
            "related"
          ],
          "type": "string"
        },
        "limit": {
          "type": "integer",
          "maximum": 200,
          "minimum": 1,
          "description": "Rows at most. Default 50."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "keyword": {
          "type": "string",
          "maxLength": 120,
          "description": "One search, as typed."
        },
        "refresh": {
          "type": "boolean",
          "description": "Buy a fresh answer instead of reading the stored one. Default false: the same question asked again is read back without using credits."
        },
        "confirm_cost": {
          "type": "integer",
          "minimum": 0,
          "description": "Run only if the estimate is at most this many credits; otherwise refuse and buy nothing."
        },
        "language_code": {
          "type": "string",
          "maxLength": 3,
          "description": "Language, like en. Omit for the market’s own."
        },
        "location_code": {
          "type": "integer",
          "minimum": 1,
          "description": "Country as a location code (e.g. 2784 for the United Arab Emirates). Omit for this site’s primary market, or the United States (2840) when none is set."
        }
      },
      "additionalProperties": false
    }
    arguments 58 lines
  • cvl_seo_ai_mentions auth-required never probed

    Whether AI assistants name a site: answers from the provider’s tracked panel of prompts, each with the platform, the question, whether the site was mentioned and an excerpt. A sample of tracked answers, not every answer an assistant gives. Each answer bought uses the account’s credits, inside this site’s daily limit, with no per-call confirmation. The answer is stored, so asking the same question again uses no credits (refresh: true buys again). cvl_usage shows what was used. Estimated at most 375 credits per answer bought at the default limit; the charge is the provider’s actual cost. dry_run: true gives the estimate and today’s limit left without buying; confirm_cost caps it.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "Answers at most. Default 25."
        },
        "domain": {
          "type": "string",
          "maxLength": 253,
          "description": "A site’s bare hostname, like example.com. Any site, not only this workspace’s."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "dry_run": {
          "type": "boolean",
          "description": "true: buy nothing; answer the estimated credits (at most) and what is left of today’s limit."
        },
        "refresh": {
          "type": "boolean",
          "description": "Buy a fresh answer instead of reading the stored one. Default false: the same question asked again is read back without using credits."
        },
        "confirm_cost": {
          "type": "integer",
          "minimum": 0,
          "description": "Run only if the estimate is at most this many credits; otherwise refuse and buy nothing."
        }
      },
      "additionalProperties": false
    }
    arguments 40 lines
  • cvl_public_agent_readiness unknown 11h ago

    What the scan found about AI agents on a public site: its agent-readiness level (L0 unreachable to L4 agent-native) with what holds it there, each AI crawler or assistant robots.txt lets in or not and what our request in its name got, whether llms.txt exists, and report_url — the full view on convertlyft.com/agent-readiness. Reads the same crawl as cvl_public_seo_scan, never a second one: pass the scan_id you already have, or a url (which starts or reuses that scan). Waits up to about 45 seconds. No account needed. Without one, the limits per address are 20 calls a minute and 200 a day, and 10,000 calls a day across everyone without an account (past one, HTTP 429 naming it, with Retry-After); and 5 new scans a day per address, or per workspace when signed in (a reused scan does not count). Past the scan limit the answer is an error naming it, with retry_after_seconds.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "maxLength": 2048,
          "description": "The site, like https://example.com. Send this or scan_id."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Top-level keys to keep, e.g. [\"kpis\"] — envelope keys, not metric names. See the server instructions."
        },
        "scan_id": {
          "type": "string",
          "maxLength": 80,
          "description": "A scan_id from cvl_public_seo_scan. Send this or url."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id e12d7876b8e7360c.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/e12d7876b8e7360c/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/e12d7876b8e7360c/badge.svg)](https://brick.blue/agent/e12d7876b8e7360c?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.