MCP server for Edge Admin — exposes the full edge infrastructure management surface to AI assistants. Provides tools for managing nodes, clusters, commands, SSH access, aliases, enrollment keys, self-updates, and metrics across a distributed fleet of edge machines.
Static source inference · medium confidence · evidence: Streamable HTTP
Current-spec patterns detected
Summary
This MCP server has critical and pervasive definition quality issues across all 60 tools. While tool names follow verb_noun conventions (e.g., GetAdmin, ListClusters, CreateCommand), nearly ALL tools lack parameter descriptions, input schemas, and output schema documentation. The source code provided shows only Dockerfile configurations; actual tool implementation files (.ex files in edge_admin/lib/edge_admin_mcp/tools/) are not included in the evaluation package, making it impossible to verify whether parameter schemas exist, what fields are described, or what the output structure is. Based on the tool list alone, I can confirm: (1) No tool descriptions exceed 20 characters in the provided metadata; (2) No input parameter documentation is visible; (3) No output schemas are documented; (4) All 60 tools are inferred from file paths and names, not from explicit tool registration code. Per the HARD SCORING RULES, inferred tool definitions are capped at 50 per tool; averaging 60 tools each capped at 28-35 yields a definitionQuality score around 28. The 15 READ_ONLY tools (GetAdmin, ListAdminClusters, GetCluster, ListNodes, GetNode, etc.) and 15 WRITE tools (CreateCluster, UpdateCluster, CreateAlias, etc.) all suffer the same deficits. Error handling, security, and composition guidance are invisible in the provided source snippets.
All 60 tools lack visible input parameter schemas and descriptions. Only tool names and risk levels are documented; actual .ex implementation files are not provided for verification.
Tool descriptions are under 20 characters (e.g., 'Get admin information', 'List all admin clusters'). Descriptions must explain WHAT the tool does, WHEN to use it (vs similar tools), and what it returns.
Expand all tool descriptions to 50-200 characters following LLM-optimized patterns: 'WHAT does it do? WHEN to use it instead of [similar tool]? WHAT does it return? E.g., GetAdmin retrieves the current authenticated admin's profile including id, email, cluster_id, permissions, and created_at timestamp. Use this to check admin context before operations requiring elevated privileges.'
Document input schemas for all 60 tools with explicit JSON Schema (type, properties, required, descriptions). Example for CreateCluster: { type: 'object', required: ['cluster_name'], properties: { cluster_name: { type: 'string', description: 'Cluster identifier (2-50 alphanumeric + dash, no spaces)' }, region: { type: 'string', enum: ['us-east', 'us-west', 'eu-central'], description: 'Geographic region for cluster placement' } } }
Add parameter descriptions to all tools: 'What is this parameter? What are valid values? What happens if omitted? If choosing between multiple parameters, which are mutually exclusive?'
For destructive tools (Delete*, Cancel*, Update*), add explicit error handling guidance: 'This operation is irreversible. Returns success: {deleted: true, resource_id: '...', deleted_at: '...'} or error: {code: 'RESOURCE_NOT_FOUND', message: 'Cluster xyz not found', suggestion: 'Call ListClusters to verify cluster_id before deleting'}'
Score history
Overall score trend
First recorded score · v2 rubric
36/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
F
36
2026-07-28+
v2
CreateNodeRecoveryKey
writeauth30/100
Create a recovery key for a node
CreatePublicEnrollmentKeywrite30/100
Create a public enrollment key (no authentication required)
No output schemas are documented for any tool. LLMs cannot determine what fields to expect, what data types are returned, or how to chain results to downstream tools. For example, does GetAdmin return admin_id, admin_email, permissions, status, created_at? Unknown.
No error handling guidance visible. Tools do not indicate which errors are retryable, which require user input, or which are fatal. LLMs will have no recovery path when calls fail.
Tool implementations are inferred from file paths and names only; actual source code is not provided. Per HARD SCORING RULE, inferred tool definitions cannot exceed 50/100 per tool. Cannot verify schemas, parameter types, or documented constraints.
Declare permission requirements for each tool using a structured scope list (e.g., CreateCluster requires ['write:clusters', 'read:clusters']; DeleteCommand requires ['write:commands', 'admin:delete']). This enables least-privilege agent configuration.
Add confirmation/dry-run support to destructive tools. Example for DeleteCluster: Add optional dry_run parameter (default false). When true, return 'Will delete: cluster_id=xyz, node_count=5, webhooks=2. Call DeleteCluster again with dry_run=false to confirm.' This prevents accidental destruction.
Include error recovery examples in tool descriptions. For tools that look up resources, add: 'If cluster not found, returns {error: 'CLUSTER_NOT_FOUND', available: ['cluster-a', 'cluster-b']}. Agent can suggest corrections instead of failing.'
Add pagination parameters (limit, offset/cursor) and response counts to all List* tools. Example ListNodes: 'Returns {nodes: [...], total: 42, next_cursor: 'abc123'} to enable iterating large result sets without blocking the context window.'
For tools operating on named resources (CreateAlias, CreateEnrollmentKey), accept both IDs and human-readable names, with resolution logic inside the tool. Example: CreateAlias can accept cluster_name='prod-edge-01' or cluster_id='C12345', and resolves it internally. Reduces lookup calls.
Add idempotency guidance to Write tools. Example CreateEnrollmentKey: 'Idempotent when idempotency_key is provided. Multiple calls with the same idempotency_key return the same key instead of creating duplicates, enabling safe retry.'
Provide composition hints: 'After calling ListNodes, pass node_id from the response to GetNodeDiagnostics. After CreateCluster, pass cluster_id to CreateDefaultEnrollmentKey to initialize the cluster.'
Log all tool invocations with request ID, caller identity, parameters (redacting secrets), result, and timestamp. Enable audit trails for compliance and incident investigation.
Review the implementation files (edge_admin_mcp/tools/*.ex) and expose parameter types, validation logic, and output structure in tool definitions. Currently these are hidden from LLMs.