https://mcp.attensira.com/mcp over Streamable HTTP. Every tool takes an optional project; omit it and your credential’s own workspace is used. Seventeen tools are read-only, three spend credits, and three delete data permanently. This page lists every tool with its parameters, defaults, and return shape.
Sixteen of these tools have an exact twin in the REST API; the rest are MCP-only for now, and each says so below. Use MCP when an assistant is doing the work; use REST when your own code is.
Which credential each tool needs
A workspace API key is minted as read or read and write. Read tools work with either; the tools in the left column need a read-and-write key. Calling one with a read key returns403 with type: "forbidden" and the challenge WWW-Authenticate: Bearer error="insufficient_scope", scope="write" — the credential is valid, it simply may not do this. Scope is fixed when the key is minted and cannot be widened: mint a read-and-write key and swap it in.
An OAuth connection always carries read and write. Approving a client grants it your organisation, and there is no read-only consent — the scopes in the token are the authorization server’s own (openid, profile, email, offline_access, user:org:read), none of which names an Attensira permission. Restrict a connected assistant by what you ask it to do, or by the tool allow-list your client offers, not by scope.
get_account returns the scopes in force, so call it first from a new integration rather than discovering the gap on a failed write.
One tool is key-only:
get_ai_traffic_install hands back your workspace’s signing secret, and a signed-in connection is refused there on purpose — a consented OAuth token must never be able to read one credential out and turn it into another. Call it with an API key.Before you start: what costs money and what destroys data
Three tools spend credits and three are destructive. Nothing else on this page produces a bill or erases history.The
get_analytics area values for a topic rollup and a per-surface rollup are topic and platform. A platform is a stable identifier for an AI answer surface (ChatGPT, Perplexity, Google AI Overviews, Claude, Gemini) that survives the underlying model being replaced, so two windows a year apart stay comparable on the same key. The older wire words group and engine are no longer accepted.Reading what comes back
Every rate is{value, n} and every delta is {value, real}. A value of null means not measured; 0 with n > 0 is a measured zero. Per-platform metrics live in a platforms map keyed by platform, and each entry carries {tracked, readable}: tracked: false means your plan does not include that platform, so it was never queried, and readable: false on a tracked platform means nothing came back in the window that could be scored. Treating either as 0% invents a failure that did not happen.
Every ranked list carries id and label on each row, so the row can be handed straight to the detail tool that takes the id. For the full treatment of null against zero, small n, and when a delta is worth acting on, read Reading the numbers.
Find and measure
Ask these tools the questions you would ask an analyst: “which prompts am I losing on Perplexity?”, “what changed since last week?”, “which sources decided the answers?”, “does anyone cite our pricing page?“.search
Read-only. No credits.
Returns
total, has_more and hits. Each hit carries type (prompt, page, automation or session), id, title and, where there is one, a snippet. A hit whose label starts with the query ranks above one that merely contains it; at equal footing prompts come before pages, then automations, then sessions. Every string on a hit is capped at 400 characters, so a complete model answer can never come back through search — for the answers themselves, use answer_history or answer_slice.
Page on has_more. total counts what matched up to the session-search ceiling, so it is a floor rather than a grand total.
get_analytics
Read-only. No credits.
The envelope is
{area, days, window, order, filter, rows, total_rows, truncated} plus the area’s own headline numbers. total_rows is how many rows survived the filter and truncated whether limit cut them, so a short list can be told from a cut one. Every row carries id, label, the rates that apply to the area and, where the area has one, a platforms map.
Response — area: prompt
area: "bot" rows carry visits, pages, purpose_mix, last_seen (null when it never came) and agents instead of the rate fields, and answer with a note when no edge collector has ever reported — zero rows there means uninstrumented, not uncrawled.
area: "visibility" returns share of voice per platform — the fraction of runs on that platform that named you, not a share of a category that sums to 100%. Competitor rates (area: "competitor") use the same denominator as yours, so they do not sum to 1 either.deciding_sources
Read-only. No credits. MCP-only.
get_analytics with area: "source", which ranks by citations, this ranks by influence over a decision. See Deciding sources.
Returns
groups, most influential first, one per prompt × platform × surface. Each group carries a label in words, n (successful answers read), present (whether any source in the top ten is yours), a recommendation, and sources ranked by weight: domain, url (the exact page when one carried it, else null), citations, share, present, and action — the next move in words, such as “get listed” or “fix your own page”.
win_plan
Read-only. No credits. MCP-only.
deciding_sources says which those are.
Returns
prompt, n, evidence (measured, published or hypothesis), steps in order — each with a title, a why sentence built from the readings, a target page or domain (or null when it is your own site generally), the platform it acts on and a credits_estimate — plus rereads_at and credits_estimate for the whole plan. Nothing here claims movement: the footer says so until a re-read has proven a change.
get_prompt
Read-only. No credits.
Returns
id, text, topic (null when unfiled), country (null for the workspace default), visibility, citation, delta, position, answers_read, failures, a platforms map, competitors (each with name and a rate on this prompt’s own answers), sources (each with url, domain and a rate), and why — the standing in sentences, each built from a number on the same response. Passing exact text saves a search round-trip when you already know the wording; inexact text will not match.
get_page
Read-only. No credits.
get_analytics with area: "bot"; a model can only cite a page it has fetched, so that is worth checking before rewriting content.
Returns
url, title (null when it could not be read), citations and citation as a rate on total_answers, a platforms map whose entries carry the page’s citation rate on that platform’s own answers, prompts — each with id, text, citations and a rate on that prompt’s answers — and in_sitemap. The delta is {value: null, real: false}: the page fold has no earlier window to compare against, and the contract’s word for that is “no basis”, not a number.
The receipts
The numbers above are folds over stored answers. These four tools hand back the rows themselves, verbatim, which is whatrecord_observation cites and what a person asks for when a number looks wrong. All four are MCP-only.
answer_history
Read-only. No credits. MCP-only.
get_prompt.
Returns
answers, readings (on this page), has_more and next_cursor (null at the end). Each answer carries reading_id and sample (its index within the reading), prompt_id and prompt, platform, surface (consumer or api), country, day, answered_at, text verbatim, text_bytes, truncated, mentioned, cited_own_domain, citations in order (url, domain, position), competitors_named, and failed. Answers over 8 KB are cut on a character boundary and flagged truncated: true, with text_bytes carrying the full length. A failed sample is listed with failed: true and an empty text, never dropped: a bad week must not look like a quiet one.
answer_slice
Read-only. No credits. MCP-only.
Same row shape and the same 8 KB cut as
answer_history. When an answer-level term is set (surface, competitor_named, cited_domain, brand_named), only the samples that satisfy every term come back, and failed samples are excluded — a sample that did not happen cannot be judged. With only reading-level terms (platforms, country, dates) every sample of the selected readings is returned, failed ones flagged.
citation_timeline
Read-only. No credits. MCP-only.
get_analytics with area: "source" ranks, kept day by day.
Returns
domain, url (set when the question was one page), total, prompts, and series — one entry per platform, most cited first, each with points for every day the window touches: day, citations, mean_position (null when nothing that day carried a position) and prompts. A zero day is a real zero.
page_history
Read-only. No credits. MCP-only.
Returns
url (normalised), known (whether the page is in the workspace’s inventory), versions and snapshots oldest first — each with id, first_seen_at, status, title, description, word_count, json_ld (present, absent or not_captured), canonical, robots, changed_bits and changes, the fields that moved since the version before (field, from, to). Metadata on a version taken before it was recorded reads not_captured, and is never reported as a change. A page on another domain is refused with a 404.
Track
These tools change what gets measured. Reach for them when the answer is “we are not tracking the right things”: “start watching these five buying-intent prompts”, “stop wasting a slot on that one”, “add the competitor who keeps showing up in answers”.add_prompts
Adds one or more prompts to the workspace. From the next daily run, each new prompt is read across every platform your plan tracks. There is noplatform argument — which surfaces a prompt runs on comes from the plan, not from the caller.
Returns
added — every prompt now being tracked, with id and text. A prompt that was already tracked comes back in added too, with its existing id, so a repeated call is idempotent all the way out; skipped is empty today. credits_spent and credits_remaining are null: tracking is charged as the prompts are read, not on this call. Your plan caps how many prompts you can hold at once, and a paste that would exceed it is refused with a 409 naming how many slots remain — see Plans.
remove_prompt
Stops tracking a prompt and frees its slot. Confirm the prompt withget_prompt first — this cannot be undone.
Returns
id and removed: true. No new readings are collected for that prompt afterwards, so any trend line for it ends on the day you remove it.
add_competitor
Needs a read-and-write key, but does not spend credits.
Returns the competitor:
id, domain, name. Competitor share of voice uses the same denominator as your own — successful runs naming the brand over all successful runs — so adding a competitor never changes your numbers.
remove_competitor
Stops scoring a rival. Past readings keep what they already recorded, so history does not move — the rival simply stops being scored from here on.
Returns
id and tracked: false.
Inbox
Everything waiting on a human. Natural questions here sound like “is anything blocked on me?”, “why has nothing happened since Tuesday?”, “I connected GitHub — clear that off my list”. See Inbox for what ends up there.The four inbox tools are MCP-only today; the REST API does not reach the inbox yet.
list_inbox
Read-only. No credits.
Each row carries
type — work_item, ask or task — plus title, reason, session_id and updated_at. type decides how it is acted on: a task is resolved with resolve_inbox_task, an ask is answered in its own session (session_id), and a work_item is approved or declined with the two tools below.
Worth calling before concluding the agent is idle. A workspace with rows here is one where nothing is moving until somebody answers.
resolve_inbox_task
Needs a read-and-write key, but does not spend credits.
done means the thing the agent needed has actually been handled — the integration connected, the decision made — not that you plan to handle it. Nothing is queued to run when you send it.
approve_work_item
Needs a read-and-write key, but does not spend credits.
type is work_item is approved this way.
Idempotent: approving twice approves once, so a retry after a timeout is safe. Approving is the customer’s decision to make, not one to infer from the row.
decline_work_item
Needs a read-and-write key, but does not spend credits.
The reason is required and is the point of declining rather than ignoring: it is what stops the same proposal coming back.
wrong means the proposal is incorrect, not_now right idea wrong time, already_done handled elsewhere, never_touch do not propose this again for this page or topic.
Automations
Automations are scheduled work: a weekly digest, a recurring audit, a check that runs after every deploy. Natural questions here sound like “email me a summary every Monday”, “what is already scheduled?”, “run last week’s report again now”.list_automations
Read-only. No credits.
automations: each with id, name, instruction, trigger, allowed tools, status (active, paused, or done), timezone, run_at_minute, and last_run_at (absent when it has never run). Takes no parameters.
get_automation
Read-only. No credits.
latest_run ({id, status, state}, or null when it has never run) — so “did my Monday report run?” costs one call, not two.
create_automation
Needs a read-and-write key. Creating costs nothing; each run it triggers does.
Returns the created automation with its id. Creation is free; every scheduled execution spends credits like a manual run.
run_automation
Triggers an automation immediately, outside its trigger. Returns a session handle —session_id, status and poll_after_ms — to poll with get_session, not the finished result.
delete_automation
Permanently deletes an automation and its schedule — this cannot be undone. Its past runs are sessions and survive. Confirm it withget_automation first.
Returns
id and deleted: true.
update_automation
Needs a read-and-write key, but does not spend credits. MCP-only.
Pausing is how a schedule is stopped without losing it — deleting is the one that cannot be undone. Returns the automation in the shape shown under
list_automations.
Agent
The agent tools run a chat inside your workspace, with your tracking data in reach. Use them for questions that need reasoning across several slices — “why did our share of voice drop on Perplexity last week?”, “draft a plan for the three prompts we lose most” — rather than for numbers you can pull directly withget_analytics.
ask
Open-ended investigation the other tools cannot answer — why a prompt is losing, what to change on a page — run by an agent that crawls pages, audits them as a model sees them, and searches the web. Tryget_analytics, deciding_sources, win_plan, get_prompt or get_page first: those are free and immediate, this costs credits and takes time.
Returns
session_id, status (running at first — that is the success case, not an error), answer (null until complete) and poll_after_ms. Wait that long, then poll get_session with the returned id until status is complete.
The agent runs on an agent model — the LLM powering the chat. That is a different thing from a tracked platform, which is the answer surface Attensira reads on your behalf. Changing your agent model does not change what is measured.
get_session
Read-only. No credits.
ask or run_automation: its status and, once finished, its answer. Use this to poll async work.
Returns
id, status (complete, running, failed), state (the engine’s own finer word — a run parked on a question for you reads awaiting_person under a running status), answer (the agent’s last message once complete; null while running or on failure), and events — present only when requested, each with a type such as tool.start or text.delta and the fields of that event — the way to see which tools the agent called and with what arguments.
Account and settings
get_account
Read-only. No credits.
project parameter takes, to confirm which workspace the credential points at, and before reporting any per-platform number: platforms is the authority on which platforms were queried at all, so a platform absent from it was never measured rather than measured at zero.
Returns org (id), project (id, name, domain — the workspace this call resolved to), workspaces (every workspace in the org, each with id, name, domain), credits (available, available_usd, held_units; absent when the balance could not be read, never a zero standing in for an outage), scopes — what this credential may do — and platforms.
project is null when the organisation has several workspaces and the call named none. That is the answer rather than an error: workspaces carries the ids, and every other tool then needs an explicit project. platforms is empty in that case too, because platforms belong to a workspace rather than to the organisation. This is the only tool that answers without a workspace, so it is always the right call when another tool asks you to name one.
get_brief
Read-only. No credits. MCP-only.
Returns
date, subject, text (the brief itself, as the email body), and sections with needs_you (at most three rows, each with an inbox id and title). It reports counts, never a day-over-day comparison, until a seven-day window exists, and says “no proven change yet” until a verified re-read.
get_ai_traffic_install
Read-only. No credits. Key-only.
connect_github
Needs a read-and-write key, but does not spend credits.
url — the App install link, and nothing else. GitHub hands back a user-to-server code only to a browser that completes the install, so the connection exists only once a person has followed the link. Each call mints a fresh single-use link, so fetch a new one rather than reusing an old one.
update_settings
Needs a read-and-write key, but does not spend credits. MCP-only.
At least one field is required. Returns the settings in force:
unattended_mode, the effective act_path_allowlist, act_paths_are_default, publish_without_approval and send_without_approval.
Memory
Two writes into what the workspace knows about itself. See Knowledge and skills and What we know.record_observation
Needs a read-and-write key, but does not spend credits. MCP-only.
Ids are resolved against the workspace before anything is stored, so a guessed one is refused rather than remembered. Returns the observation with its
id, statement and n.
write_skill
Needs a read-and-write key, but does not spend credits. MCP-only.
Returns the skill with its
id, title and kind.