A demonstration MCP server setup with multiple servers (Math and Weather) integrated with LangChain and LangGraph using a ReAct agent pattern
Three tools with minimal definitions. All have basic verb-noun naming (add, multiply, get_weather) and input schemas with typed parameters. However, descriptions are extremely short (10-30 chars, well below the 50-200 char baseline for A+ tools). Parameter descriptions exist but are generic ('first number', 'the location'). No output schemas documented. No error handling guidance. No indication of idempotency, side effects, or when to use each tool. Tool composition is reasonable (single responsibility), but overall quality is far below production baseline.
add to numbers
Get the weather for a location.
Multiply two numbers
Descriptions critically short (10-30 chars). Rubric baseline is 50-200 chars for A+ tools. 'add to numbers' and 'Multiply two numbers' lack context on when to use, what they return, or prerequisites.
No output schemas documented. LLMs cannot plan downstream calls or extract results. E.g., add() returns int, but is it a scalar or wrapped object? get_weather() returns string, is it JSON, plain text, or structured?
Parameter descriptions are generic and lack constraints. 'first number' does not specify range, format, or valid bounds. 'the location' does not clarify format (city, lat/lon, zip code, country code).
No error handling or recovery guidance. If get_weather() fails (invalid location, API timeout), the LLM has no guidance on retry strategy or alternatives.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Tool composition lacks chaining metadata. If get_weather is called, what fields does it return that downstream tools might need? No indication of idempotency or side effects.