Preview.
/mcp/v3 is behind a feature flag and no accounts are enrolled.
Nothing on /mcp/v2 changes, and no migration is required or proposed. This
page describes what the surface is so you can judge it early, not so you can
build against it yet.One endpoint, not one per persona
v2 is persona-scoped: you pick/mcp/v2/buyer or /mcp/v2/storefront, and the
URL decides what you can do.
v3 inverts that. There is one endpoint, and the tools you see are resolved
from the account you authenticated as. A seller account yields seller tools;
a buyer account yields buyer tools. You do not choose a persona — you
authenticate, and the surface follows.
This matters because the persona split was never real to the person. One human
might administer an organisation, own a storefront, and buy through two
advertiser seats. In v2 that is three MCP servers. In v3 it is one connection
and a switch_account.
Nouns crossed with a fixed verb set
v2 exposes a genericapi_call tool over a large named-operation enum. It works,
but it asks the model to pick an operation and then guess the body shape.
v3 is the platform’s nouns crossed with a fixed verb set, so adding a
capability means adding a field to a noun — never appending to an enum.
Reads generalise safely and cannot corrupt anything. Writes carry a per-noun
body, so each gets its own tool with its own schema.
Orientation, and knowing you are in the wrong place
MCP negotiates the tool list once, atinitialize. If switching accounts
changes which tools exist, a client that missed
notifications/tools/list_changed would be holding a stale list. v3 does not
depend on that notification:
1
get_status always lists the accounts you can reach
Orientation never requires switching in order to discover what switching
would give you. It returns the current account, what is blocking it, what to
do next, and every other account reachable from here.
2
Every tool fails legibly in the wrong account
Calling a seller tool from a buyer account returns a typed error naming the
exact
switch_account call that reaches an account where it exists.3
tools/list_changed is emitted anyway
Conforming clients get a clean surface. Clients that ignore it lose nothing,
because the first two carry the weight.
Diagnostics are an include, not a tool
Health, sync history and capability rechecks are facts about an object, so they are aninclude on the object rather than a second tool name to learn:
connection (do we hold usable credentials?) and health (is it working?) are
reported side by side. They are different questions and they disagree often
enough to matter.
Asking for something the account cannot give you
save_ask covers the two things no account can resolve on its own:
support
Something is broken or blocking. Reaches the Scope3 team the same way a
problem reported in Murph chat does, and returns a reference id to quote
when you follow up.
product
A capability that does not exist. If someone already asked, yours joins that
entry rather than creating a duplicate. Only the title is recorded, so make
the title carry the request.
save_ask works from any
account and needs only read permission — whoever runs into a wall is usually not
whoever has permission to fix it.
Limits
- Structured responses over 200KB are truncated. A backstop against pathological payloads, not a size to design against.
- Preview scope. The storefront account is built out first; buyer and
organisation accounts follow.
get_statusandswitch_accountwork in every account, including one that is not enrolled — so you are never stranded somewhere you cannot leave.
What is not changing
/mcp/v2/buyer and /mcp/v2/storefront stay supported. v3 is a facade over the
same services, so it owes parity with what v2 can do — it is a different way in,
not a different platform underneath. No deprecation is proposed.