Reference

Twenty-one tools, seven profiles, twenty ways to be refused.

The full surface, named. Most vendors describe capabilities; this is the list an assistant is actually offered, which is a different and more checkable thing. Nothing here is aspirational: every name below is a tool that exists in the running server, and the counts are what a test would fail on if they drifted.

The handbook tools read nothing of yours except your own writing. They answer from your approved process rather than from a connected system, which is why a client who has connected nothing at all is still a client with four working tools.

The tools

All twenty-one, with what it takes to hold one.

Tool names are per category rather than per product, so the day a Salesforce adapter exists it answers crm_read and nothing downstream changes. The last column is the governance fact: which of the seven profiles expands to include this tool.

Tool Reads Granted by
describe_modelDescribe the planning modelplanning model4 of 7 profiles
list_membersList dimension membersplanning model4 of 7 profiles
read_sliceRead cube sliceplanning model4 of 7 profiles
validate_modelValidate model integrityplanning model4 of 7 profiles
variance_autopsyVariance autopsyplanning model3 of 7 profiles
anomaly_detectorAnomaly detectorplanning model3 of 7 profiles
environment_statusPlanning environment statusplanning model2 of 7 profiles
crm_describeDescribe the CRM connectionyour CRM3 of 7 profiles
crm_readRead my CRM recordsyour CRM3 of 7 profiles
crm_read_allRead all CRM recordsyour CRMclient-admin only
docs_describeDescribe the document connectionyour documents3 of 7 profiles
docs_searchSearch documentsyour documents3 of 7 profiles
docs_readRead a documentyour documents3 of 7 profiles
tasks_describeDescribe the task-tracker connectionyour task tracker3 of 7 profiles
tasks_listsList task listsyour task tracker3 of 7 profiles
tasks_readRead tasksyour task tracker3 of 7 profiles
handbook_searchSearch the client's process handbookyour own handbook4 of 7 profiles
handbook_readRead a handbook entryyour own handbook4 of 7 profiles
handbook_assessRecord a check against an entryyour own handbook2 of 7 profiles
handbook_confirmConfirm an assessmentyour own handbookclient-admin only
list_projectsList my projectsthis platform onlyclient-admin only

Three tools sit behind the client-admin profile alone, and each for its own reason. crm_read_all reads past the record-ownership filter that crm_read applies, so reaching the whole pipeline has to be asked for rather than inherited when a profile grows a member. handbook_confirm is the step that turns a model's reading into evidence a named person stands behind, which belongs to whoever owns the process. list_projects is the only tool that needs no project at all, because it answers the question of which projects you have.

The profiles

Seven named sets, and an unknown one expands to nothing.

A grant names a person, a project and a profile. The profile is expanded once, at the moment the grant is written, which is why widening a profile does not retroactively widen anybody who already holds it. An unrecognised profile name expands to an empty list rather than to everything, which is deny-by-default written as code rather than promised as a policy.

Profile Tools What it is for
finance-readthe narrowest useful grant6The four schema-agnostic planning reads plus the handbook. Somebody who asks the plan questions and reads nothing else.
finance-analyst8The same, plus variance and anomaly analysis. Still read-only, still planning only.
crm-read2The CRM, narrowed to records that person owns. Deliberately not folded into the finance profiles, because reaching commercial pipeline should be asked for.
docs-read3Documents, read as the signed-in person, so the source system enforces its own item permissions.
tasks-read3The task tracker, through that person's own token.
deliverythe working profile18Everything read-only across planning, CRM, documents and tasks, plus recording a check against the handbook. It cannot confirm its own assessments and cannot read the whole CRM.
client-adminall of it21The only profile that reaches every tool, including the three above. One or two people, not a department.

Documents and tasks are folded into delivery and the CRM is not, and the difference is not arbitrary. Those two read as the person asking and the source system enforces its own permissions, so including them widens nobody's reach beyond what they already have. Our CRM adapter has no such ceiling behind it, which is exactly why it stays out. That reasoning is the same one on whose permissions apply.

The refusal codes

Twenty names, frozen by a test.

A refusal carries a stable code rather than a sentence somebody will reword. That matters because these are persisted: a row written last month still carries its code, and a detector built on prose silently stops working the day the prose improves. Renaming or removing one is a deliberate edit to a test that exists to make it deliberate.

Code Stage What it means
no_identityidentityNo verified email on the request. Answered with a sign-in invitation rather than a refusal.
token_rejectedidentityBad signature, expired, or an audience belonging to another client's connector.
token_host_project_mismatchidentityA token pinned to one project, presented to a different connector.
entra_tenant_mismatchidentityThe sign-in did not come from the directory registered for that organization.
identity_tenant_absentidentityThe organization is bound to a directory and the sign-in carried none. Usually a configuration conflict, never reported as a possible breach.
identity_tenant_ambiguousidentityThe sign-in carried the directory claim twice, with different values. Refused rather than resolved.
not_provisionedidentityAuthenticated, but nobody by that email exists here. Also what a probe looks like.
person_inactiveidentityThe person exists and has been switched off.
no_live_grantgrantA known person holding no live grant on anything.
project_not_grantedgrantThe project was named and this person holds no grant on it.
project_ambiguousgrantSeveral projects were possible and none was default. Refused with the list rather than guessed.
project_vanishedgrantThe project was resolved and then was not there. Fails closed.
skill_not_enabledtoolThe tool is real and this person's profile does not include it.
skill_not_enabled_projectlesstoolThe same, for a tool that needs no project.
pack_not_ownedtoolThe tool belongs to another client's pack. Never says whose.
tool_not_available_on_projecttoolYour administrator has not switched this capability on for this project.
tool_has_no_connectiontoolNothing of that kind is connected, so there is no system to read.
dispatch_tool_not_visibledispatchCalled anyway, having never been offered. Refused a second time at the moment of the call.
dispatch_no_project_bounddispatchA project-bound tool reached dispatch with no project scope. Structurally should not happen, and refuses if it does.
control_plane_unavailabledispatchOurs, not yours: the control plane was unreachable, so the request failed closed.

Only three of these twenty may ever be described to you as a possible breach, and that mapping is fixed in code rather than decided during an incident. The rest are refusals working correctly. A configuration conflict reported as a breach gets escalated to a CISO who then owns an incident that never happened, which is why the distinction is a data structure rather than a judgement call. The record itself is on the audit trail.

Every one of these tools is read-only, and that is not a setting.

There is no write tool in the list because writing back is disabled in every environment for every person. The two tools that record anything, handbook_assess and handbook_confirm, write to this platform's own record of what was checked, never to a system of yours.

This is the page to hand your engineers.

It is the whole surface, so it is also the fastest way to work out whether the tools you would actually want exist yet. If they do not, that is worth knowing in the first conversation.