MCP server for managing agent-to-agent communication, rate limiting, security policies, and card change approvals
18 tools with consistent naming (verb_noun pattern) and basic descriptions. All tools have input schemas with type definitions. However, descriptions are generic (avg ~60 chars, well below the 194-char baseline), parameter descriptions are minimal or absent, output schemas are undocumented, and error handling lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). The server implements write-tool gating via token auth, but lacks per-tool permission scopes and audit logging. Composition is reasonable (single responsibility per tool), but parameter validation rules are not documented in descriptions.
Approve a pending card change for an agent
Deregister an agent from the sentinel system
Evaluate a security policy against a request
Get the card information for a specific agent
Get the aggregated card information for all agents
Retrieve blocked requests with optional time window and limit
Get the current sentinel configuration
Descriptions are generic and under-specified. Most descriptions are 40 - 60 characters (well below the 194-char baseline). They lack WHEN to use the tool, prerequisites, or dependencies. E.g., 'List all registered agents and their status' does not explain what status fields are returned or when to call this vs. health_check.
Parameter descriptions are missing or minimal. The 'request' parameter in evaluate_policy is described only as 'Request object to evaluate', no schema, no example structure, no validation rules. The 'since' parameter in get_blocked_requests mentions RFC3339 but does not explain the default window or behavior if omitted.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | <=2025-11-25 | v2 |
Get system metrics and statistics
Get the current rate limit status for all agents
Get a security report of the system
Check the health status of the sentinel system
List all registered agents and their status
List all pending card changes awaiting approval
List all security policies
Register a new agent with the sentinel system
Reject a pending card change for an agent
Send a test message to an agent
Update the rate limit for a specific agent
Output schemas are not documented. Tools return JSON via textResult() but the response structure is not declared in the tool definition. LLMs cannot plan downstream calls or extract fields without knowing what get_agent_card or get_metrics returns.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Write tools like update_rate_limit, register_agent, and approve_card_change are not marked as destructive. Read tools are not marked as read-only. This prevents LLMs from reasoning about side effects and retry safety.
Error handling lacks recovery guidance. The code returns generic -32603 (internal error) with only the error message. No categorization (retryable vs. fatal), no actionable next steps, no invalid-value echoing. E.g., if register_agent fails due to duplicate name, the LLM receives no hint to try a different name or list_agents first.