A Spring Boot application that exposes GitHub operations and utility tools as MCP (Model Context Protocol) tools via HTTP/SSE transport with JWT authentication
This Spring Boot MCP server exposes 3 tools with significant definition gaps. The getAllPullRequests tool has a reasonable description (172 chars) and one parameter with a description, but lacks output schema documentation. The echo and add tools are test utilities with minimal descriptions (44 and 75 chars respectively) that fall below the 100-char baseline for clarity. All three tools lack explicit output schema documentation, which is critical for LLMs to plan downstream operations. Parameter descriptions are present but terse. The server uses Spring AI @Tool annotations correctly for registration, but the tool definitions are not optimized for agentic composition. HTTP transport is a positive; security integration via JWT is present. Overall, definitions are functional but below production baseline, descriptions need expansion, output schemas must be documented, and parameter constraints should be formalized.
This will add two input int values, please prompt two int values to perform addition
This will echo the input prompt
Retrieves all pull requests from the GitHub repository. Returns PR number, title, state, author, and creation date for each pull request. State parameter can be: 'open', 'closed', or 'all'. Defaults to 'open' if not specified.
No output schemas documented for any tool. LLMs cannot determine what fields to expect from responses, forcing them to guess at field names for downstream chaining and incurring parsing errors.
Tool descriptions for 'echo' and 'add' are below 50 characters and lack actionable context. 'This will echo the input prompt' does not explain when or why an agent should call echo vs other tools.
echo and add tools are test/demo tools with no clear business purpose. They pollute the tool namespace and confuse agentic selection. Remove or mark as internal-only.
getAllPullRequests parameter 'state' lacks enum constraint. LLMs may hallucinate values like 'pending', 'merged', or 'draft' despite the description limiting to 'open|closed|all'. Use formal enum in schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
No pagination support documented or implemented for getAllPullRequests. If a GitHub repo has hundreds of PRs, the response could be massive. Add limit and offset/page parameters and document max result count.
Tool composition is weak. getAllPullRequests returns PR details but does not document what IDs/fields are returned. If an agent needs to fetch PR reviews or comments next, it cannot chain tools without additional discovery.