A template MCP server implementation in Go with example tools for managing user content
This template server demonstrates basic tool structure with explicit schema definitions visible in source code, but has significant gaps in design patterns and completeness. Both tools follow identical patterns with minimal descriptions and no output documentation. Tool names lack action verbs, parameter descriptions are generic, and error handling is absent. Schema definitions are present via Go struct tags but lack completeness. This is a functional template but not production-ready.
get the latest images if the user is subscribed
get the latest videos if the user is subscribed
Tool names lack action verbs. Both 'latestImages' and 'latestVideos' use nouns/adjectives instead of verb_noun pattern (get_latest_images, fetch_latest_videos). LLMs rely on verb-noun naming to parse intent and disambiguate tools with overlapping functionality.
Descriptions are too brief (19-21 chars) and lack context. 'get the latest images if the user is subscribed' does not explain: What structure is returned? When should the agent call this vs a search? Are images indexed by user? What happens if user is not subscribed? Descriptions must be 50-200 chars and answer WHAT/WHEN/RETURN.
Input parameters lack format/constraint documentation. 'name' parameter offers no guidance on valid formats (username? email? display name?). 'subscribed' boolean has no note on what happens if false. Parameter descriptions must state expected format, range, and dependency hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 27 | - | v1 |
Output schemas are not documented or visible in tool definitions. latestImages returns LatestImagesOutput with a 'path' field, but the tool definition does not expose this schema. LLMs cannot plan downstream calls or extract structured data without knowing response fields.
No error handling or recovery guidance. Functions return nil error on success but no documentation of failure modes, user-fixable errors, or retryable conditions. An LLM receives a silent nil response with no context on what to do next.
Parameters named 'name' and 'subscribed' lack sufficient context. The parameter descriptions in the Input structs use bare jsonschema tags ('the name of the user requesting images') without clarifying accepted formats, alternatives, or what happens on invalid input. Parameter descriptions must be actionable for LLMs.
Tools perform the same action on different resources (images vs videos) but lack a general-purpose parameterization. No way to request both, or to discover available content types. Consider a single 'get_latest_content(content_type, user, subscribed)' with enum for type.