The server defines 3 tools with explicit registrations in src/index.ts. All tools have names following verb_noun convention (deploy_to_shiped, list_shiped_projects, delete_shiped_project) and descriptions between 34 - 194 chars, which is within the 10 - 1024 baseline. However, parameter descriptions are inconsistent: deploy_to_shiped has detailed parameter documentation in the hardcoded schema (name, type, html, files all described), but list_shiped_projects and delete_shiped_project have minimal descriptions. Output schemas are NOT documented anywhere, there is no specification of what fields are returned by deploy_to_shiped (does it return url, deployId, status?), list_shiped_projects (structure of projects array?), or delete_shiped_project (success indicator?). Error handling is present (401 auth hint, deploy failure messages, polling with timeout) but does not follow the recovery-guide pattern, errors do not always tell the LLM what to do next. The oneOf constraint on deploy_to_shiped (html XOR files) is correctly expressed in JSON Schema but not mentioned in the description, which could cause LLMs to pass both. Security is strong: API keys are injected via env var and device-flow OAuth, never exposed as parameters. No credentials in tool signatures. Composition is good: three separate tools with clear responsibilities (deploy, list, delete) rather than combined operations.
Delete a deployed project from Shiped.
Deploy HTML/CSS/JS code to Shiped and get an instant public HTTPS URL. Use after generating code with an AI to make it live and shareable. Returns the URL immediately — the user can share it right away.
List the user's deployed projects on Shiped with their URLs.
Output schemas are not documented. deploy_to_shiped, list_shiped_projects, and delete_shiped_project return data structures that are never specified. LLMs cannot plan downstream tool calls or extract the right fields without knowing what the response contains.
list_shiped_projects has no input parameters documented (properties: {} is empty) but the description does not explain what it returns, how many items, or if pagination is supported. A typical use case is to list all projects, but does it return 1000 items or 10? Is there a next_cursor?
deploy_to_shiped description does not mention the oneOf constraint (either 'html' or 'files', not both). LLMs cannot read JSON Schema, they rely on the description. This constraint must be stated in natural language.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
Error responses lack recovery guidance. A 401 error includes 'run npx @shiped/mcp login' but most deployment errors (e.g. 'Invalid project name') just echo the API message without explaining how to fix it or what to try next.
delete_shiped_project description is minimal ('Delete a deployed project from Shiped') and does not confirm this is a destructive, irreversible operation. No mention of confirmation or dry-run support.