MCP server for querying golf courses by state and retrieving featured golf courses from the Golf Course Project API
This MCP server exposes 2 golf course lookup tools with minimal quality. Both tools have descriptions that are present but vague (11-31 chars), falling far below the 10-1024 character baseline for actionable descriptions. Input schemas are visible and properly typed, but parameter descriptions are sparse. Neither tool documents return structure or pagination. Error handling is minimal, responses are unstructured strings with basic error prefixes ('❌ Request failed'). No indication of output shape, field names, or how to chain results to other tools. The tool names follow verb_noun convention (GetTopCoursesByState, GetFeaturedByState), but the naming is verbose and C# PascalCase rather than snake_case, which is less friendly to LLM parsing. Output is free-form plaintext (course name and city joined by newlines), not structured JSON, forcing LLMs to parse unstructured text. No pagination support despite potential for large result sets. No validation of 'state' parameter (should document valid US state codes). The 'top' parameter in GetFeaturedByState uses double type instead of integer, which is a schema smell. Descriptions lack actionable context: 'Get fetured golf courses by state' (typo included) tells an LLM nothing about when to choose this over GetTopCoursesByState. Security is adequate (read-only operations, no secrets), but the overall definition quality is well below production baseline.
Get fetured golf courses by state
Get top golf courses in state
Descriptions are too short and lack actionable context. 'Get top golf courses in state' (31 chars) and 'Get fetured golf courses by state' (32 chars, with typo) do not explain WHEN to use each tool or WHY they are different. LLMs cannot distinguish between them or select the right one.
Output is unstructured plaintext (string joined by newlines) instead of structured JSON with typed fields. LLMs must parse free-form text to extract course names and cities, wasting tokens and inviting extraction errors. No documented return schema.
No pagination, limit, or offset parameters. If the API returns 50+ courses, the response is truncated or truncation is undocumented. Large unstructured responses blow the context window and degrade LLM reasoning.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 36 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
GetFeaturedByState uses 'double' type for 'top' parameter (number of courses), when it should be an integer (uint or int, bounded 1-100). This is a schema smell and invites invalid values like 10.5.
No enum or validation for 'state' parameter. Accepts any string. Should constrain to valid US state codes (AL, AK, AZ, ..., WY) or at least document the format. LLMs may pass invalid states, wasting calls.
Error handling is non-actionable. Responses like '❌ Request failed: {ex.Message}' or '❌ Request failed: {response.StatusCode}' give the LLM no guidance on recovery. Missing 'Try search_courses() with a different state' or classification of error as retryable vs user-fixable.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite marking tools as READ_ONLY in server metadata. Annotations should appear in tool definitions to inform agent reasoning.
Typo in GetFeaturedByState description: 'fetured' should be 'featured'. This reduces credibility and confuses the LLM.