MCP server
Trial workflows
Five workflows an agency or brand runs during a trial_100_v1 trial, or
explores before starting one. Each has a real-trial path (your own
workspace, real capacity) and a demo path (a fictional five-client
portfolio, demo_portfolio_v1) — use the demo path to see the shape of the
output before spending any trial allowance on it.
Call get_account_context first. trial is non-null there (and on
get_plan_and_usage) exactly while your organization is on a trial —
state is one of active/expired/suspended/retired.
The demo portfolio
get_workflow_examples { workflow } returns static, fixture-backed example
output for any of the five workflows below — no database or provider call,
ever. Every payload is prefixed "Sample data — not live brand results"
and carries version: "demo_portfolio_v1". The fixture is five fictional
clients (Northwind Dental, Harbor & Vine Coffee, Summit Trail Outfitters,
Bluefin Analytics, Maple Grove Pediatrics), 8 buyer-intent questions each,
and 4 weeks of labeled answers across the three included platforms (chatgpt,
gemini, google_ai_mode) — including one deliberately-included
provider-failure row, so the sample also shows how a failed collection
attempt reads. Call get_workflow_examples with no trial active at all, or
before onboarding your first real brand, to see what each workflow produces.
Allowance semantics
A trial_100_v1 grant is a fixed, lifetime pool per organization — not a
recurring monthly allowance. get_trial_usage reports, for prompts, daily
watchlist slots, refreshes, attempt units and AI generations:
used/reserved/cap/remaining for each. remaining reaching zero on
any dimension means every write against that dimension is refused
(trial_prompt_limit, trial_refresh_limit, trial_attempt_limit, and
trial_report_limit for AI generations — the trial's AI writing allowance,
not a report count) until you upgrade — create_upgrade_link returns a
URL for that, and never charges anything itself (opening the link is what
starts a real checkout). Once the trial's endsAt passes, every read tool
still works (get_trial_usage included), but preview_collection (and
every other write) refuses trial_expired with an upgradeUrl in its
detail.
The five workflows
prospect_audit
Run a prospect's own buyer-intent questions across all four included
platforms once, before spending any ongoing trial capacity monitoring
them. Real-trial path: preview_collection { promptIds, kind: 'refresh' }
to see the refresh/attempt-unit cost before committing, using whatever
prompts you have configured for the prospect. Demo path:
get_workflow_examples { workflow: 'prospect_audit' } shows Northwind
Dental's week-1 results — "does this brand show up at all today", not a
trend (a trend needs more than one week of collection).
weekly_client_report
A weekly narrative per client: visibility, sentiment and competitor
mentions for the week, plus 2-3 action items. Real-trial path:
get_trial_usage for allowance context, plus your own answer history for
the week. Demo path: get_workflow_examples { workflow: 'weekly_client_report' } returns Harbor & Vine Coffee's full weekly-report
shape — the same shape a real workspace's report-generation tools produce.
daily_watchlist
A small, high-priority subset of questions tracked every day instead of on
a weekly cadence, up to the trial's dailySlots cap (get_trial_usage).
Demo path: get_workflow_examples { workflow: 'daily_watchlist' } returns
Bluefin Analytics' latest day, including a provider_error row — a failed
collection attempt for ONE question on ONE platform, not evidence the
brand was actually absent; retry rather than reading it as a visibility
drop.
portfolio_report
One rolled-up view across every client workspace: latest visibility,
trend direction, and which clients need attention (declining trend, or
visibility under 55%). Demo path: get_workflow_examples { workflow: 'portfolio_report' } rolls up all five demo clients this way — the shape
a real portfolio-entitled organization's get_portfolio_summary /
get_clients_needing_attention / get_clients_with_visibility_decline
tools produce.
monthly_action_plan
Look across the full 4-week window (not just the latest week) before
deciding what to change — weighting the trend over any single week's
number matters here: a client can dip one week and recover, which a
single-week snapshot would misread as a real decline. Demo path:
get_workflow_examples { workflow: 'monthly_action_plan' } returns Maple
Grove Pediatrics' full 4-week trend plus example action items.
What a connected assistant can and cannot call
A connection — a personal access token (apt_…) or an OAuth sign-in alike
— gets its write scopes from your CURRENT membership role, never from a
fixed read-only grant and never from anything the token itself claims. See
authentication.md's role table for the exact grant per role:
organization_owner/organization_admin get reads + content writes
(brand:write, prompt:write, report:write, workspace:write) + run
(run:execute, run:cancel); agency_analyst gets reads + content writes
only; client_admin/client_viewer stay read-only.
Those write and run grants are switched on per deployment: they apply only
where MCP_CONNECTION_WRITES_ENABLED=true is set on the MCP service. Where
it is off (the default), every connection is read-only whatever its role,
and the write and run tools below are simply not listed.
Never reachable over MCP, whatever your role or connection type:
member:manage,billing:manage,org:manage,webhook:manage,workspace:archive,report:approveandreport:sendare never granted to a connection — those stay console-only.create_upgrade_linkand the member/key-management tools are typical.- Every
personOnlytool —allocate_workspace_capacity,set_market_profile, the member/key-management tools and the rest — is unreachable from a personal access token regardless of role, evenorganization_owner: apersonOnlytool needs a human signed in through OAuth, which a token by itself never is (authMethod: 'personal_token', not'oauth').
Three things a reader is easily wrong about:
request_approvalis listed for every role — it is tier 0 and carries no scope of its own — but it runs the TARGET tool's own workspace, scope and role checks before it will mint anything, so it is never a way around any of the above. An owner/admin connection holdingprompt:writeCAN reach a tier-5 prompt tool (delete_prompts,finalize_prompt_candidates, …) through it, exactly as anagency_analystconnection withprompt:writereaches a tier-2 one directly — the role table, not the approval mechanism, decides what is reachable.preview_collectionandvalidate_promptsare available to every role: the first isrun:readand only prices a collection, reserving nothing and calling no provider; the second isprompt:readand only checks prompt text, with no write mode. Neither writes anything.- Spending the organization's allowance —
run_question_now,retry_failed_executions,onboard_brand,generate_buyer_questions,discover_keywords,get_keyword_volumes,expand_topics— is NOT blocked just because the caller is "a token": an organization owner or admin connection, personal access token or OAuth alike, reaches every one of these. A non-owner/admin connection never even reaches this rule for the tworun:executetools (run_question_now,retry_failed_executions) — that scope is never granted below owner/admin, so those are refusedforbidden_scopefirst. But the other five areprompt:write/brand:write, which anagency_analystconnection DOES hold — this rule is what refusesonboard_brand,generate_buyer_questions,discover_keywords,get_keyword_volumesandexpand_topicsto it anyway, withforbidden_role, specifically because holding the scope alone isn't enough for a tool that spends the organization's allowance.
Everything read-only in tools.md — including get_collection_status,
get_engine_health, list_runs and get_trial_usage — is available to
every role. Ask the assistant to run describe_capabilities to see the
exact split for its own connection.
Collection mode (paid organizations, not trials)
get_collection_mode_options, preview_collection_mode_change,
request_collection_mode_change, get_pending_collection_mode_change and
cancel_collection_mode_change switch a PAID organization between
weekly_coverage and daily_focus tracking. A trial organization gets a
typed refusal (mode_change_not_available) from any of these that would
attempt or describe a change — a trial has one monitoring profile, not a
mode to switch; choose your paid mode at checkout instead
(create_upgrade_link). Only an organization owner or admin may call
these — any other role, or a service-account token, gets forbidden_scope.