Documentation
MCP tools
The tool reference for any agent that talks to Sitearc over MCP.
Sitearc runs an MCP server at https://app.sitearc.ai/mcp. It gives your
agent access to site context, research, feedback and the tools listed below.
A person still approves proposals.
Connecting
For Claude Code, the plugin is the easy path. See the plugin doc.
For any MCP client, add the hosted server:
claude mcp add --transport http sitearc https://app.sitearc.ai/mcp
The OAuth flow
The server is an OAuth resource, and the flow is standard.
- Your client hits
/mcpwith no token and getsinvalid_tokenback. - It reads the resource metadata and finds the authorization server.
- It registers itself dynamically, if it has not already.
- You sign in at app.sitearc.ai and approve.
- The client receives a token and refreshes it from then on.
Two scopes are requested. mcp grants tool access and is required. The
offline_access scope is what lets the client refresh without sending you
back to a browser.
Your grant is per client. Revoke it from your account and that client stops working, with no effect on the others.
Wire names
Inside Claude Code and most MCP clients, a tool is namespaced by its server. The wire names look like this:
mcp__sitearc__get_project_brief
mcp__sitearc__research_keywords
mcp__sitearc__ship_experiment
The short name is the tool’s own. The prefix is what your client adds.
The loop
| Tool | Purpose |
|---|---|
get_project_brief |
The session’s starting point: connections, learnings, running experiments, confounders |
get_budget_status |
Remaining spend before anything metered is called |
link_repo |
Connect the project to the repository a change lands in |
create_proposal |
A change with evidence and a prediction, for a person to approve |
list_proposals |
The queue for a project |
get_proposal |
One proposal’s change, evidence and status |
resolve_preview_url |
The preview deployment a proposal’s pull request produced |
ship_experiment |
Ship an approved proposal and open its measurement window |
list_experiments |
What is running and when each window closes |
get_experiment |
One experiment, its prediction and its state |
get_measurements |
The collected rows for an experiment, cohort and holdout |
conclude_experiment |
Apply the standard and return a verdict |
record_confounder |
Anything else that moved during a window |
list_confounders |
Confounders recorded against a project |
record_learning |
Write a learning at the tier its evidence earns |
search_learnings |
What this project has already proved, with tiers |
Projects and memory
| Tool | Purpose |
|---|---|
whoami |
Who the token belongs to, and what it can reach |
list_projects |
Every site in the organisation |
create_project |
Add a site |
get_project_context |
Shared business memory: goal, positioning, key pages |
update_project_context |
Write that memory back |
Keyword and SERP research
| Tool | Purpose |
|---|---|
research_keywords |
Discover keyword ideas from seed topics |
get_keyword_metrics |
Volume, difficulty and intent for named keywords |
save_keywords |
Save and tag terms worth targeting |
list_saved_keywords |
The saved set for a project |
get_serp_results |
The live result page for a query |
find_serp_competitors |
Who else ranks across a keyword set |
get_domain_overview |
A domain’s organic footprint |
get_domain_keyword_suggestions |
Keywords a domain could plausibly target |
Rank tracking
| Tool | Purpose |
|---|---|
create_rank_tracker |
Set up tracking for a project |
get_rank_tracker |
Read a tracker and its latest positions |
add_rank_tracking_keywords |
Add terms to a tracker |
remove_rank_tracking_keywords |
Drop terms from a tracker |
estimate_rank_tracker_cost |
What a run will spend, before it spends it |
run_rank_tracker |
Run the tracker now |
get_ranked_keywords |
Everything a domain currently ranks for |
Backlinks
| Tool | Purpose |
|---|---|
get_backlinks_overview |
Referring domains, authority and totals |
get_backlinks_profile |
The individual links, with anchors and targets |
Site audits
| Tool | Purpose |
|---|---|
run_site_audit |
Start a technical crawl and audit |
get_audit_status |
Whether the audit has finished |
get_audit_issues |
The findings, grouped and prioritised |
get_audit_pages |
Per-page results from the audit |
Content engine
| Tool | Purpose |
|---|---|
create_content_brief |
Add a keyword opportunity to the backlog; a person approves it before anything is written |
list_content_backlog |
The briefs waiting on a person, with target keyword, volume and difficulty |
generate_content_draft |
One model call writes a draft for an approved brief; spends credits |
get_content_document |
One document in full: body, metadata, state, review notes, versions, change rounds |
revise_content_document |
A new version with a mechanical fix; stays in review |
submit_content_for_approval |
Put a verified draft in front of a person; approves nothing |
request_content_changes |
Send a document awaiting approval back with a numbered round of notes |
publish_content |
Publish an approved draft as a WordPress draft or a pull request; never live |
Brand and compliance
| Tool | Purpose |
|---|---|
get_brand_profile |
The versioned brand document: identity, vocabulary, colors and type by role, rules |
propose_brand_patch |
File a change to the brand document for a person to apply; changes nothing itself |
get_compliance_profile |
Banned words, banned claims, hedging rules and name styling; optionally check a text |
Site crawl
| Tool | Purpose |
|---|---|
discover_urls |
Every same-origin URL from robots.txt, the sitemaps and the home page navigation |
fetch_page |
One URL’s raw HTML and redirect chain; a JavaScript render spends credits |
extract_page |
What an SEO review reads from one page: title, meta, headings, body, links, images, schema |
crawl_site |
A breadth-first crawl bounded by the plan’s page cap; rendered pages spend credits |
Recommendations
| Tool | Purpose |
|---|---|
list_recommendations |
The project’s queue of drafted changes waiting on a person |
get_recommendation |
One recommendation in full: evidence with tiers, the change, the prediction, the cost |
update_recommendation_status |
Accept or dismiss; dismissing needs a reason, accepting creates a proposal |
claim_work |
Claim accepted or in-progress queue work for a short lease |
renew_work_claim |
Renew the lease before expiry; stop work if renewal fails |
release_work_claim |
Release a live claim without marking the work shipped or approved |
submit_work_for_review |
Submit structured work after a live claim; queues human review only |
get_work_review |
Read submitted revisions and human decisions for one recommendation |
verify_work_revision |
Save GitHub evidence for one human-approved revision |
list_work_verifications |
Read saved provider checks for one approved work revision |
Submitted work keeps up to fifty revisions. Each artifact is capped at
128 KiB. submit_work_for_review needs a fresh requestId UUID for new work.
Reuse the same requestId only when retrying the exact same artifact.
get_work_review may show currentDecision and prior decisions. Those are
human decisions already recorded in the dashboard. The returned effects fields
mean this tool did not approve, verify, deploy, or ship the work. They do not
state whether some other path deployed it.
verify_work_revision records provider evidence only. It can read the PR
head, merge state, merge commit, deployment state and preview match. It does
not approve, merge, deploy, publish or ship anything.
list_work_verifications reads saved checks. It does not contact GitHub, use
credits or change the work.
Feedback sessions
| Tool | Purpose |
|---|---|
create_review |
Open a shareable feedback session over pages of a site and return its link |
list_review_comments |
Every comment on a session, public and internal, for triage |
resolve_review_comment |
Mark a comment resolved, optionally queueing it as a recommendation |
Connected sites
| Tool | Purpose |
|---|---|
wp_list_posts |
Posts and pages on the connected WordPress site, with status and modified date |
wp_get_post |
One post or page: title, body, excerpt, slug and SEO meta |
wp_update_post |
Rewrite the title, body, excerpt or slug of an existing post; never changes publication status |
wp_create_draft |
A new post or page saved as a draft for a person to review |
wp_set_seo_meta |
The SEO title and meta description, through the installed SEO plugin |
wp_upload_media |
Add an image to the media library, with alt text |
github_open_pull_request |
Open a pull request on the connected repository for a code change |
Search Console and Analytics
| Tool | Purpose |
|---|---|
get_search_console_performance |
Clicks, impressions, position and queries |
inspect_urls |
Google’s own index status for specific URLs |
get_search_opportunities |
Pages close to ranking, from your own data |
get_google_analytics_organic_overview |
Organic sessions and their shape |
get_google_analytics_organic_landing_pages |
Which pages organic traffic lands on |
get_google_analytics_page_performance |
Engagement per page |
get_google_analytics_traffic_acquisition |
Where the traffic came from |
get_google_analytics_key_events |
Conversions, as your property defines them |
get_google_analytics_ecommerce_performance |
Revenue and product performance |
get_google_analytics_site_search |
What people search for on your own site |
get_google_analytics_audience_breakdown |
Who is arriving, by dimension |
get_google_analytics_measurement_health |
Whether the property is measuring correctly |
Local presence
| Tool | Purpose |
|---|---|
search_local_businesses |
Find a business in Google’s local index |
get_business_profile |
The profile as Google holds it |
get_business_reviews |
Reviews on the profile |
get_business_updates |
Posts on the profile |
get_google_business_questions |
Questions asked on the profile |
list_business_categories |
The category taxonomy to choose from |
get_local_serp_results |
The local pack for a query and place |
get_local_rank_grid |
Maps visibility across a geography |
Answer engine visibility
| Tool | Purpose |
|---|---|
get_llm_prompts |
Questions assistants are answering in your topic |
get_llm_visibility |
Whether a site is cited in those answers |
What the tools refuse
Refusals are in the code, not in a prompt. There are six on the shipping path.
- A proposal that is not approved.
- A proposal marked approved with no recorded decider.
- A proposal that has already shipped.
- A measurement window that disagrees with the prediction.
- A failed preview audit.
- No measurement source connected to read the result.
Two more sit earlier. create_proposal refuses a proposal carrying no
evidence. It also refuses a new_page proposal outright.
And one is structural. There is no approval tool, and none can be added by accident. The module that records a decision is not importable from the agent-facing code. A test fails if it becomes so.
conclude_experiment has no field for a verdict. An agent cannot state its
own outcome, only ask for one.
Rate limits
Requests per minute are counted per organisation, not per token.
Free allows thirty MCP requests per minute.
Pro has defined allowances.
The in-app chat is being built. Current free chat budget is eight tool calls per turn.
A capped turn should stop and say so.
Cost
Research tools spend credits. The server tells every agent to ask you before a planned batch over 2,000 credits.
get_budget_status is free and reports what is left.
Website forms
| Tool | Purpose |
|---|---|
list_forms |
Find forms for a site before creating another |
create_form |
Save a field definition and return its public POST endpoint |
get_form |
Read the saved fields, allowed origin, status and retention |
list_form_destinations |
Read configured email and webhook destinations |
create_form_destination |
Add a future email or webhook notification destination |
disable_form_destination |
Stop future queued delivery to one destination |
submit_test_form |
Save a labeled test response and queue real test notifications |
verify_form_receipt |
Check that a real response was saved and read notification states |
Install the returned endpoint in your website source, then submit a response
through the website. Pass its receipt ID to verify_form_receipt. A saved
configuration alone does not prove the form works.
submit_test_form checks backend validation and storage. It does not visit your website or check its installed form.
Use synthetic contents and reuse the idempotency key when retrying.
Configured destinations can receive real test notifications. Ask before sending a notification test.
Webhook setup returns its signing secret once. Save it in the receiving service’s secret store, never in website source.
The verification result separates saved responses from notifications.
provider_accepted means the destination accepted the request. It does not
prove that an email reached a person’s inbox. Pending deliveries need another
check after the background job runs.