java-spring-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| JAVA_SPRING_MCP_CACHE_DIR | No | Directory where all cache files are stored (cache.db and robots.db). Overridable from the default of ~/.cache/java-spring-mcp. | ~/.cache/java-spring-mcp |
| JAVA_SPRING_MCP_POLITENESS_DISABLED | No | Set to 1 to turn off robots.txt handling, the per-host throttle, retries, conditional GET and the host allowlist at once. Use at your own risk; there is no partial opt-out. | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| health_checkA | Check that the server is up and report its version. |
| java_docsA | Fetch JDK class javadoc or a Spring Boot reference section as markdown.
On failure returns {"error", "suggestion"} — try java_search() to find the right name or package. |
| java_searchA | Search JDK classes and Spring Boot reference sections by name. Ranks entries of the cached search index (exact > startswith > substring > fuzzy per token; every token must match). Spring sections are included as pseudo-entries, so e.g. 'spring using' finds the "Using" section. Returns {"query", "count", "results": [{name, package, module, kind, url, score}], "index_stale"}. |
| maven_packageA | Look up an artifact on Maven Central (metadata only). Returns the newest matching version, the top 20 versions and project /
javadoc links. When Note: |
| java_statusA | Real health check: search index, local cache and upstream endpoints. The Probes docs.oracle.com, docs.spring.io and search.maven.org with a light GET (10s timeout each). Never raises; returns {"server", "version", "checks": {...}, "overall": "ok"|"degraded"|"error"} where overall is "error" when the search index is unavailable, "degraded" when any check fails, and "ok" otherwise. Also returns a top-level |
| spring_search_conceptsA | Find where a Spring Boot topic is documented: section titles and headings. Matches the documentation's own titles ("Auto-configuration", "Profiles", "Web", "Security") and the h2/h3/h4 headings inside pages, so "data jpa" finds reference/data/sql.html#jpa-and-spring-data even though no page is titled "JPA". Each hit carries title, url, section, version, score, matched_on ("title", "path" or "heading") and a short excerpt.
The index is a single page — the reference navigation tree (296 entries on the measured 4.1.1 docs) — cached for a week. Headings are harvested only for queries the titles cannot answer, at most 4 pages per call, and are persisted under their own cache key, so a repeat search costs zero requests. On failure returns {"error", "suggestion"}. |
| spring_referenceA | Read a Spring Boot reference section or subsection as clean markdown.
When
On failure returns {"error", "suggestion", "candidates"}. |
| spring_guidesA | List the spring.io guides, or read one guide as markdown. No
On failure returns {"error", "suggestion"}. |
| spring_initializrA | Read Spring Initializr's own metadata: project options or dependency catalogue.
On failure returns {"error", "suggestion"}. |
| spring_dependencyA | Turn a need ("jpa", "web", "oauth2 client") into real starter coordinates. No artifact name is invented. The need is matched against Spring
Initializr's own dependency catalogue, then Initializr is asked to generate
the Maven pom and the Gradle build file for those ids, and those are
returned — parsed coordinates plus ready-to-paste snippets. That matters:
the catalogue id "web" generates
On failure returns {"error", "suggestion"} — an unmatched need returns an error rather than a guess. |
| spring_versionsA | Release and migration notes for a Spring project, from its GitHub releases.
On failure returns {"error", "suggestion"}. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 11 tools
Several tools have genuinely overlapping purposes: java_docs can fetch Spring Boot reference sections (via 'spring' / 'spring:section'), which duplicates spring_reference, and java_search covers both JDK classes and Spring Boot reference sections, overlapping with spring_search_concepts. health_check vs java_status are also both health checks, though their descriptions clearly differentiate depth. Descriptions help, but boundaries between the doc/search tools require careful reading.
Names are uniformly snake_case with a domain prefix (spring_, java_, maven_, health_), which is a readable, predictable convention. The prefixes vary by domain rather than being a single verb_noun pattern, and health_check is a slight outlier, but nothing is chaotic or camelCase-mixed.
11 tools is well within a healthy range and each tool maps to a distinct capability (health, dependency resolution, docs, search, Maven lookup, guides, Initializr metadata, versions). No redundant or filler tools inflate the count.
The surface covers discovery, search, documentation reading, dependency coordinates, Initializr metadata and release/migration notes, which is broad lifecycle coverage for a Java/Spring dev assistant. Minor gaps remain (e.g. no actual project scaffolding/generation, and maven_package is metadata-only), but agents can work around them.