Gate tool visibility in MCP servers by caller identity and role. The AI model never sees tools the user cannot call.
RBTC is a role-based access control library for MCP servers, not a tool provider itself. The 9 tools shown are EXAMPLES across three different deployment contexts (Cloudflare Worker, Node/Express, minimal demo). Tool definitions are scattered across example files and lack centralized, production-grade schemas. Descriptions are present but generic (avg ~80 chars). Input schemas use Zod validation in examples but are not formally documented in JSON Schema format. No output schemas documented. Error handling is minimal. The library itself (src/index.ts, src/resolver.ts) provides RBTC primitives but does not define the actual tools, those are caller-provided. This makes evaluation difficult: tool definitions are inferred from examples rather than explicitly registered in a single source. Per the hard rules, inferred tools cap at 50 overall.
Compare metrics across business units. Only visible to users with multi-entity access.
Sets deleted_at on the user_roles row. Irreversible via this tool.
Full payroll export for the specified period.
Full GL export for a fiscal period.
Returns data scoped to your entity access.
Get revenue for a period
Tool definitions are inferred from example code, not centrally registered. No explicit tool manifest or schema registry visible.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields. Responses are hardcoded JSON strings in examples, not formally specified.
Input schemas use Zod validation in code but are not exposed as JSON Schema in tool definitions. Zod objects are not serialized to JSON Schema format for MCP protocol compliance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
List all tracked KPIs
List, create, or deactivate user accounts.
Search the event stream. Admin scope sees all users.
Descriptions are generic and lack actionable context. E.g., 'Get revenue for a period' does not explain when to use it vs other tools, what 'period' format is, or what the response contains.
No error handling guidance. Tools return hardcoded success responses in examples; no recovery paths, retryability classification, or actionable error messages documented.