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 a
create_tracker
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.
update_tracker
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 tracker that has measured creates a new version: the score series continues across versions, and the response carries t
start_tracker
Start or restart the measurement of a tracker against the prepaid credit balance. Refused with insufficient_credits when the balance does not cover one survey; that answer carries top_up_url, the page where the person adds credit, so give it to them. Starting an already active tracker changes nothin
survey_now
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. It debits the prepaid credit balance like any survey, and the point joins the score series marked on_demand. The answer c
pause_tracker
Pause the measurement of an active tracker. The score series is kept; start_tracker resumes it.
archive_tracker
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 a
list_projects
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 u
create_project
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 transla
rename_project
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
get_canon
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
update_project_canon
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 record
get_link_targets
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 dire
set_link_targets
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
archive_project
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 file
list_surfaces
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 whe
create_surface
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). URL-FIRST: the url is the only thing needed, type and label are derived from it; pass them only to correct a derivation.
update_surface
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 check
tick_surface_checklist
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), wh
add_surface_check
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 i
update_surface_check
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 cano
delete_surface_check
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 w
restore_surface_check
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 answe
delete_surface
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_surf
restore_surface
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.
convert_surface_to_corroboration
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 regi
list_corroborations
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 Sur
create_corroboration
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 pa
update_corroboration
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
archive_corroboration
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 sou
verify_corroboration
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, wort
convert_corroboration_to_surface
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 deriv
list_corroboration_candidates
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 (corroboration
dismiss_corroboration_candidate
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 u
get_logbook
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 cat
create_logbook_entry
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 to
update_logbook_entry
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. Tool events cannot be edited: they are derived from the canon and surface registries.
delete_logbook_entry
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 fr
restore_logbook_entry
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.
list_quests
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 re
create_quest
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 retur
update_quest
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.
complete_quest
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 re
dismiss_quest
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.
reopen_quest
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 lis
get_results
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.
get_responses
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 undeterm
list_keyword_discoveries
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
accept_keyword_discovery
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
dismiss_keyword_discovery
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 di
restore_keyword_discovery
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. Idempoten
list_competitor_scans
The competitor scans of the account, newest first: a basket of 3 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 r
get_competitor_scan
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), pa
create_competitor_scan
Prepare a competitor scan on a basket of 3 to 5 companies of the same market. 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 needs a `website`: a whole domain found in a page
start_competitor_scan
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.
update_competitor_scan
Set how often an armed scan runs again: "monthly" sets it, null stops it. Each pass widens the list rather than refreshing it, because two checks of the same question do not cite the same pages, and what one check found the next one keeps. SPENDS on every pass, the same amount as the first one, so n
list_sources
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 ha
get_source
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.
get_account_settings
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_accoun
update_account_settings
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
get_credits
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
get_usage
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 w
topup_credits
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 num
contact_support
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 ac
list_support_threads
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.
get_support_thread
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.
Endpoint
https://mcp.epovest.com/mcp Category: Dev & Git · Last checked: 2026-08-15T09:04:18Z
Monitor your own MCP server
Get alerted the moment yours goes down, a tool schema drifts, or an upstream silently breaks.
What this means. This server responded to the MCP handshake and listed its tools without authentication. The schema fingerprint lets us flag if tool signatures silently change (schema drift) between checks.