Declare capabilities, exposed filterable fields, and exposure schema so Role Assistants and Enterprise MCP discover governed actions — not raw vendor fields.
Prerequisites
- Configure business vocabulary with indexed metadata
- Configure business policies when ABAC dimensions apply
resourceTypealigned with catalog tokens
Where it lives
| Layer | Location |
|---|---|
| Capabilities | Root capabilities[] — key, description, optional riskLevel, approvalRequired |
| Exposure | exposed.filterable, exposed.schema |
| UI | Business Entity AI Contract tab (?tab=exposure) |
Manifest sections: datasource.capabilities, datasource.exposedAttributes.
Do: set key + description on every capability (required for trust). Optional riskLevel and approvalRequired are Role Assistant / approval placeholders — they signal review and approval expectations; they are not the compiler trust score. See Governed capabilities.
Builder MCP
| Manifest sections | datasource.capabilities, datasource.exposedAttributes |
| UI tab | AI Contract (?tab=exposure) |
| Help topics | section, goldenExample, dependencyGraph |
| Repair hooks | expose, rbac |
Run aifabrix repair <systemKey> --expose --rbac after capability or exposure edits. Trust metadata: Agent metadata and trust.
How to set
- Repair vocabulary and exposure before declaring capabilities:
aifabrix repair <systemKey> --expose --rbac --dry-run
aifabrix repair <systemKey> --expose --rbac
- Declare capabilities with business descriptions (and optional Role Assistant / approval placeholders). Rewrite technical import leftovers into when-to-use language:
{
"capabilities": [
{
"key": "search",
"description": "Find existing customer records that match the user's question. Use this when the user needs information already stored. Do not use this to create or change customer state; use create or update.",
"riskLevel": "low",
"approvalRequired": false
},
{
"key": "update",
"description": "Change allowed customer attributes under policy. Use this when the user intends to update an identified customer. Do not use this only to inspect records; use search or read.",
"riskLevel": "high",
"approvalRequired": true
}
],
"exposed": {
"filterable": ["country", "ownerId"],
"schema": ["externalId", "name", "country", "ownerId"]
}
}
- Map RBAC permission names to
resourceType:operation— Configure roles and permissions. - Align CIP and OpenAPI — enabled capability keys must match Configure data flow operations.
- Publish MCP — Configure Enterprise MCP after upload.
Defaults and examples
| Element | Purpose | Example |
|---|---|---|
Root displayName / description |
What this Business Entity is for | Business outcome language, not vendor schema titles |
capabilities[].key |
Stable governed action id (binds OpenAPI/CIP ops) | search, create, update |
description |
How AI selects the capability — when to use / when not / sibling key | Plain-language business outcome |
riskLevel |
Role Assistant risk placeholder | low | medium | high | critical |
approvalRequired |
Approval placeholder | true gates high-risk mutations |
exposed.filterable |
ABAC query boundaries | Normalized metadata keys |
exposed.schema |
Agent-visible fields | Subset of indexed metadata |
Description quality (technical → business)
OpenAPI/wizard imports often leave vendor operation names and schema jargon. Role Assistants and Enterprise MCP choose tools from description, not from guessing payloads. For each capability:
- Say when to use the action in business terms
- Say when not to use it — and which sibling capability to use instead
- Name follow-on capabilities when success hands work to another action
- Prefer outcomes (“Find existing customers that match the question”) over leftovers (“create”, internal artifact type names, raw id jargon)
- Keep
keyshort and stable; put teaching indescription
Field and attribute descriptions agents see should also use business outcome language — not vendor column names alone.
How generated catalogs reach Role Assistants: How Role Assistants get capabilities. Concept: Agent metadata and trust.
Do: set riskLevel and approvalRequired on mutating capabilities (create, update, delete). These are Role Assistant / approval placeholders for certification and review — not the compiler trust score. High-risk capabilities with approvalRequired: true need a documented approval path; sparse metadata surfaces highRiskCapabilityWithoutApproval during verify-trust. Concept: Governed capabilities. Publish how-to: Capabilities.
Example exposure set with placeholders:
{
"capabilities": [
{
"key": "read",
"description": "Look up customer details the user already knows how to identify. Use this when answering questions about an existing customer. Do not use this to find customers by vague criteria; use search. Do not use this to change customer data; use update.",
"riskLevel": "low",
"approvalRequired": false
},
{
"key": "update",
"description": "Change customer attributes the business allows under policy (for example region or owner). Use this when the user intends to correct or update an identified customer. Do not use this only to inspect records; use read or search. After success, confirm with read if the user needs the updated view.",
"riskLevel": "high",
"approvalRequired": true
}
],
"exposed": {
"filterable": ["customerRegion"],
"schema": ["externalId", "name", "customerRegion"]
}
}
Illustrative contract goals:
- normalized field names only — never raw vendor JSON paths in
exposed.schema - one description per enabled capability for certification trust pillar
- filterable list matches dimension bindings on the same entity
- mutating capabilities declare
riskLevelandapprovalRequired
Validate
aifabrix repair <systemKey> --expose
aifabrix validate <systemKey>
aifabrix verify-trust <systemKey>
aifabrix verify-operations <systemKey>
Trust failures often trace to missing capability description, missing Role Assistant / approval placeholders on high-risk mutations, or vendor field names in exposed.schema — repair and re-validate before certification. Compare online MCP output with manifest exposed.filterable after upload when debugging Role Assistant query scope.
Common mistakes
| Mistake | Fix |
|---|---|
Capability without description |
Required for trust pillar |
Technical leftovers only (create, schema type names) |
Rewrite when-to-use / when-not in business language |
High-risk mutation without approvalRequired |
Set approvalRequired: true and document approval path |
Omitting riskLevel on mutations |
Set low / medium / high / critical |
| Treating placeholders as trust score | Trust is compiler-computed — placeholders signal approval expectations only |
Vendor field names in exposed.schema |
Use normalized metadata keys |
| Parallel custom filter lists | Use exposed.filterable only |
| Exposure before vocabulary | Map fieldMappings first |
| Duplicate capability keys | One key per governed action per entity |
Limits
AI contract bands describe what agents may discover — they do not replace RBAC YAML or protection uploads. riskLevel and approvalRequired are Role Assistant / approval placeholders compiled into the trust model; they do not by themselves enforce Decision Engine approval. Enterprise MCP deduplicates tools per business capability; avoid duplicate keys across entities with the same resourceType unless scopes differ by policy. Re-upload after exposure edits; online contract drift breaks Role Assistants. Capability description must teach when-to-use and when-not — trust reviewers and AI selection both depend on that prose. Keep exposed.schema minimal: expose decision-relevant fields agents need, not every vendor attribute copied during import. Re-run verify-trust after changing filterable lists tied to ABAC dimensions.