reynforce

Connecting an agent

Last updated

One connection per agent. Not access to a mailbox and not access to a CRM — which is a different ask of a different person, and the reason design/00-north-star.md's eighth bet was rewritten.

What you need

the endpointyour deployment's /mcp. Through the platform's one hostname that is https://app.reynforce.com/t/<your-tenant>/mcp
a keyissued by us today. Create agent keys from the screen is on the build map and is not built
nothing elseno OAuth dance for an agent. A key is a bearer token, and the tool list you are shown depends on it

What an agent is entitled to

An agent reads the register and asks permission. It cannot add a claim.

scopewhat it is for
register:readread what the company stands behind
checkask whether an action is permitted, which records the asking

register:write exists and an agent key cannot hold it. Accepting a claim, assigning an owner, confirming one or contesting one are a person's acts, and the reason is the product rather than caution: a register an agent can write is a register that says whatever the agent already believed.

The three things that go wrong at the door

All three are answered before any tool exists to the caller, so a refusal is a 401 and an empty tool list rather than a tool that fails.

what you seewhat it meanswhat to do
401 with {"error": "invalid_token"} and a sentence about where to askno credential arrived, or one we do not recogniseask the company running the deployment for a key. The body carries the address when that deployment has been given one
401 and an empty tool listthe credential belongs to a different customeryou are pointed at the wrong deployment. The tenant in the path and the tenant in the key must be the same
the tool list is shorter than you expectedyour credential holds fewer scopesan agent key never shows the writing tools. That is not a misconfiguration

A key issued to one customer cannot read another's register, and that is checked at the authorisation edge rather than inside a tool — so it holds for every tool, including ones added after the check was written.

What happens when you call check_action

You send an action. You get a decision. The record is a side effect of the check and is not something you send — there is no tool that files a commitment, so you can be wrong about your own action and still cannot be wrong about the record.

There is deliberately no way to ask without recording. An agent that could ask would this be allowed with no trace could ask until the answer was yes. intent="draft" and happened=false are the honest versions: the check is recorded and the touch is not, because nothing was touched.