MCP tools
Twelve tools. Eight read, four write — and the four are only offered to a connection
you granted probr.write. All of them are scoped to the workspace the token was
issued for.
You do not call these yourself; the assistant picks from your question. They are documented so you know what it can see, and so you can tell when a wrong answer came from a tool returning nothing rather than from the model.
Reading
list_watches
List tracked competitors. No parameters. Returns every competitor with its id,
name, website, whether it is paused, and when probr last read it. Paused competitors
are still returned — they are still in the workspace, they are just not delivering.
The id is what the write tools take, so this is usually the first call in any
sequence that changes something.
get_recent_signals
Recent signals about tracked competitors, newest first.
| Parameter | Type | Default |
|---|---|---|
days | integer, 1–90 | 30 |
companyName | string — exact name from list_watches, or the domain | all |
importance | array of low medium high critical | all |
category | array of product_and_pricing leadership_and_legal other_updates | all |
limit | integer, 1–100 | 50 |
Two things worth knowing, because both change how you read an answer:
companyName is matched, not searched. It has to be the name as list_watches
returns it, or the domain. An assistant that guesses "Globex Inc" when the workspace
says "Globex" gets an empty list, and an empty list is indistinguishable from a quiet
month unless you check.
The limit applies after the filters. Asking for 90 days across ten busy competitors can hit it, and what you lose is the oldest part of the window. Narrower questions give more complete answers.
detectedAt is when probr found the signal, not when the event happened. See
Concepts.
get_signal
One signal in full — signalId. Everything the summary leaves out: the
classifier's own reading, the supporting details, the direction and impact, whether
it was flagged as a rumour, and the link it came from.
A signal on a competitor this workspace does not track answers exactly as an id that does not exist does. Telling those apart would confirm ids on request.
compare_competitors
Who moved most over a window, by severity — days (1–90, default 30). Includes
the ones that have gone quiet, which is usually the more interesting half.
get_latest_brief · list_briefs · get_brief
This week's recap, the archive (limit, 1–50), and one brief by briefId.
If the workspace has never had a brief, get_latest_brief says so rather than
erroring. A new workspace is in that state until the first Monday with signals in it.
Note the period on any brief. The latest one can be a week old, and an assistant asked "what happened this week" will happily answer from it — ask for signals if you mean the current week.
show_board
Today's tally, by severity, with the signals behind it. In a client that supports MCP Apps this renders as an interactive panel in the conversation; everywhere else it is the same answer as text.
Writing — probr.write
Reading is free and reversible; a write spends a plan slot or stops delivery. So the
default is read-only, and these four are not advertised to a token without the
scope: a client that cannot call remove_competitor is not shown it either, so an
assistant never spends a turn discovering it is not allowed.
add_competitor
Start watching a competitor — companyUrl, and optionally companyName. Any
form of the address works; probr reduces it to the company. Asks you first: it
spends a plan slot, and for a company probr has never seen, a model run.
If another workspace already tracks that company, the history is there immediately and nothing is re-read.
pause_competitor · resume_competitor
Stop and restart delivery — watchId from list_watches. Pausing stops what you
receive, not what probr reads: another workspace may be watching the same company.
Resuming shows what accumulated while you were away rather than a gap.
remove_competitor
Stop watching, freeing a slot — watchId. Asks you first, naming the
competitor.
That confirmation is in the conversation rather than left to the host's own "allow this tool?" prompt, which names the tool and not which competitor is about to go — and which a host can be told to allow once and stop asking.
A client that never declared it can ask you a question is declined with a pointer to the app instead, because asking a client that cannot answer is a protocol error you would read as a bug.
What is not here
No tool changes delivery settings, exports a report, or touches billing — at any scope. Those the app does.