_ registry / mcp streamable-http · checked 1h 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 1h 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?
37 tools: cvl_public_seo_scan, cvl_behavior_report, cvl_change_preview, cvl_kpi, cvl_explain, cvl_check_claim, cvl_crawl_start, cvl_search_tools, ….
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
159ms

last good check

priced tools
0

of 37 tools

_ answered our checks, 90 days 1 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 37 tools
37 auth-required 37 of 37 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_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; with or without one, 5 new scans a day per address (a reused scan does not count). Past a limit the answer is HTTP 429 naming the limit, with Retry-After.

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        }
      }
    }
    arguments 20 lines
  • cvl_behavior_report auth-required 1h ago

    Friction for a window: the pages people spend time on and scroll through, the rage clicks and dead clicks classified from the click rows the tag already stores, and the form start-vs-submit funnel. Every collection is always present — an empty list means nobody did it, never that this tool does not report it. counts says which of them were capped and how many there really were. A form nobody started has completion_rate null, never 0%.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "to": {
          "type": "string",
          "format": "date-time",
          "description": "End of the window, same full-timestamp shape. Omit for now. ISO 8601 with a zone; a plain YYYY-MM-DD is accepted."
        },
        "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. ISO 8601 with a zone; a plain YYYY-MM-DD is accepted."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "window_handle": {
          "type": "string",
          "description": "A handle from an earlier report, to ask about the identical window."
        }
      }
    }
    arguments 26 lines
  • cvl_change_preview auth-required 1h 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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "note": {
          "type": "string",
          "description": "What you changed, in your own words. Optional."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "marked_at": {
          "type": "string",
          "description": "When the change went live, ISO 8601. Defaults to now. May not be in the future."
        }
      }
    }
    arguments 20 lines
  • cvl_kpi auth-required never probed

    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. ISO 8601 with a zone; a plain YYYY-MM-DD is accepted."
        },
        "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. ISO 8601 with a zone; a plain YYYY-MM-DD is accepted."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "source": {
          "type": "string",
          "description": "Restrict to one traffic source, e.g. google."
        },
        "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."
        }
      }
    }
    arguments 34 lines
  • cvl_explain auth-required 1h 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. ISO 8601 with a zone; a plain YYYY-MM-DD is accepted."
        },
        "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. ISO 8601 with a zone; a plain YYYY-MM-DD is accepted."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "figure": {
          "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 traffic source, e.g. google."
        },
        "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."
        }
      }
    }
    arguments 38 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. 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        }
      }
    }
    arguments 27 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. It obeys the site’s robots.txt, 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; pages that fail (4xx, 5xx, timeouts) do not count against the 500. Past a limit the answer says which and when to retry. mode "links" returns just the map of URLs; "full" also keeps 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": "number",
          "description": "How many links deep from the start page. Optional; 0 is the start page only."
        },
        "limit": {
          "type": "number",
          "description": "Most pages to fetch. Defaults to 100; the ceiling is 500."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        }
      }
    }
    arguments 48 lines
  • cvl_search_tools auth-required never probed

    Find a Convertlyft tool that is not in your tool list and get its full input schema. Your list holds a core set; behaviour, SEO, errors, site and workspace reads are here. 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        }
      }
    }
    arguments 25 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "fingerprint": {
          "type": "string",
          "description": "The issue fingerprint, exactly as cvl_issues_list gave it. Send this or ref."
        }
      }
    }
    arguments 20 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. 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        }
      }
    }
    arguments 12 lines
  • cvl_change_apply auth-required never probed

    Record that the site changed, so the impact can be measured against it. 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"
      ],
      "properties": {
        "note": {
          "type": "string",
          "description": "What you changed, in your own words. Optional."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "marked_at": {
          "type": "string",
          "description": "When the change went live, ISO 8601. Defaults to now. May not be in the future."
        },
        "idempotency_key": {
          "type": "string",
          "description": "Your own key for this change. Reuse it to retry safely; use a new one for a new change."
        }
      }
    }
    arguments 27 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "proposal_id": {
          "type": "string",
          "description": "The proposal_id cvl_change_apply returned."
        }
      }
    }
    arguments 19 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": {
        "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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "statement": {
          "type": "string",
          "description": "One sentence, in the words a person would read."
        },
        "window_to": {
          "type": "string",
          "description": "ISO 8601 end. Required for a finding."
        },
        "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": "ISO 8601 start of the window the finding covers. Omit for all time."
        }
      }
    }
    arguments 42 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        }
      }
    }
    arguments 36 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "run_type": {
          "type": "string",
          "description": "Which run to queue. Lowercase, letters/digits/underscore. Defaults to seo_daily."
        }
      }
    }
    arguments 16 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. 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "max_pages": {
          "type": "number",
          "description": "How many pages to crawl at most. Defaults to 100; the ceiling is 500."
        }
      }
    }
    arguments 16 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates). 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."
        }
      }
    }
    arguments 29 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates). 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."
        }
      }
    }
    arguments 29 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates). Omit for the primary market."
        }
      }
    }
    arguments 32 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates). Omit for the primary market."
        },
        "keyword": {
          "type": "string",
          "description": "The search, as typed."
        }
      }
    }
    arguments 24 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates). Omit for the primary market."
        },
        "keyword": {
          "type": "string",
          "description": "The search, as typed."
        }
      }
    }
    arguments 28 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",
        "pageUrl"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates). Omit for the primary market."
        },
        "keyword": {
          "type": "string",
          "description": "The search, as typed."
        },
        "pageUrl": {
          "type": "string",
          "description": "Full address of the page."
        }
      }
    }
    arguments 29 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates). Omit for the primary market."
        },
        "pageUrl": {
          "type": "string"
        },
        "keywords": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 120
          },
          "maxItems": 200,
          "description": "One or more searches, at most 200, each at most 120 characters."
        }
      }
    }
    arguments 32 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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "fromStep": {
          "enum": [
            "crawl",
            "enrich",
            "competitors",
            "opportunities",
            "briefs"
          ],
          "type": "string"
        }
      }
    }
    arguments 22 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.

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "market": {
          "type": "integer",
          "minimum": 1,
          "description": "Market as a location code (e.g. 2784 for the United Arab Emirates). Omit for the primary market."
        },
        "keyword": {
          "type": "string",
          "description": "The search, as typed."
        }
      }
    }
    arguments 28 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "scan_id": {
          "type": "string",
          "maxLength": 80,
          "description": "The scan_id cvl_public_seo_scan returned."
        }
      }
    }
    arguments 20 lines
  • cvl_public_agent_readiness auth-required never probed

    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; with or without one, 5 new scans a day per address (a reused scan does not count). Past a limit the answer is HTTP 429 naming the limit, with Retry-After.

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "scan_id": {
          "type": "string",
          "maxLength": 80,
          "description": "A scan_id from cvl_public_seo_scan. Send this or url."
        }
      }
    }
    arguments 22 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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        }
      }
    }
    arguments 20 lines
  • cvl_seo_serp auth-required never probed

    The live top 10 Google results for one search in one country: position, address and domain of each organic result, plus the "People also ask" questions. 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keyword"
      ],
      "properties": {
        "device": {
          "enum": [
            "desktop",
            "mobile"
          ],
          "type": "string",
          "description": "Default desktop."
        },
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        },
        "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."
        }
      }
    }
    arguments 42 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.

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        },
        "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."
        }
      }
    }
    arguments 48 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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keywords"
      ],
      "properties": {
        "fields": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        },
        "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."
        }
      }
    }
    arguments 38 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.

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        },
        "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."
        }
      }
    }
    arguments 34 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.

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        },
        "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."
        }
      }
    }
    arguments 46 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.

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        }
      }
    }
    arguments 24 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.

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        }
      }
    }
    arguments 40 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.

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "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."
        }
      }
    }
    arguments 30 lines
  • cvl_call_read auth-required never probed

    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": "The result’s own top-level keys, to leave the rest out — this is how a nine-call chain stays inside a context window. These are ENVELOPE keys, not metric names: on cvl_kpi the figures live inside `kpis`, so `fields:[\"revenue\"]` is refused and `fields:[\"kpis\"]` is not. If you do not already know this result’s keys, omit the argument on the first call and read them off the answer. An unknown name is refused, and the refusal lists every key the result carries."
        },
        "arguments": {
          "type": "object",
          "description": "Its arguments, as its inputSchema describes them. `fields` works here too."
        }
      }
    }
    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.