Google Search Console integration for Model Context Protocol (MCP)
Epovest is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
With Epovest, businesses make AIs recommend them.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http epovest-mcp https://mcp.epovest.com/mcp
# 2 — ask your agent for something these tools do
# list_trackers, create_tracker, update_tracker and 64 more
Epovest costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http epovest-mcp https://mcp.epovest.com/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
67 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
List the trackers of the account, current versions: configuration, status, keywords, analysts, project and the recalculated cost per survey. Start here to find a tracker id. Filter by project with project_id. The ones still followed come first, then the ones filed away (archive_tracker), each with archived true and its archived_at.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | no | Only the trackers of this project: the UUID of a project of the account (call list_projects), or "default" for the trackers without a project. Omitted, every tracker is listed. |
Create a tracker in draft. It measures nothing yet: call start_tracker to launch it against the prepaid credit balance. Validation rules and messages are the same as the app configurator. Omitted, next_survey_at means the first survey runs at start_tracker. For a single reading with nothing running afterwards, set frequency to on_demand: start_tracker runs one survey, and the next ones come from s
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | Display name of the tracker. |
| prompts | array | yes | The questions asked to the AI engines at every survey, phrased exactly as a customer would ask them. |
| engines | array | yes | The AI engines surveyed. A check is priced per engine, in USD: chatgpt 0.10, claude 0.20, gemini 0.10, perplexity 0.10, mistral 0.10, grok 0.20. Claude and Grok read more sources per answer, and their |
| frequency | string | yes | How often a survey runs. on_demand puts the tracker on no schedule at all: starting it runs one survey, and every survey after that is one you ask for with survey_now. Pick it for a one-off reading, o |
| resolution | string | yes | Repetitions of every question per engine and survey: hd=1, full_hd=3, 4k=6, 8k=9. Answers are stochastic; more repetitions sharpen the rates. |
| keywords | array | no | Names to detect in the answers: your brand and the names you compare against. Flag yours as favorite. |
| analysts | array | no | The lenses that score every survey. keyword_presence and share_of_voice are deterministic; sentiment and custom_prompt are AI analysts billed per analyzed response. |
| custom_prompt | string | no | The instruction of the custom_prompt analyst. Required when that analyst is selected. |
| discovery | boolean | no | Suggest new keywords spotted in the answers. |
| notify_on_survey | boolean | no | Email the account owner and managers each time a survey closes with fresh data, so the results reach them on their own. On by default; send false to keep this tracker silent. |
| next_survey_at | string | no | When the next survey runs, ISO 8601, strictly in the future; read as UTC without an offset. Later surveys keep that day and time at the pace of the frequency. On a PAUSED tracker it is kept and read b |
| project_id | string | no | The project the tracker is filed under: the UUID of a project of the account (call list_projects), or "default" for none. Pure organization, editable at any time. Omitted on creation the tracker files |
Update the configuration of a tracker: only the fields you send change. Keywords, analysts and the title apply in place. Changing the prompts, engines, frequency or resolution of a version that HAS measured creates a new version: the score series continues across versions, and the response carries the new tracker id (version_created says when). A version that has not measured yet is amended in pla
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
| title | string | no | Display name of the tracker. |
| prompts | array | no | The questions asked to the AI engines at every survey, phrased exactly as a customer would ask them. |
| engines | array | no | The AI engines surveyed. A check is priced per engine, in USD: chatgpt 0.10, claude 0.20, gemini 0.10, perplexity 0.10, mistral 0.10, grok 0.20. Claude and Grok read more sources per answer, and their |
| frequency | string | no | How often a survey runs. on_demand puts the tracker on no schedule at all: starting it runs one survey, and every survey after that is one you ask for with survey_now. Pick it for a one-off reading, o |
| resolution | string | no | Repetitions of every question per engine and survey: hd=1, full_hd=3, 4k=6, 8k=9. Answers are stochastic; more repetitions sharpen the rates. |
| keywords | array | no | Names to detect in the answers: your brand and the names you compare against. Flag yours as favorite. |
| analysts | array | no | The lenses that score every survey. keyword_presence and share_of_voice are deterministic; sentiment and custom_prompt are AI analysts billed per analyzed response. |
| custom_prompt | string | no | The instruction of the custom_prompt analyst. Required when that analyst is selected. |
| discovery | boolean | no | Suggest new keywords spotted in the answers. |
| notify_on_survey | boolean | no | Email the account owner and managers each time a survey closes with fresh data, so the results reach them on their own. On by default; send false to keep this tracker silent. |
| next_survey_at | string | no | When the next survey runs, ISO 8601, strictly in the future; read as UTC without an offset. Later surveys keep that day and time at the pace of the frequency. On a PAUSED tracker it is kept and read b |
| project_id | string | no | The project the tracker is filed under: the UUID of a project of the account (call list_projects), or "default" for none. Pure organization, editable at any time. Omitted on creation the tracker files |
Start or restart the measurement of a tracker against the prepaid credit balance. The first survey runs there and then, whatever the frequency, unless the tracker carries a next_survey_at still in the future: with one set, nothing runs until that moment, which is how a tracker comes back on a date of the person's choosing. Restarting a paused tracker picks its schedule back up, at whatever configu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
Run one survey of a measuring tracker right now, on top of its schedule. Its settings stay as they are: same anchor, same frequency, and the next scheduled survey keeps its date. On a tracker whose frequency is on_demand, this is how every survey after the first one happens. It debits the prepaid credit balance like any survey, and the point joins the score series marked on_demand. The answer carr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
Pause the measurement of an active tracker. The score series is kept; start_tracker resumes it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
File a finished tracker away: a campaign that ended, a brand that was sold, a trial that is over. It moves to the end of list_trackers with archived true, stops asking for anything, and its measurement pauses in the same call if it was still running, so the spending stops there. Bring it back with archived false: the tracker returns to the list as it was, and start_tracker restarts the measurement
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
| archived | boolean | no | true files the tracker away and pauses its measurement, false brings it back. Omitted, it files it away. |
The projects of the account: the folders trackers are filed under (one project per tracker at most; pure organization, no effect on measurement or billing). Each carries its id, name, brand canon with its current version number (canon_version), archived flag and tracker count. The folders still in use come first, then the ones filed away (archive_project). Trackers without a project live under the
No parameter schema on file.
Create a project to file trackers under: one project per BRAND, never per language. It can carry the brand canon: the reference wording every publication reuses as is, written in ONE language, its canonical language (carried at creation, it is recorded as canon version 1). The canon is never translated: localized expressions on the pages are outputs, not a second canon. Nothing is filed by this ca
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Name of the project, as the user calls it (a client, a brand, a website...). |
| canon_one_liner | string | no | One-sentence signature of the brand. |
| canon_short | string | no | THE one-sentence description third-party pages reuse as is. |
| canon_long | string | no | The two-sentence version, when the surface allows it. |
| canon_category | string | no | Category label for listings and structured data. |
| canon_language | string | no | Short code of the ONE language the canon is written in, like "en" or "pt-br". The canonical language settles every language call (the llms.txt of a multilingual site is written in it). It travels WITH |
| canon_perks | array | no | The distinctive claims of the brand, in the order they should be hammered, written in the canonical language. Facts that hold and can be corroborated ("works without a subscription"), never superlativ |
| canon_website | string | no | The canonical address of the brand website, the one that identifies the entity. A bare domain is enough ("example.com" completes to "https://example.com"). ONE URL only: the other addresses of the bra |
| canon_legal_name | string | no | Registered name of the company that operates the brand, with its jurisdiction when the user states it ("Acme Holdings, LLC, Delaware, United States"). Language-neutral, like the other facts: the AIs c |
| canon_address | string | no | Postal address, as written on a listing. Language-neutral: the same string everywhere, like the other facts. |
| canon_phone | string | no | Phone number, international prefix included. |
| canon_whatsapp | string | no | WhatsApp number, international prefix included. |
| canon_email | string | no | Public email address of the brand. |
Correct the name of a project: the folder keeps its id, its canon, its trackers, its surfaces and its logbook, and the name shown is the only thing that changes. Names are unique per account: a name another project already goes by answers project_exists with that project, so read it back and settle another name with the user. Case, accents and spacing do not make two different names, which is why
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| name | string | yes | The name the project takes, as the user calls it (a client, a brand, a website...). |
The brand canon of a project and every revision it went through. canon is the CURRENT wording, under the same keys update_project_canon writes (one_liner, short, long, category, language, perks, website, legal_name, address, phone, whatsapp, email), and canon_version its number. history carries each version newest first, with its author, its date, and changes, the fields that version touched with
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
Revise the brand canon of a project. Field by field: a provided field replaces the current wording (an empty string clears it), an omitted field is kept as is. Any actual change records the NEXT canon version (numbered, immutable; version_created true in the answer); sending identical wording records nothing. The canon lives in ONE language, its canonical language (canon_language): it is never tra
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| canon_one_liner | string | no | One-sentence signature of the brand. |
| canon_short | string | no | THE one-sentence description third-party pages reuse as is. |
| canon_long | string | no | The two-sentence version, when the surface allows it. |
| canon_category | string | no | Category label for listings and structured data. |
| canon_language | string | no | Short code of the ONE language the canon is written in, like "en" or "pt-br". On a project whose canon is not posted yet, send it with at least one wording: the canon is the wording, and the language |
| canon_perks | array | no | The distinctive claims of the brand, in the order they should be hammered, written in the canonical language. Facts that hold and can be corroborated ("works without a subscription"), never superlativ |
| canon_website | string | no | The canonical address of the brand website, the one that identifies the entity. A bare domain is enough ("example.com" completes to "https://example.com"). ONE URL only: the other addresses of the bra |
| canon_legal_name | string | no | Registered name of the company that operates the brand, with its jurisdiction when the user states it ("Acme Holdings, LLC, Delaware, United States"). Language-neutral, like the other facts: the AIs c |
| canon_address | string | no | Postal address, as written on a listing. Language-neutral: the same string everywhere, like the other facts. |
| canon_phone | string | no | Phone number, international prefix included. |
| canon_whatsapp | string | no | WhatsApp number, international prefix included. |
| canon_email | string | no | Public email address of the brand. |
The addresses of the brand that a watched page can link to. Two lists come back. derived: what is already covered without anyone typing it, each row with its source, "canon" (the canonical website of the brand) or "surface" (a page of the surface registry: the site, the LinkedIn or X profile, a directory listing, an app store page). free: the addresses set on the project on top of those. Read it b
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
Set the addresses of the brand that are neither its canonical website nor a page of the surface registry: a satellite domain the customer does not want to keep aligned, a tracking link, a partner page. They are set ONCE for the project and serve every line of the corroboration registry, present and future, so there is nothing to set line by line. The list you send REPLACES the previous one, and th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| link_targets | array | yes | The FULL list of the free addresses, as absolute http(s) URLs. It replaces the previous one. |
File a project away once the folder has served its purpose: a client that left, a brand that was sold. It moves to the end of list_projects with archived true, and stops being offered when filing a tracker. Bring it back with archived false. Nothing is deleted and nothing cascades: the trackers filed under it keep their status, keep measuring and keep showing up in list_trackers, and the answer ca
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| archived | boolean | no | true files the project away, false brings it back. Omitted, it files it away. |
The surface registry of a project: the pages about the brand where the customer has the FINAL SAY (website, GitHub, LinkedIn, X, YouTube, Wikidata, directories, app stores...). The split with corroborations is control, never who wrote the page: a page the customer can change is a surface, a page where someone else has the final say is a corroboration (list_corroborations). Each surface carries its
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| deleted | string | no | Set to "only" for the surfaces taken out of the registry (delete_surface), most recently taken out first, each with its deleted_at. Omitted, the registry is listed. |
| sort | string | no | Order of the registry. "registry", the default, is the order of the binder, by shown name, the one where a known line is found again. "authority" orders by the measured authority of the DOMAIN of each |
Register a surface of a project: one page about the brand where the customer has the final say (their site, their profiles, their listings, wherever they can change the content). The test that settles which registry a page belongs to: if the customer changes the page, does the change stay? Yes means they have the final say, so it is a surface; no means someone else has it, so it is a corroboration
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| type | string | no | What kind of surface this is; it picks the checklist to come. OMIT IT on creation: the type is derived from the url by the catalogue of places (github.com is GitHub, an unknown host is the brand websi |
| url | string | yes | Absolute http(s) address of the surface. |
| label | string | no | Display name of the surface. OMIT IT on creation: it is derived from the url (the handle on a known place, the host and path on a website). |
| languages | array | no | Languages of the surface, as short codes like "en" or "pt-br". A sent list replaces the previous one. |
| notes | string | no | Free registry notes: who owns the account, access, context. |
Update the registry sheet of a surface: only the fields you send change (a sent languages list replaces the previous one; an empty label or notes clears it). No journal line is ever written here: an alignment is earned with tick_surface_checklist, cell by cell. Languages ARE the columns of the checklist, so declaring the language of a single-language page renames its column and carries its verifie
| Parameter | Type | Required | Notes |
|---|---|---|---|
| surface_id | string | yes | The UUID of the surface: call list_surfaces to find it. |
| type | string | no | What kind of surface this is; it picks the checklist to come. OMIT IT on creation: the type is derived from the url by the catalogue of places (github.com is GitHub, an unknown host is the brand websi |
| url | string | no | Absolute http(s) address of the surface. |
| label | string | no | Display name of the surface. OMIT IT on creation: it is derived from the url (the handle on a known place, the host and path on a website). |
| languages | array | no | Languages of the surface, as short codes like "en" or "pt-br". A sent list replaces the previous one. |
| notes | string | no | Free registry notes: who owns the account, access, context. |
Record what a surface actually carries, cell by cell, as many moves as you want in one call. The items are listed by list_surfaces as checklist.items: the template of the surface type (stable keys such as title_tag or llms_txt), then the checks the customer added of their own (add_surface_check), which tick here exactly like the rest, at their key. Most of them are yours to check (a title tag, JSO
| Parameter | Type | Required | Notes |
|---|---|---|---|
| surface_id | string | yes | The UUID of the surface: call list_surfaces to find it. |
| ticks | array | yes | The cell moves. Nothing else on the checklist changes. |
Add a check of your own to the checklist of one surface: a requirement the person holds on THAT page, in their words. It becomes REQUIRED for the page to count as aligned, exactly like the canon items of the template, and it is ticked with tick_surface_checklist at the key returned here. Reach for it whenever the person states something a page must carry that is theirs to decide: the pricing block
| Parameter | Type | Required | Notes |
|---|---|---|---|
| surface_id | string | yes | The UUID of the surface: call list_surfaces to find it. |
| label | string | yes | What the check says, as the person would read it on their checklist: one line, up to 120 characters ("The FAQ block quotes the canon boilerplate"). |
| restates_canon | boolean | no | true when the check restates the WORDING of the canon, so its verification perishes when the wording moves. false by default, for a check that constates something else. |
| scope | string | no | How many cells the check gets: "language" by default, one per language of the surface; "site" for what exists once for the whole site whatever the number of languages. |
Correct a check of your own on a surface: its label, and whether it restates the canon. Only what you send changes. The key never moves, being the coordinate of the cells already recorded, so renaming a check keeps every tick it carries. Turning restates_canon on makes a tick recorded without a canon stamp perish, which is the honest reading: the page was never checked against a wording.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| surface_id | string | yes | The UUID of the surface: call list_surfaces to find it. |
| check | string | yes | The key of the check of your own, exactly as listed by list_surfaces in checklist.custom (add_surface_check returns it too). |
| label | string | no | The new wording of the check, up to 120 characters. |
| restates_canon | boolean | no | true when the check restates the WORDING of the canon, false when it constates something else. |
Take a check of your own out of the checklist of a surface: it leaves the list, stops holding the page short of aligned and stops accepting ticks. Use it when the requirement no longer applies to that page. Nothing is lost: the check and the cells it carries are kept, read back in checklist.custom with deleted true, and restore_surface_check brings both back, so a check taken out by mistake costs
| Parameter | Type | Required | Notes |
|---|---|---|---|
| surface_id | string | yes | The UUID of the surface: call list_surfaces to find it. |
| check | string | yes | The key of the check of your own, exactly as listed by list_surfaces in checklist.custom (add_surface_check returns it too). |
Bring a check of your own back to the checklist of a surface, with the cells it had: it becomes work again, so the page needs it verified to count as aligned. The checks to bring back are listed by list_surfaces in checklist.custom, with deleted true. Restoring a check already in the checklist answers the same.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| surface_id | string | yes | The UUID of the surface: call list_surfaces to find it. |
| check | string | yes | The key of the check of your own, exactly as listed by list_surfaces in checklist.custom (add_surface_check returns it too). |
Take a surface out of the registry: the page stops being followed, and the registry stops asking to bring it in phase with the canon. Use it for a page that is gone (account closed, listing removed) or for a line that had no place there. The sheet and the alignment journal are kept, and restore_surface brings the surface back with them, so a line taken out by mistake costs nothing. Taking out an a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| surface_id | string | yes | The UUID of the surface: call list_surfaces to find it. |
Bring a surface back to the registry, with its sheet and its alignment journal as they were. Call list_surfaces with deleted set to "only" to find the surfaces to bring back. Restoring a surface already in the registry answers the same.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| surface_id | string | yes | The UUID of the surface: call list_surfaces to find it. |
Move the page to the corroboration registry: someone else has the final say on it (the customer lost, or never had, the hand on the content). Nothing is retyped: url, label and notes travel, the publication date stays unknown (set it with update_corroboration when known). The surface leaves its registry for the trash, alignment journal attached, and the reverse move exists (convert_corroboration_t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| surface_id | string | yes | The UUID of the surface: call list_surfaces to find it. |
The corroborations recorded for a project: the pages about the brand where someone else has the FINAL SAY, each with its exact address, the source it sits on (domain), the publication date when known, and free notes. Live ones first, then the ones taken down (archived true). The twin registry of Surfaces, where the customer has the final say: the split is control, never who wrote the page or who p
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
Record a page about the brand where someone else has the final say. URL-FIRST: the exact address of the page is the only thing needed, the source on the map and the display name are derived from it. It is a statement of fact: only record a page you have actually read, and confirm with the user. A page the customer controls (their own profile, their own listing) belongs to Surfaces instead: use cre
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| url | string | yes | Absolute http(s) address of the EXACT page where the third party talks about the brand, never the home page of the site. |
| label | string | no | Display name of the page. OMIT IT: it is derived from the address (domain and path). Send an empty string to go back to the derived one. |
| published_on | string | no | The day the page was PUBLISHED, as YYYY-MM-DD. Distinct from the recording day, and the one that means something against the citation curves. Omit it when unknown: it is never guessed. |
| notes | string | no | Free notes: the passage that mentions the brand, the contact, how the page came about. |
| request_channel | string | no | Whether someone can be asked to change the page: "available" (a contact or a process exists), "none" (nobody to ask), "unknown" (not filled in, the default). It gates the refresh suggestions of the qu |
Update the sheet of a corroboration: only the fields you send change (an empty label goes back to the derived one, an empty notes or published_on clears it). Correcting the url ALWAYS recomputes the source: the two never drift apart. It also carries monitoring, the cadence at which the page is read again on its own, which is why watching a page needs no tool of its own. To say a page is gone, use
| Parameter | Type | Required | Notes |
|---|---|---|---|
| corroboration_id | string | yes | The UUID of the corroboration: call list_corroborations to find it. |
| url | string | no | Absolute http(s) address of the EXACT page where the third party talks about the brand, never the home page of the site. |
| label | string | no | Display name of the page. OMIT IT: it is derived from the address (domain and path). Send an empty string to go back to the derived one. |
| published_on | string | no | The day the page was PUBLISHED, as YYYY-MM-DD. Distinct from the recording day, and the one that means something against the citation curves. Omit it when unknown: it is never guessed. |
| notes | string | no | Free notes: the passage that mentions the brand, the contact, how the page came about. |
| request_channel | string | no | Whether someone can be asked to change the page: "available" (a contact or a process exists), "none" (nobody to ask), "unknown" (not filled in, the default). It gates the refresh suggestions of the qu |
| monitoring | string | no | How often the page is read again on its own: "off" (the default), "daily", "weekly" or "monthly". Each executed check costs 0.02 USD from the prepaid balance and returns the same two findings as verif |
Record that the page is no longer there (article unpublished, link dead), or put it back live with archived false. Nothing is deleted: the line stays, and so does the history, because "they talked about us from March to July" is information. A page taken down stops counting as a presence on that source. Only take down after actually re-reading the address and finding it gone.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| corroboration_id | string | yes | The UUID of the corroboration: call list_corroborations to find it. |
| archived | boolean | no | true takes the page down, false puts it back live. Omitted, it takes it down. |
Read the page again and report what it says today. One pass returns two findings, dated, and included at no cost. On the MENTION: the passage around the brand is archived on the line (the sentence that names it, one before, one after), and the finding says unchanged, changed (the passage moved, worth re-reading), figures (the passage moved on NUMBERS only, such as a rank or a counter: a fact to re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| corroboration_id | string | yes | The UUID of the corroboration: call list_corroborations to find it. |
Move the page to the surface registry: the customer has, or takes, the final say on it (their own profile or listing recorded on the wrong side, or a source that became a reliable channel). Nothing is retyped: url, label and notes travel, the publication date is copied into the notes, the type derives from the address and the canon (a host that is neither the canon website nor a known place lands
| Parameter | Type | Required | Notes |
|---|---|---|---|
| corroboration_id | string | yes | The UUID of the corroboration: call list_corroborations to find it. |
The MENTIONS a search engine has shown the brand in, found in the text the engine itself returned next to each address. The list is recomputed on every read from the raw payloads of the latest surveys, and surveys_scanned says how many were read. Pages already filed in either registry (corroborations or surfaces) are left out. Each row carries the excerpt as proof, matched_by ("website" means the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
Refuse a suggested page: it is never proposed again for this project. Use it when the excerpt matched something else than the brand, or when the page is not worth recording. Nothing is created or deleted. Accepting is the opposite move and has no tool of its own: call create_corroboration with the url of the candidate, or create_surface when the customer has the final say on it (if they change the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| url | string | yes | The address of the candidate, exactly as list_corroboration_candidates gives it. |
The logbook of a project, newest first: every dated move, composed from two sources. source=tool events are derived from the suite itself (canon moved to a version, surface marked aligned, corroboration recorded); source=manual entries are actions the customer recorded (only these carry an id, a category, a label and notes). Each move also lands as an annotation on the citation curves of the track
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| source | string | no | Only the items of this source: "tool" for suite events, "manual" for recorded entries. Omitted, both. |
| category | string | no | Only the manual entries of this category (tool events carry no category and never match). |
| quest_id | string | no | Only the entries recorded against this quest, newest first: THIS is the dated trail of one quest, read where the logbook is already read. Call list_quests to find the id (each quest carries journal_en |
| deleted | string | no | Set to "only" for the entries taken out of the logbook (delete_logbook_entry), most recently taken out first, each with its deleted_at. It carries recorded entries only, so it goes without source and |
Record an action in the logbook of a project: what was done, and WHEN it was done. occurred_at is the date of the ACTION itself, not of the recording: recording after the fact is the normal case ("record: site translated into Spanish yesterday" means occurred_at is yesterday). The entry joins the tool events in the logbook and lands as an annotation on the citation curves of the trackers of the pr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project: call list_projects to find it. |
| category | string | yes | What kind of action this is; it files the entry for filtering. "other" covers anything else. |
| label | string | yes | Short wording of the action, e.g. "Site translated into Spanish": it is what the annotation shows next to the citation curves. |
| occurred_at | string | no | When the action HAPPENED, ISO 8601 date or datetime, read as UTC without an offset. Distinct from the recording time: when the user says "yesterday" or "last week", compute and pass that date. Omitted |
| notes | string | no | Free notes: context, links, details of the action. |
| quest_id | string | no | The quest of the same project this action moves forward, which is how a quest gets its own dated trail: call list_quests to find it. The entry stays an entry of the logbook of the project, it just say |
Edit a manual logbook entry: only the fields you send change (empty notes clear them). It is the customer's own logbook: a typo or a wrong date is simply corrected. quest_id files an entry under a quest after the fact, and null files it back under the project alone. Tool events cannot be edited: they are derived from the canon and surface registries.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entry_id | string | yes | The UUID of the logbook entry: call get_logbook to find it (only manual entries carry an id). |
| category | string | no | What kind of action this is; it files the entry for filtering. "other" covers anything else. |
| label | string | no | Short wording of the action, e.g. "Site translated into Spanish": it is what the annotation shows next to the citation curves. |
| occurred_at | string | no | When the action HAPPENED, ISO 8601 date or datetime, read as UTC without an offset. Distinct from the recording time: when the user says "yesterday" or "last week", compute and pass that date. Omitted |
| notes | string | no | Free notes: context, links, details of the action. |
| quest_id | string | no | The quest of the same project this action moves forward, which is how a quest gets its own dated trail: call list_quests to find it. The entry stays an entry of the logbook of the project, it just say |
Take a manual logbook entry out of the logbook, and the annotation it placed on the curves with it. Only do it when the user asked for it: it is their logbook. The entry waits in the trash, so restore_logbook_entry brings it back with its annotation. Tool events stay as they are: they are derived from the canon and surface registries.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entry_id | string | yes | The UUID of the logbook entry: call get_logbook to find it (only manual entries carry an id). |
Bring an entry back to the logbook, with the annotation it placed on the curves. Call get_logbook with deleted set to "only" to find the entries to bring back. Restoring an entry already in the logbook answers the same.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entry_id | string | yes | The UUID of the logbook entry: call get_logbook to find it (only manual entries carry an id). |
What there is to do for the GEO work, and where to resume it. Lists the quests of the account: moves the customer (or you, on their behalf) decided and recorded, open by default, newest first; status=done or dismissed reads the closed history, which answers with its quests, each one reopened with reopen_quest. Every project by default; scope to one project with project_id. Alongside the open file,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | no | Only the file of this project: the UUID of a project of the account (call list_projects). Omitted, the file covers every active project. |
| status | string | no | Which quests to list: "open" (the file, default), "done" or "dismissed" (the closed history). |
Add a quest to the file of a project: a next move the customer decided, kept where the work resumes ("get our MCP server listed on the AI tool directories"). title says the move; notes carry context and links. Adding is idempotent on the project and title while the quest is open: calling again returns the quest already in the file instead of a second copy, so a retry is safe. A closed quest with t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project whose file takes the quest: call list_projects to find it. |
| title | string | yes | Short wording of the move, e.g. "Get our MCP server listed on the AI tool directories": it is what the file shows. |
| notes | string | no | Free notes: context, links, what done looks like. |
Edit a quest: only the fields you send change (empty notes clear them). It is the customer's own file: a typo or a sharpened wording is simply corrected. The status changes through its own moves, complete_quest, dismiss_quest and reopen_quest.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| quest_id | string | yes | The UUID of the quest: call list_quests to find it. |
| title | string | no | Short wording of the move, e.g. "Get our MCP server listed on the AI tool directories": it is what the file shows. |
| notes | string | no | Free notes: context, links, what done looks like. |
Mark a quest done: the move happened. Sets the state and the closing date; calling it again leaves it done, so a retry is safe, and a dismissed quest that was done after all becomes done (the last move is what the file remembers). The quest stays readable in the closed history of list_quests, and reopen_quest puts it back in the file.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| quest_id | string | yes | The UUID of the quest: call list_quests to find it. |
Set a quest aside: the customer decided the move is off. Sets the state and the closing date; calling it again leaves it dismissed, so a retry is safe. The quest stays readable in the closed history of list_quests, and reopen_quest puts it back in the file.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| quest_id | string | yes | The UUID of the quest: call list_quests to find it. |
Put a closed quest back in the file: it returns among the open moves with its sheet as it was, the date it was added, its author and its notes, so a quest closed by mistake or taken up again keeps its own history. Clears the closing date; calling it again leaves it open, so a retry is safe. Call list_quests with status done or dismissed to find the quest to reopen.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| quest_id | string | yes | The UUID of the quest: call list_quests to find it. |
The score series of a tracker: one row per analyst, keyword, engine, tracker version and survey period, in chronological order. Depending on the analyst, a row carries citation_rate and weighted_score, share_of_voice, or sentiment counts.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
| analyst | string | no | Only the rows of this analyst. The custom_prompt analyst yields a text note per response, so the score series is built from the three scored lenses listed here. |
| engine | string | no | Only the rows of this engine. |
The raw answers of ONE AI engine for a tracker, newest surveys first, paginated. Every answer carries its cited sources and keyword mentions, plus uncited_sources (the pages the engine read without citing them) and searched (whether the engine went to the web to write that answer; null when undetermined). Set include_raw to add the full engine payload; heavy, ask for it only when needed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
| engine | string | yes | The engine whose answers are read. |
| page | integer | no | Page number, 1 by default. |
| per_page | integer | no | Answers per page, 25 by default, 100 at most. |
| q | string | no | Full-text filter on the answer text. |
| question | string | no | Exact text of one tracked question. |
| survey | string | no | Only the answers of this survey. |
| tone | string | no | Only the answers where the sentiment analyst judged a keyword mention with this tone. Reads the negative answers of a week in one call, when the tracker carries the sentiment analyst that sets the ton |
| include_raw | boolean | no | Add the full engine payload to every answer. |
The keyword suggestions DISCOVERED on a tracker: domains the surveyed engines cite as sources again and again, that no tracked keyword covers. Recomputed on every read, from the recurrences the surveys have accumulated. Also carries dismissed, the domains this tracker has set aside: what was refused stays readable, so you can restore one with restore_keyword_discovery if the user changes their min
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
Accept one discovered suggestion (domain) or a batch (domains): each becomes a tracked keyword of the tracker, in place, and its series starts at the next survey. Refused with keyword_cap_reached when the batch would exceed the keyword cap, and with not_found when a domain is not currently suggested (the batch is all-or-nothing, nothing is added then). The answer carries keyword for a single domai
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
| domain | string | no | One domain to act on, exactly as listed by list_keyword_discoveries. Send this OR domains, never both. |
| domains | array | no | Several domains to act on in one call, each exactly as listed by list_keyword_discoveries. Send this OR domain, never both. ALL-OR-NOTHING: one invalid domain refuses the whole batch, so you never hav |
Dismiss one discovered suggestion (domain) or a batch (domains): the domains are never proposed again on this tracker, and appear in the dismissed list until restored. All-or-nothing on unknown domains: one that is not currently suggested refuses the whole batch (not_found). Dismissing an already dismissed domain is fine, it does not fail the batch. The answer carries dismissed as the domain for a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
| domain | string | no | One domain to act on, exactly as listed by list_keyword_discoveries. Send this OR domains, never both. |
| domains | array | no | Several domains to act on in one call, each exactly as listed by list_keyword_discoveries. Send this OR domain, never both. ALL-OR-NOTHING: one invalid domain refuses the whole batch, so you never hav |
Restore one dismissed domain (domain) or a batch (domains): it leaves the tracker dismissed list and becomes eligible for discovery again, suggested anew while the engines keep citing it (accepting it stays a distinct move). The counterpart of dismiss, for when the user changes their mind. Idempotent and never refused: restoring a domain that was not dismissed simply leaves it eligible. The answer
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tracker_id | string | yes | The UUID of the tracker: call list_trackers to find it. |
| domain | string | no | One domain to act on, exactly as listed by list_keyword_discoveries. Send this OR domains, never both. |
| domains | array | no | Several domains to act on in one call, each exactly as listed by list_keyword_discoveries. Send this OR domain, never both. ALL-OR-NOTHING: one invalid domain refuses the whole batch, so you never hav |
The competitor scans of the account, newest first: a basket of up to 5 companies of one market, asked to one engine, from which the scan returns THE PLACES that corroborate them. status says where each one stands: draft (questions still open, nothing charged), measuring, ready (there is a list to read), failed. rescan_cadence says whether it repeats. Without the list of places, which the fiche
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | no | Only the scans of this project: the UUID of a project of the account (call list_projects). Omitted, every project. |
One scan and its list of PLACES: the domains the engine cited while answering about the basket, ranked by how many of its companies each place covers (subjects, the number that carries the tool) then by AI Authority. Each place carries reach, the way in: self_serve (open your own page there), participate (a forum or a community), ask (a third-party editorial site, the most frequent), registry
| Parameter | Type | Required | Notes |
|---|---|---|---|
| competitor_scan_id | string | yes | The UUID of the competitor scan: call list_competitor_scans to find it. |
Prepare a competitor scan on a basket of up to 5 companies of the same market. Three or more is what the scan is built for: from there the places rank by RECURRENCE, that is by how many companies of the basket each one covers. It is created as a DRAFT: nothing is charged, and the questions it derives come back in the answer for you to read before arming it with start_competitor_scan. Each subject
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | UUID of the project the scan belongs to: call list_projects to find it. Its brand is the one the list answers "you are not there" about. |
| subjects | array | yes | The basket: up to 5 companies of the same market, 3 or more being what the ranking by recurrence needs. |
| category | string | yes | What qualifies each company in the questions, for example "welding equipment manufacturer". |
| usage | string | no | What buyers use it for, for example "hobby welding". Omitted, the category serves. |
| engine | string | no | The engine asked, ChatGPT by default. One per scan. |
| templates | array | no | Which questions to ask about each company, the four of them by default: about_reputation what is said about it, about_price whether it is worth its price, about_customers which companies use it |
| language | string | no | The language the questions are asked in, written in en, fr, es, de, it, pt, ar, bg, cs, da, el, fi, he, hi, hu, id, ja, ko, ms, nl, no, pl, ro, ru, sk, sv, th, tr, uk, vi, zh, zh-hant. Omitted, the ca |
| country | string | no | The market the questions name, as an ISO 3166-1 alpha-2 code ("US"). Omitted, the questions name no country. |
| title | string | no | A name for the scan. Omitted, the category serves. |
Arm a prepared scan: the engine is asked, and the prepaid balance is debited by the amount estimated_cost_minor announced on the scan. SPENDS: read that amount to the person and get their go-ahead before calling. The answers land within a few minutes; read the places back with get_competitor_scan. Safe to replay: a scan already armed answers with itself instead of paying for a second one.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| competitor_scan_id | string | yes | The UUID of the competitor scan: call list_competitor_scans to find it. |
Correct a scan still in draft, and set the cadence of one already armed. questions is where the measurement is won: send the questions to KEEP, with the wording you want asked. A question of the scan left out of the list is removed, and the amount announced by estimated_cost_minor follows, so this is also how the person spends less. Nothing is charged until start_competitor_scan, so rewriting
| Parameter | Type | Required | Notes |
|---|---|---|---|
| competitor_scan_id | string | yes | The UUID of the competitor scan: call list_competitor_scans to find it. |
| questions | array | no | The questions to KEEP, in the order to ask them. A sent list REPLACES the questions of the scan: one left out is removed. Draft only. |
| rescan_cadence | string/null | no | How often the scan runs again: "weekly", "monthly", or null to stop it. |
The Atlas: the sources the AIs cite when they answer YOUR trackers. Each entry is a domain with its AI Authority on each AI, a 0 to 100 scale over the last 30 days where 100 is the source that AI cites the most. An engine with no value has not cited the domain lately, which is not a zero. Each AI has its own leader, so its own scale: each column ranks the sources on its own AI, the rankings being
| Parameter | Type | Required | Notes |
|---|---|---|---|
| domain | string | no | Keep only the domains containing this text, e.g. "wikipedia" or ".fr". |
| engine | string | no | Keep only the sources this engine has cited at least once. |
| project_id | string | no | Only the sources surfaced by the trackers of this project: the UUID of a project of the account (call list_projects), or "default" for the trackers without a project. Use it to read the map of one bra |
| sort | string | no | Order of the page: "aa_chatgpt", "aa_claude", "aa_gemini", "aa_perplexity", "aa_mistral" or "aa_grok" for the ranking of one AI, which also keeps only the sources that AI cites; "detections" ranks acr |
| page | integer | no | Page number, from 1. |
| per_page | integer | no | Entries per page, 25 by default, 100 at most. |
One entry of the Atlas, read by its id: the domain and its AI Authority on each AI. Call list_sources to find a source id, or to read the same entries filtered and ranked.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| source_id | string | yes | The UUID of the source: call list_sources to find it. |
The channels behind one source of the Atlas: who published the videos the AIs cited when answering the questions of this account, with their videos and the questions that surfaced each one. The unit of the Atlas is the registrable domain, so a video host is one source however many people publish on it; this reads the level below, the one where the work happens, since a channel is what you contact.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| source_id | string | yes | The UUID of the source: call list_sources to find it. |
| project_id | string | no | Only the channels surfaced by the trackers of this project: the UUID of a project of the account (call list_projects), or "default" for the trackers without a project. Omitted, every tracker of the ac |
The settings of the account: the legal name, billing country, postal address and intra-EU VAT number printed on its invoices, plus the language we write to it in and the time zone its hours are shown in. member names the person the language and the time zone belong to. Read it before update_account_settings: the answer gives every setting as it stands, so you change the one the user named and le
No parameter schema on file.
Change the settings of the account. Send only what the user is changing: every setting you leave out keeps its value. billing_country, billing_address and intra_eu_vat_number clear when you send null; name, language and timezone keep their value on null, so name the language or the time zone you want. A postal address and a VAT number travel with billing_country: send the country in
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | no | Legal name of the account, the one printed on its invoices. |
| billing_country | string | no | Billing country, as an ISO 3166-1 alpha-2 code: "FR", "US", "BR". It decides the tax treatment of the next invoices, so it is the country of the entity being billed, not where the user happens to be. |
| billing_address | array | no | Postal address of the account, one string per line, like ["12 Example Street", "75001 Paris"]. The list replaces the previous address; [] or null clears it. Three lines at most, so the address block o |
| intra_eu_vat_number | string | no | Intra-EU VAT number, for an account billed in an EU member state: the two-letter country code followed by the national number, like "FR12345678901". It goes on the invoices of the account. |
| language | string | no | The language we write to this account in: emails, and the hosted payment page of a top-up. |
| timezone | string | no | The time zone the hours of the account are shown in, as an IANA identifier: "Europe/Paris", "America/New_York", "UTC". |
The prepaid credit balance of the account: available credits, which never expire, and the amount reserved by surveys in progress with the detail of each reservation. Read it before starting a tracker, or when a call fails with insufficient_credits. It also carries what a top-up is worth here, so you never have to work it out: monthly_estimate_minor is what the account has set up to consume in a
No parameter schema on file.
What the account SPENDS: one call, three answers, and they must never be mixed up. (1) THIS MONTH, a FORECAST: this_month_forecast gives total_minor for the month in progress, which is spent_minor (already debited) plus remaining_minor (what the active trackers and monitored corroborations will still run before month end, counted as real occurrences and recomputed from their configuration)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| month | string | no | A single month, YYYY-MM. Omitted: every month the account has entries for. |
| type | string | no | Which entries to return: all (default), in (top-ups and adjustments), out (spend). |
| page | integer | no | — |
| per_page | integer | no | — |
Prepare a top-up of the prepaid credit balance and return the hosted payment link. Nothing is charged by this call: hand payment_url to the user, the payment happens there, and they approve the amount on that page. When the user names an amount, that amount wins: pass it as amount, exactly the number they said. Amounts are always in the wallet currency of the account, which get_credits gives: if
| Parameter | Type | Required | Notes |
|---|---|---|---|
| amount | number | no | Credits to buy, in MAJOR units of the wallet currency: what a person says. 50 means 50.00, and 12.5 means 12.50. Use this one when the user names the amount, exactly as they said it. Minimum 10.00. |
| amount_minor | integer | no | Credits to buy, in MINOR units of the wallet currency: 5000 means 50.00. Use this one when you compute the amount from the cost grid, which is in minor units too. Minimum 1000. |
Send a message to the humans behind Epovest: report a problem, suggest an improvement, ask a question. Use it when a tool refuses what should work, when the product is missing something the user needs, or when the user asks you to tell us something. The message lands in the support threads of the account, which the members also see in the app, and a human answers there. Reply to an ongoing thread
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message | string | yes | What you want to tell the support team, in the words of the user when they dictated it. Include what you tried and what happened. |
| subject | string | no | Title of the thread. Derived from the message when omitted; ignored when replying. |
| kind | string | no | What this message is: sorts it on arrival. |
| thread_id | string | no | Reply to this thread instead of opening a new one: call list_support_threads to find it. |
The support threads of the account, most recent first: what was asked, and whether the support team has answered. The threads are shared by the members of the account, whatever wrote them.
No parameter schema on file.
One support thread with its messages, including the answers of the support team. Read it back after contact_support to relay the answer to the user.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| thread_id | string | yes | The UUID of the support thread: call list_support_threads to find it. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Epovest or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Epovest can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.