Create an MCP server and use it from coding tools
This server defines 3 tools across a workspace of 3 sub-packages. Tool naming follows verb conventions (add, count_files, get_yahoo_news), but descriptions are extremely brief (7-11 words). Parameter descriptions are present but minimal. Input schemas are visible and properly typed. However, the server lacks critical information: no output schema documentation, no error handling guidance, no parameter constraints (enums, ranges), and no mention of what the tools return or when they're useful. The 'get_yahoo_news' tool accepts no parameters yet depends on external state (Yahoo's HTML structure), fragile and undocumented. 'count_files' has a security risk (no path validation, no traversal checks). Overall, these are skeleton definitions that work but would fail code review for production use.
Add two numbers
Count the number of files in a directory
Get the latest news headlines from Yahoo! JAPAN
Tool descriptions are critically underdeveloped (7 - 11 words). Current descriptions lack context for LLM selection, WHEN to use the tool, prerequisites, or return type hints.
No output/return schemas are documented. LLMs cannot infer what fields to expect from responses, blocking downstream tool composition and forcing agents to guess at response structure.
count_files() accepts a 'path' parameter with no validation, traversal checks, or security constraints. An agent could pass '../../../etc/passwd' or symlinks leading to arbitrary directory enumeration. No description of allowed path patterns.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
get_yahoo_news() declares no input parameters yet internally depends on fragile HTML selectors. If Yahoo's page structure changes, the tool silently returns an error object rather than a predictable result. No fallback or retry guidance in response.
Error responses from get_yahoo_news() return a dict with 'status: error' and a message string, but LLM cannot determine if the error is retryable, user-fixable, or fatal. No classification or recovery guidance.
No parameter constraints documented. 'path' parameter has no length limit, allowed-char pattern, or description of relative vs. absolute path handling. 'a' and 'b' in add() have no range constraints.
Tool definitions inferred from @mcp.tool() decorator reflection; no explicit schema registration visible.