A Go-based MCP server example providing tools for time lookup, web search, and web page downloading
All three tools lack input parameter schemas in the source code. While tool names follow verb_noun convention (get_*, download_*), descriptions are minimal (10-20 chars) and parameter descriptions are absent from the tool registration. The code shows SearchInput and TimeInput structs with jsonschema tags, but these are NOT wired into the mcp.Tool definitions via AddTool(). The tool registration in main.go passes only Name and Description to mcp.Tool{}, with no InputSchema field visible. This means LLMs cannot see parameter constraints, types, or descriptions at runtime. Error handling returns plain text rather than structured recovery guidance.
Download and extract text content of a web page given its URL
Get internet search results for a query
Get the current time in a specified timezone
No input schemas attached to tool definitions. mcp.Tool{} in main.go omits InputSchema field. Parameter types, descriptions, and constraints are invisible to LLMs at runtime.
Tool descriptions are too short (10-20 chars). 'Get the current time in a specified timezone' is 50 chars but lacks WHEN to use it, WHAT it returns, or prerequisites. Baseline is 194 chars for production tools.
Parameter descriptions missing from tool registration. SearchInput.Query has a jsonschema tag but is not exposed in the mcp.Tool definition. LLMs cannot see 'Search query' constraint at call time.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Error responses are plain text, not actionable recovery guidance. getSearchResults returns 'Error performing search: <err>' with no hint about retry, user action, or next steps.
No output schema documented. Tools return JSON strings or plain text with no declared structure. LLMs cannot plan downstream calls or extract fields reliably.