Epovest
Was dieses MCP kann
Tracks how AI systems mention and recommend brands, manages brand surfaces and corroborating pages, runs competitor scans, and measures citations, visibility, sentiment, and share of voice.
Tools
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'domain': {'type': 'string', 'description': 'One domain to act on, exactly as listed by list_keyword_discoveries. Send this OR domains, never both.'}, 'domains': {'type': 'array', 'items': {'type': 'string'}, 'description': '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 have to guess which half took.'}, 'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['surface_id', 'label'], 'properties': {'label': {'type': 'string', 'description': '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").'}, 'scope': {'enum': ['site', 'language'], 'type': 'string', 'description': '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.'}, 'surface_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the surface: call list_surfaces to find it.'}, 'restates_canon': {'type': 'boolean', 'description': '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.'}}}
Eingabeschema
{'type': 'object', 'required': ['corroboration_id'], 'properties': {'archived': {'type': 'boolean', 'description': 'true takes the page down, false puts it back live. Omitted, it takes it down.'}, 'corroboration_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the corroboration: call list_corroborations to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id'], 'properties': {'archived': {'type': 'boolean', 'description': 'true files the project away, false brings it back. Omitted, it files it away.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'archived': {'type': 'boolean', 'description': 'true files the tracker away and pauses its measurement, false brings it back. Omitted, it files it away.'}, 'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['quest_id'], 'properties': {'quest_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the quest: call list_quests to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['message'], 'properties': {'kind': {'enum': ['problem', 'suggestion', 'question'], 'type': 'string', 'description': 'What this message is: sorts it on arrival.'}, 'message': {'type': 'string', 'description': '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': {'type': 'string', 'description': 'Title of the thread. Derived from the message when omitted; ignored when replying.'}, 'thread_id': {'type': 'string', 'format': 'uuid', 'description': 'Reply to this thread instead of opening a new one: call list_support_threads to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['corroboration_id'], 'properties': {'corroboration_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the corroboration: call list_corroborations to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['surface_id'], 'properties': {'surface_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the surface: call list_surfaces to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'subjects', 'category'], 'properties': {'title': {'type': 'string', 'description': 'A name for the scan. Omitted, the category serves.'}, 'usage': {'type': 'string', 'description': 'What buyers use it for, for example "hobby welding". Omitted, the category serves.'}, 'engine': {'enum': ['chatgpt', 'claude', 'gemini', 'perplexity', 'mistral', 'grok'], 'type': 'string', 'description': 'The engine asked, ChatGPT by default. One per scan.'}, 'country': {'type': 'string', 'description': 'The market the questions name, as an ISO 3166-1 alpha-2 code ("US"). Omitted, the questions name no country.'}, 'category': {'type': 'string', 'description': 'What qualifies each company in the questions, for example "welding equipment manufacturer".'}, 'language': {'type': 'string', 'description': '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 canonical language of the project. For another language, write to us with contact_support and we add it.'}, 'subjects': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'website'], 'properties': {'name': {'type': 'string', 'description': 'The company as the market names it, for example "Lincoln Electric".'}, 'website': {'type': 'string', 'description': 'Its site, for example "lincolnelectric.com". Required: it is what identifies the company exactly.'}}}, 'maxItems': 5, 'minItems': 1, 'description': 'The basket: up to 5 companies of the same market, 3 or more being what the ranking by recurrence needs.'}, 'templates': {'type': 'array', 'items': {'enum': ['about_reputation', 'about_price', 'about_customers', 'compared_alternatives'], 'type': 'string'}, 'description': '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 and what they report, `compared_alternatives` what it is compared to. A sent list REPLACES that default, and the amount follows it: three companies and two templates make six questions.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': '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.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Absolute http(s) address of the EXACT page where the third party talks about the brand, never the home page of the site.'}, 'label': {'type': 'string', 'description': '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.'}, 'notes': {'type': 'string', 'description': 'Free notes: the passage that mentions the brand, the contact, how the page came about.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}, 'published_on': {'type': 'string', 'description': '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.'}, 'request_channel': {'enum': ['available', 'none', 'unknown'], 'type': 'string', 'description': '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 quest file; the contact itself belongs in the notes.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'category', 'label'], 'properties': {'label': {'type': 'string', 'description': 'Short wording of the action, e.g. "Site translated into Spanish": it is what the annotation shows next to the citation curves.'}, 'notes': {'type': 'string', 'description': 'Free notes: context, links, details of the action.'}, 'category': {'enum': ['content', 'technical', 'translation', 'canon', 'press', 'other'], 'type': 'string', 'description': 'What kind of action this is; it files the entry for filtering. "other" covers anything else.'}, 'quest_id': {'type': 'string', 'format': 'uuid', 'description': '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 says what it serves. Omitted on creation, the entry belongs to the project alone; sent as null on an edit, it goes back to the project alone.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}, 'occurred_at': {'type': 'string', 'description': '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 on creation, now is used.'}}}
Eingabeschema
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'Name of the project, as the user calls it (a client, a brand, a website...).'}, 'canon_long': {'type': 'string', 'description': 'The two-sentence version, when the surface allows it.'}, 'canon_email': {'type': 'string', 'description': 'Public email address of the brand.'}, 'canon_perks': {'type': 'array', 'items': {'type': 'string'}, 'description': '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 superlatives ("the best"), which no page reuses. A sent list REPLACES the previous one.'}, 'canon_phone': {'type': 'string', 'description': 'Phone number, international prefix included.'}, 'canon_short': {'type': 'string', 'description': 'THE one-sentence description third-party pages reuse as is.'}, 'canon_address': {'type': 'string', 'description': 'Postal address, as written on a listing. Language-neutral: the same string everywhere, like the other facts.'}, 'canon_website': {'type': 'string', 'description': '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 brand (documentation, application, blog, social accounts) are SURFACES, never a second canonical site.'}, 'canon_category': {'type': 'string', 'description': 'Category label for listings and structured data.'}, 'canon_language': {'type': 'string', 'description': '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 a wording: the canon is the wording, so sending the language on its own does not open one.'}, 'canon_whatsapp': {'type': 'string', 'description': 'WhatsApp number, international prefix included.'}, 'canon_one_liner': {'type': 'string', 'description': 'One-sentence signature of the brand.'}, 'canon_legal_name': {'type': 'string', 'description': '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 cross-read it to anchor the entity, and it is what a directory listing and an Organization.legalName block copy.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'title'], 'properties': {'notes': {'type': 'string', 'description': 'Free notes: context, links, what done looks like.'}, 'title': {'type': 'string', 'description': 'Short wording of the move, e.g. "Get our MCP server listed on the AI tool directories": it is what the file shows.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project whose file takes the quest: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Absolute http(s) address of the surface.'}, 'type': {'enum': ['website', 'github', 'linkedin', 'x', 'youtube', 'wikidata', 'directory', 'app_store', 'other'], 'type': 'string', 'description': '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 website). Send it only to correct a derivation. "other" covers anything else and carries the generic checklist.'}, 'label': {'type': 'string', 'description': '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).'}, 'notes': {'type': 'string', 'description': 'Free registry notes: who owns the account, access, context.'}, 'languages': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Languages of the surface, as short codes like "en" or "pt-br". A sent list replaces the previous one.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['title', 'prompts', 'engines', 'frequency', 'resolution'], 'properties': {'title': {'type': 'string', 'description': 'Display name of the tracker.'}, 'engines': {'type': 'array', 'items': {'enum': ['chatgpt', 'claude', 'gemini', 'perplexity', 'mistral', 'grok'], 'type': 'string'}, 'description': '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 check carries that. The amount for the whole tracker comes back as cost_per_survey_minor, so quote that one to the person rather than adding these up.'}, 'prompts': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The questions asked to the AI engines at every survey, phrased exactly as a customer would ask them.'}, 'analysts': {'type': 'array', 'items': {'enum': ['keyword_presence', 'share_of_voice', 'sentiment', 'custom_prompt'], 'type': 'string'}, 'description': '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.'}, 'keywords': {'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'object', 'required': ['keyword'], 'properties': {'keyword': {'type': 'string'}, 'favorite': {'type': 'boolean'}}}]}, 'description': 'Names to detect in the answers: your brand and the names you compare against. Flag yours as favorite.'}, 'discovery': {'type': 'boolean', 'description': 'Suggest new keywords spotted in the answers.'}, 'frequency': {'enum': ['monthly', 'weekly', 'daily', 'on_demand'], 'type': 'string', 'description': '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, or whenever the person wants to decide each time; the other values keep a survey running on their own pace.'}, 'project_id': {'type': 'string', 'description': '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 under Default; omitted on update the project does not change.'}, 'resolution': {'enum': ['hd', 'full_hd', '4k', '8k'], 'type': 'string', 'description': '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.'}, 'custom_prompt': {'type': 'string', 'description': 'The instruction of the custom_prompt analyst. Required when that analyst is selected.'}, 'next_survey_at': {'type': 'string', 'description': '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 back like anywhere else, and it is what makes the next start_tracker wait instead of surveying right away. It goes with a frequency that has a pace: on on_demand, leave it out and call survey_now when the person wants a reading.'}, 'notify_on_survey': {'type': 'boolean', 'description': '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.'}}}
Eingabeschema
{'type': 'object', 'required': ['entry_id'], 'properties': {'entry_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the logbook entry: call get_logbook to find it (only manual entries carry an id).'}}}
Eingabeschema
{'type': 'object', 'required': ['surface_id'], 'properties': {'surface_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the surface: call list_surfaces to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['surface_id', 'check'], 'properties': {'check': {'type': 'string', 'description': 'The key of the check of your own, exactly as listed by list_surfaces in checklist.custom (add_surface_check returns it too).'}, 'surface_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the surface: call list_surfaces to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'url'], 'properties': {'url': {'type': 'string', 'description': 'The address of the candidate, exactly as list_corroboration_candidates gives it.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'domain': {'type': 'string', 'description': 'One domain to act on, exactly as listed by list_keyword_discoveries. Send this OR domains, never both.'}, 'domains': {'type': 'array', 'items': {'type': 'string'}, 'description': '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 have to guess which half took.'}, 'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['quest_id'], 'properties': {'quest_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the quest: call list_quests to find it.'}}}
Eingabeschema
{'type': 'object', 'properties': {}}
Eingabeschema
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['competitor_scan_id'], 'properties': {'competitor_scan_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the competitor scan: call list_competitor_scans to find it.'}}}
Eingabeschema
{'type': 'object', 'properties': {}}
Eingabeschema
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id'], 'properties': {'source': {'enum': ['tool', 'manual'], 'type': 'string', 'description': 'Only the items of this source: "tool" for suite events, "manual" for recorded entries. Omitted, both.'}, 'deleted': {'enum': ['only'], 'type': 'string', 'description': '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 category. Omitted, the logbook is read.'}, 'category': {'enum': ['content', 'technical', 'translation', 'canon', 'press', 'other'], 'type': 'string', 'description': 'Only the manual entries of this category (tool events carry no category and never match).'}, 'quest_id': {'type': 'string', 'format': 'uuid', 'description': '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_entries, how many it holds). Tool events carry no quest and never match.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id', 'engine'], 'properties': {'q': {'type': 'string', 'description': 'Full-text filter on the answer text.'}, 'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number, 1 by default.'}, 'tone': {'enum': ['positive', 'neutral', 'negative'], 'type': 'string', 'description': '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 tone.'}, 'engine': {'enum': ['chatgpt', 'claude', 'gemini', 'perplexity', 'mistral', 'grok'], 'type': 'string', 'description': 'The engine whose answers are read.'}, 'survey': {'type': 'string', 'format': 'uuid', 'description': 'Only the answers of this survey.'}, 'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Answers per page, 25 by default, 100 at most.'}, 'question': {'type': 'string', 'description': 'Exact text of one tracked question.'}, 'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}, 'include_raw': {'type': 'boolean', 'description': 'Add the full engine payload to every answer.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'engine': {'enum': ['chatgpt', 'claude', 'gemini', 'perplexity', 'mistral', 'grok'], 'type': 'string', 'description': 'Only the rows of this engine.'}, 'analyst': {'enum': ['keyword_presence', 'share_of_voice', 'sentiment'], 'type': 'string', 'description': '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.'}, 'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['source_id'], 'properties': {'source_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the source: call list_sources to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['thread_id'], 'properties': {'thread_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the support thread: call list_support_threads to find it.'}}}
Eingabeschema
{'type': 'object', 'properties': {'page': {'type': 'integer', 'minimum': 1}, 'type': {'enum': ['all', 'in', 'out'], 'type': 'string', 'description': 'Which entries to return: all (default), in (top-ups and adjustments), out (spend).'}, 'month': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}$', 'description': 'A single month, YYYY-MM. Omitted: every month the account has entries for.'}, 'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1}}}
Eingabeschema
{'type': 'object', 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Only the scans of this project: the UUID of a project of the account (call list_projects). Omitted, every project.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}}}
Eingabeschema
{'type': 'object', 'properties': {}}
Eingabeschema
{'type': 'object', 'properties': {'status': {'enum': ['open', 'done', 'dismissed'], 'type': 'string', 'description': 'Which quests to list: "open" (the file, default), "done" or "dismissed" (the closed history).'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'Only the file of this project: the UUID of a project of the account (call list_projects). Omitted, the file covers every active project.'}}}
Eingabeschema
{'type': 'object', 'required': ['source_id'], 'properties': {'source_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the source: call list_sources to find it.'}, 'project_id': {'type': 'string', 'description': '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 account counts.'}}}
Eingabeschema
{'type': 'object', 'properties': {'page': {'type': 'integer', 'minimum': 1, 'description': 'Page number, from 1.'}, 'sort': {'enum': ['detections', 'engines', 'freshness', 'domain', 'aa_chatgpt', 'aa_claude', 'aa_gemini', 'aa_perplexity', 'aa_mistral', 'aa_grok'], 'type': 'string', 'description': '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 across all AIs at once, "engines" by number of distinct engines, "freshness" by most recent detection, "domain" alphabetically. Defaults to "detections".'}, 'domain': {'type': 'string', 'description': 'Keep only the domains containing this text, e.g. "wikipedia" or ".fr".'}, 'engine': {'enum': ['chatgpt', 'claude', 'gemini', 'perplexity', 'mistral', 'grok'], 'type': 'string', 'description': 'Keep only the sources this engine has cited at least once.'}, 'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Entries per page, 25 by default, 100 at most.'}, 'project_id': {'type': 'string', 'description': '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 brand when the account holds several. Omitted, the map covers every tracker of the account, which is what shows a source weighing on two of its markets at once. The AI Authority scale does not move with it: it stays computed across the whole map, so the figures of two projects compare.'}}}
Eingabeschema
{'type': 'object', 'properties': {}}
Eingabeschema
{'type': 'object', 'required': ['project_id'], 'properties': {'sort': {'enum': ['registry', 'authority'], 'type': 'string', 'description': '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 line, the most read first, so the work follows a measured fact rather than the tidiness of a checkbox. It orders and never filters: every surface stays listed, the domains off the map closing the list, and a page nobody cites yet is sometimes exactly the one to work on.'}, 'deleted': {'enum': ['only'], 'type': 'string', 'description': '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.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'properties': {'project_id': {'type': 'string', 'description': '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.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'name'], 'properties': {'name': {'type': 'string', 'description': 'The name the project takes, as the user calls it (a client, a brand, a website...).'}, 'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['quest_id'], 'properties': {'quest_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the quest: call list_quests to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'domain': {'type': 'string', 'description': 'One domain to act on, exactly as listed by list_keyword_discoveries. Send this OR domains, never both.'}, 'domains': {'type': 'array', 'items': {'type': 'string'}, 'description': '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 have to guess which half took.'}, 'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['entry_id'], 'properties': {'entry_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the logbook entry: call get_logbook to find it (only manual entries carry an id).'}}}
Eingabeschema
{'type': 'object', 'required': ['surface_id'], 'properties': {'surface_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the surface: call list_surfaces to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['surface_id', 'check'], 'properties': {'check': {'type': 'string', 'description': 'The key of the check of your own, exactly as listed by list_surfaces in checklist.custom (add_surface_check returns it too).'}, 'surface_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the surface: call list_surfaces to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id', 'link_targets'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of the project: call list_projects to find it.'}, 'link_targets': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The FULL list of the free addresses, as absolute http(s) URLs. It replaces the previous one.'}}}
Eingabeschema
{'type': 'object', 'required': ['competitor_scan_id'], 'properties': {'competitor_scan_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the competitor scan: call list_competitor_scans to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['surface_id', 'ticks'], 'properties': {'ticks': {'type': 'array', 'items': {'type': 'object', 'required': ['item'], 'properties': {'done': {'type': 'boolean', 'description': 'true verifies the cell, false clears it. Omitted (and no dismissed), it verifies.'}, 'item': {'type': 'string', 'description': 'The item, exactly as listed by list_surfaces in checklist.items for the type of this surface.'}, 'reason': {'type': 'string', 'description': 'Why the item does not apply on this surface, short: the exception must be readable without its author. Due when dismissed is true.'}, 'language': {'type': 'string', 'description': 'The language the cell belongs to, among the columns listed in checklist.state ("default" when the surface lists no language). Omitted, the single column of the surface is used; a multilingual surface needs it on every per-language item. A site-wide item (checklist.site_items) is one cell for the whole site: leave the language out.'}, 'dismissed': {'type': 'boolean', 'description': 'true sets the cell aside (a "reason" is due), false brings it back to blank. Never combined with done.'}}}, 'description': 'The cell moves. Nothing else on the checklist changes.'}, 'surface_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the surface: call list_surfaces to find it.'}}}
Eingabeschema
{'type': 'object', 'properties': {'amount': {'type': 'number', 'description': '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.', 'exclusiveMinimum': 0}, 'amount_minor': {'type': 'integer', 'description': '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.', 'exclusiveMinimum': 0}}}
Eingabeschema
{'type': 'object', 'properties': {'name': {'type': 'string', 'description': 'Legal name of the account, the one printed on its invoices.'}, 'language': {'enum': ['en', 'fr', 'es', 'de', 'it', 'pt'], 'type': 'string', 'description': 'The language we write to this account in: emails, and the hosted payment page of a top-up.'}, 'timezone': {'type': 'string', 'description': 'The time zone the hours of the account are shown in, as an IANA identifier: "Europe/Paris", "America/New_York", "UTC".'}, 'billing_address': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 3, 'description': '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 of an invoice stays readable.'}, 'billing_country': {'type': 'string', 'description': '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.'}, 'intra_eu_vat_number': {'type': 'string', 'description': '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.'}}}
Eingabeschema
{'type': 'object', 'required': ['competitor_scan_id'], 'properties': {'questions': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'description': 'UUID of one of the questions of this scan, as get_competitor_scan gives it.'}, 'text': {'type': 'string', 'description': 'The wording to ask. Omitted, the question keeps the one it has.'}}}, 'description': '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': {'enum': ['weekly', 'monthly', None], 'type': ['string', 'null'], 'description': 'How often the scan runs again: "weekly", "monthly", or null to stop it.'}, 'competitor_scan_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the competitor scan: call list_competitor_scans to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['corroboration_id'], 'properties': {'url': {'type': 'string', 'description': 'Absolute http(s) address of the EXACT page where the third party talks about the brand, never the home page of the site.'}, 'label': {'type': 'string', 'description': '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.'}, 'notes': {'type': 'string', 'description': 'Free notes: the passage that mentions the brand, the contact, how the page came about.'}, 'monitoring': {'enum': ['off', 'daily', 'weekly', 'monthly'], 'type': 'string', 'description': '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 verify_corroboration, on the mention and on the link, plus an email when the text of the passage changed or the link is gone. It states a STATE, so sending the same value again does nothing. It applies to a live line whose page reads (readability "html"): elsewhere the reply is 409 corroboration_archived or 409 page_not_readable, and "off" is always accepted.'}, 'published_on': {'type': 'string', 'description': '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.'}, 'request_channel': {'enum': ['available', 'none', 'unknown'], 'type': 'string', 'description': '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 quest file; the contact itself belongs in the notes.'}, 'corroboration_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the corroboration: call list_corroborations to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['entry_id'], 'properties': {'label': {'type': 'string', 'description': 'Short wording of the action, e.g. "Site translated into Spanish": it is what the annotation shows next to the citation curves.'}, 'notes': {'type': 'string', 'description': 'Free notes: context, links, details of the action.'}, 'category': {'enum': ['content', 'technical', 'translation', 'canon', 'press', 'other'], 'type': 'string', 'description': 'What kind of action this is; it files the entry for filtering. "other" covers anything else.'}, 'entry_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the logbook entry: call get_logbook to find it (only manual entries carry an id).'}, 'quest_id': {'type': 'string', 'format': 'uuid', 'description': '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 says what it serves. Omitted on creation, the entry belongs to the project alone; sent as null on an edit, it goes back to the project alone.'}, 'occurred_at': {'type': 'string', 'description': '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 on creation, now is used.'}}}
Eingabeschema
{'type': 'object', 'required': ['project_id'], 'properties': {'canon_long': {'type': 'string', 'description': 'The two-sentence version, when the surface allows it.'}, 'project_id': {'type': 'string', 'description': 'UUID of the project: call list_projects to find it.'}, 'canon_email': {'type': 'string', 'description': 'Public email address of the brand.'}, 'canon_perks': {'type': 'array', 'items': {'type': 'string'}, 'description': '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 superlatives ("the best"), which no page reuses. A sent list REPLACES the previous one.'}, 'canon_phone': {'type': 'string', 'description': 'Phone number, international prefix included.'}, 'canon_short': {'type': 'string', 'description': 'THE one-sentence description third-party pages reuse as is.'}, 'canon_address': {'type': 'string', 'description': 'Postal address, as written on a listing. Language-neutral: the same string everywhere, like the other facts.'}, 'canon_website': {'type': 'string', 'description': '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 brand (documentation, application, blog, social accounts) are SURFACES, never a second canonical site.'}, 'canon_category': {'type': 'string', 'description': 'Category label for listings and structured data.'}, 'canon_language': {'type': 'string', 'description': '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 on its own does not open one.'}, 'canon_whatsapp': {'type': 'string', 'description': 'WhatsApp number, international prefix included.'}, 'canon_one_liner': {'type': 'string', 'description': 'One-sentence signature of the brand.'}, 'canon_legal_name': {'type': 'string', 'description': '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 cross-read it to anchor the entity, and it is what a directory listing and an Organization.legalName block copy.'}}}
Eingabeschema
{'type': 'object', 'required': ['quest_id'], 'properties': {'notes': {'type': 'string', 'description': 'Free notes: context, links, what done looks like.'}, 'title': {'type': 'string', 'description': 'Short wording of the move, e.g. "Get our MCP server listed on the AI tool directories": it is what the file shows.'}, 'quest_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the quest: call list_quests to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['surface_id'], 'properties': {'url': {'type': 'string', 'description': 'Absolute http(s) address of the surface.'}, 'type': {'enum': ['website', 'github', 'linkedin', 'x', 'youtube', 'wikidata', 'directory', 'app_store', 'other'], 'type': 'string', 'description': '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 website). Send it only to correct a derivation. "other" covers anything else and carries the generic checklist.'}, 'label': {'type': 'string', 'description': '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).'}, 'notes': {'type': 'string', 'description': 'Free registry notes: who owns the account, access, context.'}, 'languages': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Languages of the surface, as short codes like "en" or "pt-br". A sent list replaces the previous one.'}, 'surface_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the surface: call list_surfaces to find it.'}}}
Eingabeschema
{'type': 'object', 'required': ['surface_id', 'check'], 'properties': {'check': {'type': 'string', 'description': 'The key of the check of your own, exactly as listed by list_surfaces in checklist.custom (add_surface_check returns it too).'}, 'label': {'type': 'string', 'description': 'The new wording of the check, up to 120 characters.'}, 'surface_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the surface: call list_surfaces to find it.'}, 'restates_canon': {'type': 'boolean', 'description': 'true when the check restates the WORDING of the canon, false when it constates something else.'}}}
Eingabeschema
{'type': 'object', 'required': ['tracker_id'], 'properties': {'title': {'type': 'string', 'description': 'Display name of the tracker.'}, 'engines': {'type': 'array', 'items': {'enum': ['chatgpt', 'claude', 'gemini', 'perplexity', 'mistral', 'grok'], 'type': 'string'}, 'description': '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 check carries that. The amount for the whole tracker comes back as cost_per_survey_minor, so quote that one to the person rather than adding these up.'}, 'prompts': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The questions asked to the AI engines at every survey, phrased exactly as a customer would ask them.'}, 'analysts': {'type': 'array', 'items': {'enum': ['keyword_presence', 'share_of_voice', 'sentiment', 'custom_prompt'], 'type': 'string'}, 'description': '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.'}, 'keywords': {'type': 'array', 'items': {'anyOf': [{'type': 'string'}, {'type': 'object', 'required': ['keyword'], 'properties': {'keyword': {'type': 'string'}, 'favorite': {'type': 'boolean'}}}]}, 'description': 'Names to detect in the answers: your brand and the names you compare against. Flag yours as favorite.'}, 'discovery': {'type': 'boolean', 'description': 'Suggest new keywords spotted in the answers.'}, 'frequency': {'enum': ['monthly', 'weekly', 'daily', 'on_demand'], 'type': 'string', 'description': '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, or whenever the person wants to decide each time; the other values keep a survey running on their own pace.'}, 'project_id': {'type': 'string', 'description': '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 under Default; omitted on update the project does not change.'}, 'resolution': {'enum': ['hd', 'full_hd', '4k', '8k'], 'type': 'string', 'description': '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.'}, 'tracker_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the tracker: call list_trackers to find it.'}, 'custom_prompt': {'type': 'string', 'description': 'The instruction of the custom_prompt analyst. Required when that analyst is selected.'}, 'next_survey_at': {'type': 'string', 'description': '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 back like anywhere else, and it is what makes the next start_tracker wait instead of surveying right away. It goes with a frequency that has a pace: on on_demand, leave it out and call survey_now when the person wants a reading.'}, 'notify_on_survey': {'type': 'boolean', 'description': '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.'}}}
Eingabeschema
{'type': 'object', 'required': ['corroboration_id'], 'properties': {'corroboration_id': {'type': 'string', 'format': 'uuid', 'description': 'The UUID of the corroboration: call list_corroborations to find it.'}}}
Letzte Tool-Änderungen
Ähnliche MCP-Server
SharksAPI.AI
Provides marketing analytics and actions across GA4, Search Console, Google Ads, social channels, SEO, WordPress, and marketing p…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
Stratalize Intelligence
Provides vendor, market, SaaS, workforce, government contract, public company, regulatory, competitive, and AI-brand intelligence…
captapi
Retrieves social media profiles, posts, engagement metrics, comments, marketplace listings, events, and Meta advertising data acr…
CorpusIQ
Connects authenticated users to business systems such as CRM, ecommerce, advertising, analytics, email marketing, SEO, calendars,…
Rahul D Sarker: Marketing & RevOps Tools
Provides marketing, revenue operations, sales, advertising, SaaS, and conversion calculators, along with article search and consu…
Trillboards DOOH Advertising
Manages digital out-of-home advertising campaigns and media buys across screens, with edge-AI audience sensing, impression tracki…