Mentionry
Find who links to your competitors but not you, judge each opening, and draft the pitch.
Should I use this
Quality & Safety
Findings (5)
- LOWin read_actionable_insights
- LOWin read_page_insights
- LOWin read_page_keywords
- LOWin read_search_console_performance
- LOWin read_website_pages
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mentionry": {
"url": "https://mentionry.com/api/mcp"
}
}
}Remote endpoints
https://mentionry.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (43)
⚪review_answer_evidence(workspace, runId, expectedVersion, idempotencyKey)
Mark one recorded answer run reviewed, not published or improved. Requires its saved stateVersion and idempotencyKey. New runs remain separate. No provider work.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"runId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,100}$"
},
"expectedVersion": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{12,128}$"
}
},
"required": [
"runId",
"expectedVersion",
"idempotencyKey"
],
"additionalProperties": false
}⚪restore_answer_evidence(workspace, runId, expectedVersion, idempotencyKey)
Restore a reviewed recorded run to the review queue using stateVersion and idempotencyKey. No provider work, content publication or outcome claim.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"runId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,100}$"
},
"expectedVersion": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{12,128}$"
}
},
"required": [
"runId",
"expectedVersion",
"idempotencyKey"
],
"additionalProperties": false
}🟢read_preparation_action(workspace, actionId, before, limit)
Read one owned mapped action, its current stateVersion and cursor-paginated audit history. Saved data only; no provider work.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"maxLength": 100
},
"actionId": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"before": {
"type": "string",
"pattern": "^[1-9][0-9]{0,18}$"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
}
},
"required": [
"actionId"
],
"additionalProperties": false
}⚪review_preparation_action(workspace, actionId, expectedVersion, idempotencyKey, reason)
Mark a suggestion reviewed using expectedVersion and idempotencyKey. Task triage only, not copy approval, generation, publication or outcome verification.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"maxLength": 100
},
"actionId": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"expectedVersion": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{12,128}$"
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"actionId",
"expectedVersion",
"idempotencyKey"
],
"additionalProperties": false
}⚪dismiss_preparation_action(workspace, actionId, expectedVersion, idempotencyKey, reason)
Dismiss suggested/reviewed/prepared work without deleting artifacts. Requires expectedVersion and idempotencyKey. Prevents future automatic preparation; does not undo already running work or applied evidence.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"maxLength": 100
},
"actionId": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"expectedVersion": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{12,128}$"
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"actionId",
"expectedVersion",
"idempotencyKey"
],
"additionalProperties": false
}⚪restore_preparation_action(workspace, actionId, expectedVersion, idempotencyKey, reason)
Restore dismissed/archived work with expectedVersion and idempotencyKey. Preserve existing applied/prepared evidence or return to suggested. No immediate provider work/job submission. Fresh suggestions can resume scheduled preparation; failed drafts remain explicit retries.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"maxLength": 100
},
"actionId": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"expectedVersion": {
"type": "string",
"pattern": "^[0-9a-f]{64}$"
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{12,128}$"
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 500
}
},
"required": [
"actionId",
"expectedVersion",
"idempotencyKey"
],
"additionalProperties": false
}🟢qualify_domain(domain)
Judge whether a domain is worth running link building for at all, from live search data. Returns a verdict, the measured signals behind it, and the honest case against. This is the same free diagnostic the dashboard runs, and for a large share of sites the answer is that the niche has nothing to mine.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "The domain to judge, for example mentionry.com"
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟢read_site(domain)
Read a domain and return what we think it is about: a description, its audience, and the keywords it should be found for. This is the brief every other tool takes as input, so call it first when you do not already have one.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string"
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟢discover_competitors(domain, keywords)
Find the domains competing with this one, from both search results and link profile overlap. Returns each candidate with the evidence for it, so a wrong suggestion can be recognised rather than trusted.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string"
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional. Sharpens the search half."
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟢backlink_gap(domain, competitors)
Find pages that link to the named competitors but not to you, classified by whether a link is realistically winnable and why. Competitors are excluded from their own results: a competitor is never a prospect.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string"
},
"competitors": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to five competitor domains."
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟢find_prospects(domain, description, audience, keywords, topic)
Search the open web for pages that would plausibly link to this site: resource pages, roundups, listicles and directories in its subject. Returns each with the reason it was kept.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string"
},
"description": {
"type": "string",
"description": "What the site does. Use read_site if you do not have one."
},
"audience": {
"type": "string"
},
"keywords": {
"type": "array",
"items": {
"type": "string"
}
},
"topic": {
"type": "string",
"description": "Optional. Narrows the search to one theme."
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟡verify_links(domain, pitched)
Check a list of domains against your live backlink profile and report which of them now link to you, when the link first appeared, and whether it is still there. A link that was removed shows as a change rather than staying on the scoreboard.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Your domain."
},
"pitched": {
"type": "array",
"items": {
"type": "string"
},
"description": "The domains or URLs you pitched."
}
},
"required": [
"domain",
"pitched"
],
"additionalProperties": false
}🟡draft_pitch(prospect_url, hook, page_title, sender_name, sender_site, ...)
Write one outreach email for one prospect, in your own words, using the reason that prospect would link to you. It returns the subject and body and sends nothing: sending happens from your own mailbox, after you have read it. Requires a paid Mentionry plan.
Input Schema
{
"type": "object",
"properties": {
"prospect_url": {
"type": "string",
"description": "The page you want the link on."
},
"hook": {
"type": "string",
"description": "Why this page would link to you."
},
"page_title": {
"type": "string"
},
"sender_name": {
"type": "string"
},
"sender_site": {
"type": "string",
"description": "Your domain."
},
"description": {
"type": "string",
"description": "What your site does."
}
},
"required": [
"prospect_url",
"hook",
"sender_site"
],
"additionalProperties": false
}🟢list_agents
The agents on this account: what each is called, how many steps it has, whether it would run as it stands, and when it last changed. Call describe_agent next to learn what one needs before running it.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢describe_agent(agent_id)
What one agent does, step by step, and what it needs: the values you must pass to run_agent, what it hands back, how many of its steps reach a vendor that charges, and anything currently stopping it from running.
Input Schema
{
"type": "object",
"properties": {
"agent_id": {
"type": "string",
"description": "From list_agents."
}
},
"required": [
"agent_id"
],
"additionalProperties": false
}🟢run_agent(agent_id, inputs)
Run one of your agents once and return what every step did, in order, with what it returned and how long it took. Pass its declared inputs as an object keyed by their `key` from describe_agent. Uses one included agent run. Provider calls remain subject to the shared collection allowance. Requires a paid Mentionry plan.
Input Schema
{
"type": "object",
"properties": {
"agent_id": {
"type": "string",
"description": "From list_agents."
},
"inputs": {
"type": "object",
"description": "The agent's declared inputs, keyed by `key`. Values are strings.",
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"agent_id"
],
"additionalProperties": false
}🟢list_documents
The documents your agents have produced: what each is called, which agent wrote it, how long it is and how many versions it has. Pass an id to read_document for the text.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢read_document(document_id, version)
The text of one document your agent wrote, with the agent, the step and the values that run was given. Returns the newest version unless an older one is asked for.
Input Schema
{
"type": "object",
"properties": {
"document_id": {
"type": "string",
"description": "From list_documents."
},
"version": {
"type": "number",
"description": "1 is the newest. Omit for the newest."
}
},
"required": [
"document_id"
],
"additionalProperties": false
}🟢read_visibility(dimension, days)
The account's own answer-engine measurements over a window: how often each tracked brand appears in recorded answers (visibility), its share of all mentions (share of voice), its mean position, and the ranking against named competitors. Group by day for a trend, or by model, region, persona, prompt or topic to find where a brand is weak. This is the data behind the dashboard's Answer Engine Insights.
Input Schema
{
"type": "object",
"properties": {
"dimension": {
"type": "string",
"enum": [
"day",
"model",
"region",
"persona",
"prompt",
"topic"
],
"description": "How to group. `day` for a trend over time; the others compare buckets."
},
"days": {
"type": "number",
"description": "Window length in days. Default 30."
}
},
"required": [
"dimension"
],
"additionalProperties": false
}🟡list_connections
Which outside tools this account has connected, and what each one is allowed to do here. Call it before offering to file, post or draft anything, so you can say what is actually available instead of guessing.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢list_media
The pictures and clips already generated on this account, newest first, with their addresses. Free.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟡write_landing_page(title, goal, audience, sections, offer, ...)
Write a complete, responsive landing page as HTML from a brief and file it in Documents, where the customer previews it. Grounded in the brand kit when one exists. Pass the addresses of pictures you generated so the page uses them. It is private until publish_page. Spends one draft allowance.
Input Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "The page's name in Documents and its <title>."
},
"goal": {
"type": "string",
"description": "What the page must make the reader do, in one sentence."
},
"audience": {
"type": "string"
},
"sections": {
"type": "array",
"items": {
"type": "string"
},
"description": "The sections wanted, in order, each in a few words."
},
"offer": {
"type": "string"
},
"cta_text": {
"type": "string"
},
"cta_url": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
},
"description": "/m/... addresses from generate_image, in the order to use them."
},
"tone": {
"type": "string"
},
"notes": {
"type": "string",
"description": "Anything else to honour: colours, length, what to avoid."
}
},
"required": [
"title",
"goal"
],
"additionalProperties": false
}🟡write_email_template(title, goal, audience, preheader, sections, ...)
Write a complete HTML marketing email (tables and inline styles, so it renders in Outlook and Gmail) from a brief and file it in Documents for preview. Grounded in the brand kit when one exists. The result can go into the customer's Gmail drafts with create_email_draft or be sent through an app action, both of which ask first. Spends one draft allowance.
Input Schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "The template's name in Documents and the subject line."
},
"goal": {
"type": "string"
},
"audience": {
"type": "string"
},
"preheader": {
"type": "string"
},
"sections": {
"type": "array",
"items": {
"type": "string"
}
},
"offer": {
"type": "string"
},
"cta_text": {
"type": "string"
},
"cta_url": {
"type": "string"
},
"images": {
"type": "array",
"items": {
"type": "string"
},
"description": "/m/... addresses from generate_image."
},
"tone": {
"type": "string"
},
"notes": {
"type": "string"
}
},
"required": [
"title",
"goal"
],
"additionalProperties": false
}🟢read_latest_answer_reviews(workspace, days, limit, offset)
Latest saved answer executions needing an owned-brand attribution review, with engine, recorded region/date, actual competing brands, excerpt, citations and a source-grounded review task. Last seven days; at most 200 question/engine/region/persona groups scanned per brand. Up to 30 pending and 30 reviewed/unchanged runs with triage state/version. triage.unchangedSinceReview references a prior explicit review of complete identical evidence; the current run remains reviewed=false. Use triage.needsReview for fresh tasks; changed or unverified earlier reviews need rechecking; state changes use dedicated review/restore tools. No comparison, provider calls or publication.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"default": 7
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
}
},
"additionalProperties": false
}🟢read_search_console_performance(workspace, url, area, direction, limit, ...)
Saved finalized query/page/country/device rows and matching prior28day samples. Plan-limited mapped pages; no refresh, provider call or causal lift claim.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢read_live_search_campaign(workspace, url, area, direction, limit, ...)
Saved live Google desktop rank observations, full-text database suggestions and complete-link SERP-overlap groups. Includes dated compatible rank movement, explicit unknown gaps, leading-page changes and historical mapped-page associations (14 checks/90 days). URL switching is not proven cannibalization. Includes same-context sampled site overlap, not business-rival or complete-gap inference. No refresh or provider calls.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢read_preparation_actions(workspace, url, area, direction, limit, ...)
Saved owned-page action IDs, source evidence and preparation states. Use an action ID with prepare_page_changes; no provider work is triggered by this read.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢read_search_rank_history(workspace, url, area, direction, limit, ...)
Saved keyword positions by snapshot, URL and market. Indexed database samples, not a live rank campaign; absent observations are unknown.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢read_prepared_page_changes(workspace, url, area, direction, limit, ...)
Saved source-grounded copy changes and current eligibility. Add a mapped URL for an eligible full artifact. Review-only historical proposals are withheld and replaced with an intent-review task. No generation, publishing or provider requests.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢read_agent_capabilities(workspace, url, area, direction, limit, ...)
Discover saved resources, plan coverage, shared collection ceilings, protocol links and sample workflow without provider spending.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢read_brand_overview(workspace, url, area, direction, limit, ...)
Saved brand coverage and next SEO/GEO actions; no paid collection.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢read_actionable_insights(workspace, url, area, direction, limit, ...)
Prioritized page actions with evidence, implementation steps, confidence, limits and outcome verification.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢read_website_pages(workspace, url, area, direction, limit, ...)
Pages and readiness in the entitled saved website map.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢read_page_insights(workspace, url, area, direction, limit, ...)
One mapped page, keyword topics, SEO/GEO action plan and internal connections.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"required": [
"url"
],
"additionalProperties": false
}🟢read_page_keywords(workspace, url, area, direction, limit, ...)
All collected keyword rows for a mapped page, with lexical topic labels; paginated, not complete keyword discovery.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"required": [
"url"
],
"additionalProperties": false
}🟢read_page_connections(workspace, url, area, direction, limit, ...)
Actual sampled incoming/outgoing links with anchor text and nofollow evidence.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"required": [
"url"
],
"additionalProperties": false
}🟢read_brand_results(workspace, url, area, direction, limit, ...)
Saved 30-day answer-engine visibility and competitors, with explicit denominator and sample limits.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}🟢list_brand_workspaces(workspace, url, area, direction, limit, ...)
List your owned active brand workspaces for subsequent reads.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"description": "Owned active workspace ID within this key’s scope; omit for its selected brand."
},
"url": {
"type": "string",
"description": "Exact URL in the saved map; required for page/keywords/connections."
},
"area": {
"type": "string",
"enum": [
"SEO",
"GEO",
"both"
]
},
"direction": {
"type": "string",
"enum": [
"in",
"out",
"both"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 25
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 100000,
"default": 0
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 90,
"default": 30
}
},
"additionalProperties": false
}⚪record_page_deployment(workspace, documentId, deployedAt, idempotencyKey, reviewed)
Declare that reviewed saved changes were applied to their original mapped page. Queues one bounded public HTML check, not CMS publishing, paid research or proof of ranking lift.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"documentId": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"deployedAt": {
"type": "string",
"minLength": 20,
"maxLength": 40,
"description": "Actual applied ISO8601 timestamp with timezone, within the last 90 days. Server validates calendar and time window."
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{12,128}$",
"description": "Reuse the same key and original declaration after an uncertain response."
},
"reviewed": {
"type": "boolean",
"const": true,
"description": "Confirm editorial review and that changes have actually been applied."
}
},
"required": [
"documentId",
"deployedAt",
"idempotencyKey",
"reviewed"
],
"additionalProperties": false
}🟢read_page_deployments(workspace, documentId, deploymentId)
Read saved deployment declarations and public HTML observations. Never fetches a page or starts work.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"documentId": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"deploymentId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
}
},
"additionalProperties": false
}🟡prepare_page_changes(workspace, actionId, idempotencyKey)
Queue a source-grounded draft for one saved mapped action. May consume one draft and up to $0.02 planned provider spend inside the existing subscription budget. Requires an idempotency key. Does not publish or send.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"actionId": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"idempotencyKey": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{12,128}$",
"description": "Reuse the same key and original arguments after an uncertain response."
}
},
"required": [
"actionId",
"idempotencyKey"
],
"additionalProperties": false
}🟢read_preparation_job(workspace, jobId)
Read a saved preparation job status; never schedules work or calls paid providers.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"jobId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
}
},
"required": [
"jobId"
],
"additionalProperties": false
}🔴cancel_preparation_job(workspace, jobId)
Cancel a queued job. Running work can already have provider cost or a completed artifact; cancellation cannot guarantee a refund or rollback.
Input Schema
{
"type": "object",
"properties": {
"workspace": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"jobId": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
}
},
"required": [
"jobId"
],
"additionalProperties": false
}Community
Evidence