An MCP server that dynamically discovers and exposes Nextcloud API endpoints as tools, with support for authentication via environment variables or request headers
Single tool 'nextcloud_discovery_status' has a 95-character description (within 10-1024 range) but critically lacks parameter descriptions and detailed output schema documentation. The tool accepts no input parameters (empty required array, additionalProperties=false), which is unusual for a discovery tool. No error handling guidance, no output schema documented in visible code. Tool name lacks action verb prefix (should be 'get_nextcloud_discovery_status' or 'describe_nextcloud_discovery'). The server dynamically generates tools from Nextcloud API specs but only exposes one status tool; the dynamic tool generation logic is present but tool definitions are not explicitly registered with MCP in the visible code excerpt.
Returns the current discovery status including discovered operations, apps, last refresh time, and any errors
Tool name lacks action verb prefix. 'nextcloud_discovery_status' should be 'get_nextcloud_discovery_status' or 'describe_nextcloud_discovery' to signal intent to LLM.
No output schema documented. Tool description does not specify what fields are returned (operations, apps, last_refresh, last_error structure). LLMs cannot plan downstream calls without knowing response shape.
No error handling guidance. If discovery fails or times out, tool provides no recovery hints. Description should state 'Returns error details in last_error field if discovery failed; check DISCOVERY_TIMEOUT_SECONDS config.'
Dynamic tool generation logic present but tool definitions not explicitly visible in MCP registration. Code shows OperationDefinition dataclass and discovery logic, but no explicit call to server.add_tool() for dynamically generated tools. Tool composition may be incomplete.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 38 | <=2025-11-25 | v2 |
Credentials (NEXTCLOUD_USERNAME, NEXTCLOUD_APP_TOKEN) injected via environment variables (correct pattern), but no documentation of required scopes or permissions. Tool should declare what Nextcloud permissions are needed.