Multi-service orchestration platform with MCP (Model Context Protocol) support for managing distributed services, registries, and dynamic tool execution
Portoser MCP server exhibits severe definition quality gaps. Tool definitions appear to be inferred from frontend API client code (web/frontend/src/api/client.js) rather than explicitly registered in the MCP server implementation. Input/output schemas are not visible in the provided source code. Tool descriptions are present but minimal (10-60 characters), lacking the depth needed for LLM reasoning. No parameter descriptions are visible for any parameters. The server appears to be primarily a web service orchestration platform with a frontend client, not a properly-structured MCP server with canonical tool definitions. Critical issue: tools are defined in frontend JavaScript client code, not in the actual MCP server backend, raising questions about whether these are true MCP tool registrations or merely HTTP API endpoints being called by a UI.
Create a new MCP tool with Python code, description, and optional replace_existing flag
Delete an MCP tool by name
Retrieve list of all available MCP tools
Update an existing MCP tool with new description and code
Tool definitions inferred from frontend JavaScript client code, not registered in MCP server backend. Cannot verify canonical tool registration, input/output schemas, or error handling in actual MCP implementation.
No input/output schemas visible in provided source code. Parameter type definitions, constraints, and response structures cannot be verified. Per HARD SCORING RULE, tools without visible input schemas score 0 on schema.
Tool descriptions are extremely short (10-60 characters) and lack context on when/why to use each tool. getMCPTools has no visible description. Descriptions fail to answer: What does it do? When should it be called? What does it return?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 40 | 2026-07-28+ | v2 |
No parameter descriptions visible for any tool. Parameters (name, description, code, replace_existing, toolName) lack explanations of format, constraints, or expected values.
Destructive tool deleteMCPTool has no confirmation/dry-run mechanism. An agent could delete critical tools without recovery guidance. No error handling visible to guide recovery.
createMCPTool accepts arbitrary Python code as a parameter. No validation, sandboxing, or security constraints visible. Agents could inject malicious code. Requires explicit security pattern implementation.
updateMCPTool accepts arbitrary Python code without visible validation or sandboxing. No error handling visible for failed code execution or syntax errors.
No visible error handling or recovery guidance for any tool. What happens if code fails to parse? If a tool name doesn't exist? If update fails? Agents receive no actionable error messages.
getMCPTools returns a list with no visible pagination, limit, or pagination parameters. If many tools exist, response could exhaust context window with no way to request smaller pages.