This server provides a modest Netlify integration with 4 tools that expose basic CRUD operations on sites. Tool naming follows the verb_noun convention reasonably well (createSiteFromGitHub, listSites, getSite, deleteSite). Descriptions exist for all tools and are substantive (14 - 50 words). Input schemas are properly defined with JSON Schema and include required/optional fields. However, critical gaps emerge: (1) Output schemas are entirely undocumented, the response structure for each tool is absent from the definitions, forcing LLMs to infer what fields will be returned. (2) Parameter descriptions lack actionable constraints, e.g., 'repo' accepts 'owner/repo' format but provides no validation guidance or error recovery hints. (3) deleteSite has no confirmation mechanism despite being irreversible. (4) Error handling in the implementation includes formatNetlifyError() but error responses are not structured in a way visible to LLMs in the schema. (5) Missing dependency hints and multi-step guidance, e.g., createSiteFromGitHub requires a valid GitHub repo, but there's no hint to validate or search repos first. The implementation is solid (axios with proper timeouts, environment variable injection), but the schema layer lacks the LLM-optimization depth needed for reliable multi-step workflows.
Create a new Netlify site from a GitHub repository
Delete a site
Get details of a specific site
List Netlify sites
ALL tools lack documented output schemas. LLMs cannot infer what fields are returned, breaking multi-step workflows that chain tools (e.g., createSiteFromGitHub → getSite or listSites → getSite requires returned site IDs). Without documented return types, agents cannot plan downstream tool calls or extract required chaining fields.
deleteSite (destructive operation) lacks confirmation mechanism. No dry-run parameter, no explicit confirmation step, and no error recovery guidance. Violates pattern:confirmation-request, agents can irreversibly delete Netlify sites on a single call with no safety rail.
Parameter descriptions lack validation constraints and error recovery hints. E.g., 'repo' in createSiteFromGitHub accepts 'owner/repo' format but provides no regex pattern, character limits, or guidance on what happens if format is invalid. LLMs cannot self-correct invalid input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Tool descriptions are too generic or too short to guide LLM tool selection. deleteSite description is 12 chars ('Delete a site'), does not explain consequences, permissions required, or recovery. listSites description (19 chars) lacks WHEN guidance. According to baselines, avg tool description is 194 chars; these average ~30 chars and omit key context.
No multi-step guidance or dependency hints. createSiteFromGitHub requires a valid GitHub repo, but there's no tool to search/validate repos first, and no hint in the description to suggest such a pre-check. LLMs may pass invalid repos, triggering API errors with no recovery path.
Dual parameter semantics (ID or name) in getSite and deleteSite lack precedence or implementation clarity. If both siteId='mysite' (name) and siteId='abc123' (ID) are valid, how does the tool resolve collisions? Parameter description should clarify: 'Pass site_id (UUID) or site_name (lowercase); ID takes precedence if both match.'