Tools
Reference for every tool exposed by the Temso MCP server.
Most tools are read-only. A set of write tools can also modify your project's configuration — these require an API key with the mcp:write scope (see Write tools below). Your assistant picks the right tool from your question — this reference tells you what's available and how each tool behaves.
Project selection
Every tool except list-projects takes an optional projectId:
| Parameter | Type | Description |
|---|---|---|
projectId | string (optional) | Project to query. Can be omitted when your connection has access to exactly one project; otherwise the assistant must call list-projects first and pass an ID. |
list-projects
Lists the projects your connection can access, with their IDs, names, and types. The assistant calls this first when it doesn't know which project ID to use. No parameters.
Each project has a type:
project— a brand Temso tracks daily.pitch— a one-time AI visibility snapshot of a prospective client. Pitches also returnsnapshotRunStartedAt(when the latest snapshot run started) andrerunsLeft.
Pitch projects
A pitch project is a one-time snapshot, not an ongoing tracker. The MCP server adapts its tools to that:
- The project's own brand is the prospect, not your brand.
- Analytics tools return only the latest snapshot run and ignore
days,startDate, andendDate. There are no trends or previous periods. - Analytics results for a pitch include a short note that tells the assistant these rules.
- Backlink, technical audit, content gap, content piece, action planner, tracked URL, and AI crawler traffic tools return an error for pitches, because a pitch does not offer these features. Convert the pitch into a full project on its Pitch page to unlock them.
- Prompt changes made with
create-prompts,update-prompts, orarchive-promptsrun only when you start a rerun on the Prompts page in Temso.
fetch-pitch-snapshot
Fetches how far the latest snapshot run of a pitch has come: its status (collecting, ready, partial, or failed), the answers per AI platform against the target, the number of active prompts, and the reruns left. Takes only projectId.
fetch-pitch-guide
Fetches the AI-written selling points of a pitch, strongest first. Each point has a hook (one sentence to the prospect) and its proof (the data behind it). The Pitch page in Temso shows the same points. Returns no points while the snapshot is still collecting. Takes only projectId.
Analytics tools
All analytics tools share these parameters on top of projectId:
| Parameter | Type | Description |
|---|---|---|
days | number (optional) | Days to look back from today. Default: 14. Ignored when startDate and endDate are set, and for pitch projects. |
startDate | string (optional) | Start date in ISO format (YYYY-MM-DD). Use together with endDate. |
endDate | string (optional) | End date in ISO format (YYYY-MM-DD). Use together with startDate. |
languages | string[] (optional) | Filter by language codes, e.g. ["en", "de"]. |
countries | string[] (optional) | Filter by country codes, e.g. ["US", "DE"]. |
personaIds | string[] (optional) | Filter by persona IDs. |
offeringIds | string[] (optional) | Filter by offering IDs. |
promptIds | string[] (optional) | Filter by prompt IDs. |
models | string[] (optional) | Filter by AI model names. |
Tools marked paged additionally accept:
| Parameter | Type | Description |
|---|---|---|
limit | number (optional) | Max results to return. |
sortBy | string (optional) | Field to sort by. |
sortOrder | asc | desc (optional) | Sort direction. |
fetch-brand-rankings
Fetches AI visibility brand rankings within a time range — visibility, source presence, mentions, responses, and share of voice per brand, for your own brand and competitors. Paged, default limit 20.
fetch-share-of-voice
Fetches the share of voice breakdown showing your brand versus competitors within a time range.
fetch-performance-breakdown
Fetches your brand's AI visibility performance grouped by a dimension.
| Parameter | Type | Description |
|---|---|---|
dimension | language | country | offering | persona | models (required) | Dimension to group results by. |
fetch-prompt-analytics
Fetches per-prompt performance analytics for your own brand within a time range. Paused prompts are excluded.
fetch-brand-perception
Fetches brand perception analytics — how brands are described in AI answers (e.g. reliable, innovative, affordable).
| Parameter | Type | Description |
|---|---|---|
mode | total | byBrand (optional) | total for your own brand only, byBrand for a comparison across all brands. Default: byBrand. |
fetch-sentiment
Fetches own-brand sentiment analytics from Perception > Sentiment, including positive, neutral, and negative shares plus a breakdown by model or another dimension.
| Parameter | Type | Description |
|---|---|---|
dimension | language | country | offering | persona | models (optional) | Dimension to group the sentiment breakdown by. Default: models. |
fetch-sentiment-sources
Fetches source pages for a selected sentiment bucket from Perception > Sentiment > Sources. Paged, default limit 20.
| Parameter | Type | Description |
|---|---|---|
sentiment | positive | neutral | negative (required) | Sentiment bucket to fetch sources for. |
fetch-perception-sources
Fetches source pages for a selected brand-perception attribute from Perception > Attributes > Sources. Use fetch-brand-perception first to discover available attribute names. Paged, default limit 20.
| Parameter | Type | Description |
|---|---|---|
attribute | string (required) | Perception attribute, e.g. reliable, innovative, or affordable. |
fetch-top-domains
Fetches the top cited source domains with presence, brand mentions, category, and model coverage within a time range. Paged, default limit 20, sorted by response count descending.
fetch-source-urls
Fetches individual source URLs with citation analytics within a time range. Paged, default limit 50.
| Parameter | Type | Description |
|---|---|---|
domainContains | string (optional) | Only return URLs whose domain contains this text. |
urlContains | string (optional) | Only return URLs containing this text. |
minCited | number (optional) | Minimum cited percentage, from 0 to 100. |
fetch-cited-pages
Alias of fetch-source-urls for cited-page/source-URL analytics — same parameters. Paged, default limit 50.
Backlink tools
Read the project's backlink profile: links, referring domains, and the competitor link gap. Backlink data comes from scheduled or manual scans — if a project has never completed one, fetch-backlink-overview returns neverSynced: true and the list tools return nothing.
fetch-backlink-overview
Fetches the backlink profile summary: sync status (last sync, cooldown, warnings) plus KPIs — domain rank, backlinks, referring domains, AI-cited domains, and new/lost counts. Takes only projectId.
fetch-backlink-timeseries
Fetches the backlink profile history: one snapshot per sync with rank, backlinks, referring domains, AI-cited domains, and new/lost counts.
| Parameter | Type | Description |
|---|---|---|
months | number (optional) | Months of history, 1 to 60. Default 12. |
fetch-backlinks
Lists individual backlinks (referring page → target URL) with anchor, referring-domain rank, dofollow flag, and the AI signal on the referring domain. Paged, default page size 20.
Each row carries citedInAiAnswers (the referring domain was named outright as a source) and appearedAsAiSource (it fed an AI answer at all). The second includes the first — it is the wider signal, not the uncited remainder. The response's totalMatchingFilters counts the rows matching the filters you passed, not the size of the whole profile.
| Parameter | Type | Description |
|---|---|---|
dofollow | boolean (optional) | Only dofollow (true) or only nofollow (false) links. |
status | live | new | lost (optional) | live = currently seen, new = added by the latest successful scan, lost = gone. |
aiCited | boolean (optional) | Only referring domains that AI answers cite (or don't). |
search | string (optional) | Substring match on the referring domain, URL, or anchor. |
sortBy | domainFromRank | firstSeenAt | lastSeenAt (optional) | Sort field. Default domainFromRank. |
sortDir | asc | desc (optional) | Sort direction. Default desc. |
page | number (optional) | 1-based page number. Default 1. |
pageSize | number (optional) | Rows per page, 1 to 100. Default 20. |
fetch-backlink-domains
Lists referring domains with their rank, backlink and dofollow counts, and their AI signal. Takes the same filters as fetch-backlinks, except sortBy is rank | backlinksCount | firstSeenAt (default rank). Paged, default page size 20.
Each row carries citedInAiAnswersCount (AI answers that named the domain outright) and appearedAsAiSourceCount (AI answers it fed at all). The second already includes the first. As above, totalMatchingFilters is scoped to the filters you passed — do not report it as the project's referring-domain total.
fetch-backlink-gap
Lists domains that link to the tracked competitors but not to this project — link-building prospects, sorted by how many competitors they link to. Paged, default page size 20.
| Parameter | Type | Description |
|---|---|---|
search | string (optional) | Substring match on the prospect domain. |
minOverlap | number (optional) | Only domains linking to at least this many competitors. Capped at gapCompetitorsUsed. |
sortDir | asc | desc (optional) | Sort direction on overlap. Default desc. |
page | number (optional) | 1-based page number. Default 1. |
pageSize | number (optional) | Rows per page, 1 to 100. Default 20. |
gapCompetitorsUsed lower than gapCompetitorsTotal means the gap covers only
a subset of your tracked competitors — the fan-out is capped by your plan and by
the month's remaining scan allowance.
Search tools
Read organic search performance from the project's connected Google Search Console or Bing Webmaster Tools account (Project Settings › Integrations). Every result carries:
| Field | Description |
|---|---|
source | The account the numbers come from. |
connectedSources | Every search account on the project that is active and syncs at least one property. |
properties | The verified properties (Google) or sites (Bing) the account syncs. Numbers are aggregated across all of them. |
range | The date window the numbers cover. |
dataThrough | The latest day with synced data in the table this tool reads (each table syncs on its own job), or null before its first sync lands. |
warning | Present when nothing has been synced yet, or when dataThrough ends two or more days before the window. Days after dataThrough are missing, not zero. |
The tools return an error when no account is connected, when the account is broken and needs a reconnect, or when it has no verified property selected.
All search tools share these parameters on top of projectId:
| Parameter | Type | Description |
|---|---|---|
source | google | bing (optional) | Which account to read. Default: google when connected, otherwise bing. |
days | number (optional) | Trailing window in days. Default 28. The window ends 3 days ago because search data lags. |
startDate | string (optional) | Start date (YYYY-MM-DD). Overrides days. |
endDate | string (optional) | End date (YYYY-MM-DD). Default: 3 days ago. |
searchType | web | image | video (optional) | Search type. Default web. Google only. |
country | string (optional) | Country filter as Search Console reports it: lowercase ISO 3166-1 alpha-3, e.g. usa. Google only. |
device | DESKTOP | MOBILE | TABLET (optional) | Device filter. Google only. |
Bing Webmaster Tools data has no search-type, country, or device dimensions and
no site-level average position. Tools return an error for those filters on Bing,
and fetch-search-performance reports position: null with a note for unscoped
Bing totals.
fetch-search-performance
Total clicks, impressions, CTR, and average position for the range, the daily series, and site-wide keyword counts per ranking-position bucket (keywordsByPosition).
| Parameter | Type | Description |
|---|---|---|
urlSubstring | string (optional) | Scope the totals and series to pages whose URL contains this text. Omits keywordsByPosition. |
fetch-search-keywords
Top keywords ordered by impressions, with clicks, CTR, and average position. Default limit 50, max 500. Raise the limit before ranking keywords by clicks.
| Parameter | Type | Description |
|---|---|---|
querySubstring | string (optional) | Only keywords containing this text. |
limit | number (optional) | Max keywords to return. |
offset | number (optional) | Rows to skip for paging. |
fetch-search-pages
Top pages ordered by impressions, with clicks, CTR, average position, and the page title when known. Default limit 50, max 500. Raise the limit before ranking pages by clicks.
| Parameter | Type | Description |
|---|---|---|
urlSubstring | string (optional) | Only pages whose URL contains this text. |
limit | number (optional) | Max pages to return. |
offset | number (optional) | Rows to skip for paging. |
fetch-search-movements
Winners and losers versus the previous window of equal length: the top 10 keywords or pages that gained clicks, declined, are new (impressions for the first time), or were lost (no impressions any more), plus counts per bucket and the previousRange.
| Parameter | Type | Description |
|---|---|---|
dimension | keyword | page | Compare keywords (queries) or pages (URLs). |
fetch-search-quick-wins
Keywords already ranking in a position band, ordered by impressions — a small ranking gain would turn impressions into clicks. Default limit 50, max 200.
| Parameter | Type | Description |
|---|---|---|
minPosition | number (optional) | Best position to include. Default 4. |
maxPosition | number (optional) | Worst position to include. Default 20. |
minImpressions | number (optional) | Minimum impressions in the range. |
limit | number (optional) | Max keywords to return. |
fetch-search-cannibalization
Keywords for which two or more of the site's pages rank, with the number of competingPages and the keyword's clicks and impressions. Web search only; searchType, country, and device are rejected. Default limit 50, max 500.
fetch-search-breakdown
Clicks, impressions, CTR, and position by country (lowercase ISO 3166-1 alpha-3 codes) or by device. Google web search only; searchType, country, and device are rejected.
| Parameter | Type | Description |
|---|---|---|
dimension | country | device | Break down by country or device. |
limit | number (optional) | Max countries to return. Default 50, max 500. |
fetch-search-ai-vs-organic
Compares AI citations with organic search for the site's own pages over the range. aiCitedButOrganicallyInvisible lists pages AI answers cite that get little or no organic traffic, least organic first (hasOrganicData: false means the search account has no row for the page). organicallyStrongButAiInvisible lists the top organic pages by clicks that no AI answer cites. Default limit 50 per list, max 200.
Configuration tools
These take only projectId and return the project's setup:
fetch-brand-details
Fetches the details of the brand the project tracks. In a pitch project, this is the prospect.
fetch-competitors
Fetches the competitors tracked in the project.
fetch-prompts
Fetches the prompts configured for monitoring.
fetch-personas
Fetches the configured personas.
fetch-offerings
Fetches the configured offerings/products.
fetch-monitor-settings
Fetches the monitoring settings: run frequency and which AI models are tracked.
Action planner tools
fetch-campaigns
Fetches campaigns for a project.
| Parameter | Type | Description |
|---|---|---|
status | open | completed | dismissed (optional) | Filter by campaign status. |
fetch-actions
Fetches actions with optional filters.
| Parameter | Type | Description |
|---|---|---|
campaignId | string (optional) | Filter by campaign ID. |
status | open | in_progress | completed | dismissed (optional) | Filter by action status. |
priority | high | medium | low (optional) | Filter by priority label. |
page | number (optional) | Page number, 1-indexed. |
limit | number (optional) | Page size, max 100. |
sortBy | createdAt | updatedAt | priority (optional) | Sort field. |
sortOrder | asc | desc (optional) | Sort order. |
Tracked URL tools
fetch-tracked-urls
Lists the URLs the project tracks (Actions > Impact in Temso) with their AI visibility in the date range. The result returns the range as startDate and endDate; the counts cover only that range, not all time. Each URL returns:
appearances— AI answers that mention your brand and list the URL as a source.citations— the subset of those answers that cite the URL.promptCoverage— the share of active prompts with at least one such answer.trackedAsOf— the date counting starts. A URL tracked after the date range shows zeros.isPattern—truefor a URL that ends in/*, which also matches every page under that path.
| Parameter | Type | Description |
|---|---|---|
days | number (optional) | Days to look back from today. Default: 14. Ignored when startDate and endDate are set. |
startDate | string (optional) | Start date in ISO format (YYYY-MM-DD). Use together with endDate. |
endDate | string (optional) | End date in ISO format (YYYY-MM-DD). Use together with startDate. |
Content pieces
Read content pieces and their per-step outputs. These tools are designed for progressive disclosure — list pieces first, inspect one piece's steps, then read a single step's output — so your assistant pulls only what it needs instead of loading whole documents.
fetch-content-pieces
Lists content pieces as compact one-line summaries (id, status, title, format, current step). No step bodies are returned.
| Parameter | Type | Description |
|---|---|---|
status | created | processing | waiting_for_input | revising | ready | published | failed | archived (optional) | Filter by piece status. |
formatKey | string (optional) | Filter by content format key (e.g. blog_guide, linkedin_thought_leadership). |
fetch-content-piece
Returns one piece's header and a per-step table (label, kind, human-input policy, current revision, quality/brandkit/factcheck outcomes, size). Metadata only — no step bodies.
| Parameter | Type | Description |
|---|---|---|
pieceId | string (required) | The content piece id, from fetch-content-pieces. |
read-content-piece-step
Reads a single step's output, rendered to markdown (doc/markdown steps) or pretty JSON (json steps) and length-capped. Image steps have no readable artifact.
| Parameter | Type | Description |
|---|---|---|
pieceId | string (required) | The content piece id, from fetch-content-pieces. |
step | string (required) | The step id, from fetch-content-piece. |
fetch-publishable-article
Returns a ready article in full, with everything needed to publish it in a CMS such as Shopify, WordPress, or Webflow: title, URL slug, the complete body as HTML (not length-capped), SEO title and meta description, social metadata, featured image URL and alt text, author, target keywords (usable as tags), and the planned publish date. A warnings list flags missing or outdated page metadata, links to pages that are not published yet, and a missing featured image. Only article pieces with status ready or published qualify. Once the article is live, your assistant can record its URL with mark-content-piece-published (a write tool).
| Parameter | Type | Description |
|---|---|---|
pieceId | string (required) | The content piece id, from fetch-content-pieces. |
Write tools
These tools modify your project's configuration and mirror the write capabilities of the in-app Project Manager Agent. They apply changes immediately — your AI assistant is the approval surface, so review proposed changes before confirming.
Write tools require an API key with the mcp:write scope. Keys with only
mcp:read (and legacy keys created before scopes existed) cannot see or call
these tools. See Setup for how to grant scopes.
Each write tool takes the optional projectId parameter described above. Competitors, offerings, personas, prompt tags, and prompts each have a create-*, an update-*, and a delete-* tool (archive-prompts for prompts). Each tool works on a list, so one call can change several items:
| Parameter | Type | Description |
|---|---|---|
items | array (required) | create-* and update-* tools: one or more items. create-* items take the entity fields; update-* items take _id plus any fields to change. |
ids | string[] (required) | delete-* and archive-prompts: IDs of the items to remove. |
Each call returns a summary with per-item results (succeeded, failed, total, and a results array), so a failure on one item does not stop the rest.
The bulk-apply-* tools, which mix create, update, and delete in one
operations array, are deprecated and will be removed. Use the tools below.
update-brand-details
Updates your own brand's details. All fields optional: name, description, website, aliases (string[]), domainAliases (string[]).
create-competitors, update-competitors, delete-competitors
Manage tracked competitors. Create fields: name, website (URL), optional description. Update fields: _id plus any of name, website, description.
create-offerings, update-offerings, delete-offerings
Manage offerings (products/services). Create fields: name, optional description. Update fields: _id plus any of name, description.
create-personas, update-personas, delete-personas
Manage personas. Create fields: name, description. Update fields: _id plus any of name, description.
create-prompt-tags, update-prompt-tags, delete-prompt-tags
Manage prompt tags. Create fields: name, color. Update fields: _id plus any of name, color.
create-prompts, update-prompts, archive-prompts
Manage prompts. Create fields: text, language, country, and optional tagIds, personaId, offeringId. Update fields: _id plus any of language, type, isPaused, tagIds (replaces the existing tags), personaId, offeringId (pass null to clear a link). Prompts are archived, not deleted.
add-manual-backlink
Registers a backlink you know about but the provider's index is missing. The target URL must be a page on this project's own site and the referring page must be on another site. Free — it makes no third-party call and does not count against your scan allowance.
| Parameter | Type | Description |
|---|---|---|
urlFrom | string (required) | Full URL of the referring page, including https://. |
urlTo | string (required) | Full URL of the page on this project's site that it links to. |
anchor | string (optional) | Anchor text of the link, if known. |
dofollow | boolean (optional) | Whether the link passes authority. Default true. |
mark-content-piece-published
Marks a content piece as published after your assistant published it on your site itself (for example in Shopify, using the output of fetch-publishable-article), and records its live URL. Temso then tracks the page and stops asking you to publish it by hand. Call it only once the article is live — not for drafts or posts scheduled for later. Only article pieces with status ready or published qualify.
| Parameter | Type | Description |
|---|---|---|
pieceId | string (required) | The content piece id, from fetch-content-pieces. |
url | string (required) | The article's live URL, including https://. |
create-tracked-url
Starts tracking a URL's visibility in AI answers, for example a page you published or updated. End the URL with /* to track every page under that path. Returns an error if the URL is already tracked.
| Parameter | Type | Description |
|---|---|---|
url | string (required) | Full URL of the page, including https://, or a path pattern that ends in /*. |
trackAsOf | string (optional) | Day (YYYY-MM-DD) from which to count AI appearances, for example the publish date. Default: now. |
actionId | string (optional) | The action the page was published for, from fetch-actions. |
delete-tracked-url
Stops tracking a URL. Its AI visibility no longer shows on Actions > Impact. You can track it again later.
| Parameter | Type | Description |
|---|---|---|
trackedUrlId | string (required) | The tracked URL id, from fetch-tracked-urls. |
trigger-backlink-sync
Starts a manual backlink scan.
This tool spends money — it calls a paid third-party API (DataForSEO) and the rows it reads count against your monthly allowance. Manual scans are limited to one per project per day on plans without on-demand scanning.
Call it without confirm first: that returns the current sync status (target domain, last scan time, cooldown, any warnings) without starting anything. Show that to the user, and call again with confirm: true only after they explicitly approve.
| Parameter | Type | Description |
|---|---|---|
confirm | boolean (optional) | Set true only after the user has explicitly approved paying for a new scan. |