Skip to main content
Glama

🍃 Spring Documentation MCP Server

npm version License: MIT Node.js MCP Compatible

🚀 Enhanced v1.4.1: 17 powerful tools with Spring AI support, intelligent caching, advanced tutorials, and comprehensive Spring ecosystem access

🌐 Universal MCP Compatibility: Works with Claude Code, Gemini CLI, VS Code, JetBrains IDEs, and all MCP-compatible clients!

🎯 Quick Start

🔌 Universal MCP Compatibility

This server works with ALL MCP-compatible clients:

Claude Desktop/Code

{
  "mcpServers": {
    "spring-docs": {
      "command": "npx",
      "args": ["@enokdev/springdocs-mcp@latest"],
      "description": "Spring Documentation MCP Server with 17 powerful tools"
    }
  }
}

Gemini CLI

mcp_servers:
  spring-docs:
    command: "npx"
    args: ["@enokdev/springdocs-mcp@latest"]
    description: "Spring Documentation Server"

VS Code MCP Extension

{
  "mcp.servers": {
    "spring-docs": {
      "command": "npx",
      "args": ["@enokdev/springdocs-mcp@latest"]
    }
  }
}

Any MCP Client (NPX)

npx @enokdev/springdocs-mcp@latest

Global Installation (All Clients)

npm install -g @enokdev/springdocs-mcp
# Then use: springdocs-mcp

Docker (Coming Soon - Docker MCP Catalog)

# Via Docker MCP CLI (when available in catalog)
docker mcp add springdocs-mcp

# Via Docker directly
docker pull mcp/springdocs-mcp:latest
echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' | \
  docker run -i mcp/springdocs-mcp:latest

Benefits of Docker distribution:

  • Enhanced security with cryptographic signatures and SBOMs

  • Isolated execution environment

  • Reduced token usage in Docker Desktop

  • Automatic security updates

Config file locations:

  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) / %APPDATA%\Claude\claude_desktop_config.json (Windows)

  • Claude Code: ~/.claude-code/mcp-config.json

  • VS Code: ~/.vscode/mcp-settings.json

  • JetBrains IDEs: .jetbrains/mcp-config.json


Related MCP server: MCP AI POC

✨ Features & Tools

The server exposes 17 tools.

📚 Core Documentation (8 Tools)

Tool

Purpose

Example Usage

search_spring_docs

Search Spring documentation (docType all, guides, projects, reference, content; optional version)

"Search docs for WebClient"

search_spring_projects

Find Spring projects

"Find projects about security"

get_spring_project

Project page as markdown (paginated with offset)

"Show the Spring Data project"

get_all_spring_guides

List the getting-started guides

"List the guides"

get_spring_guide

Complete guide content

"Get the rest-service guide"

get_spring_reference

Reference documentation for 11 projects (version, offset)

"Boot reference, web section"

get_migration_guide

Spring Boot / Framework / Batch migration guides and upgrade notes

"Migration guide to Boot 3.4"

search_spring_concepts

Explore Spring concepts (optional version)

"Explain auto-configuration"

🚀 Advanced Features (6 Tools)

Tool

Purpose

Example Usage

search_spring_ecosystem

Search the whole ecosystem, Spring AI included

"Find Spring AI vector stores"

get_spring_tutorial

Step-by-step tutorials

"Tutorial on Spring Security"

compare_spring_versions

Version comparison and migration notes

"Compare 3.3 and 3.4"

get_release_notes

GitHub release notes with focus filter

"Release notes of Boot 3.5"

get_spring_best_practices

Expert guidance by category

"Best practices for testing"

diagnose_spring_issues

Offline stack trace and error diagnosis

"Diagnose this DataSource error"

🧰 Tooling (3 Tools)

Tool

Purpose

Example Usage

get_spring_initializr

Spring Initializr metadata: Boot versions, dependencies (start.spring.io)

"Which Boot versions does Initializr offer?"

find_spring_dependency

Find starters for a need, with Maven and Gradle snippets (optional bootVersion as X.Y.Z)

"Which dependency for Redis caching?"

spring_cache_stats

In-memory cache statistics and optional purge

"Show cache stats"


📎 Resources

  • spring://project/<slug> : Spring project page as complete markdown (e.g. spring://project/spring-boot); resources/list enumerates the 11 projects of the registry, the template accepts any project of spring.io

  • spring://guide/<id> : Spring getting-started guide as complete markdown (e.g. spring://guide/rest-service), available through the resource template

💬 Prompts

  • migrate-boot-version (to_version, optional from_version): plans a Spring Boot upgrade by chaining get_migration_guide, get_release_notes and get_spring_reference

  • explain-error (error_message, optional stack_trace): explains a Spring error by chaining diagnose_spring_issues and get_spring_reference

📖 Usage Examples

"Search for REST API documentation in Spring Boot"

search_spring_docs and search_spring_concepts accept an optional version (3.4 or 3.4.2, the patch is ignored; current or omitted = latest) that targets the Spring Boot reference documentation of that version (a version that is not published gives a dedicated error). Guides and projects are not versioned and ignore it; with docType=content, Boot reference pages of other versions are left out of the results.

get_migration_guide accepts project (spring-boot by default, spring-framework, spring-batch): Framework serves the release notes of its minor version (6.2, section "Upgrading From ..."), Batch its migration guide (5.0, 6.0), both read as raw markdown from the project wiki; section and offset work as for Boot. Spring Security and Spring AI (docs.spring.io pages) are not covered yet.

search_spring_docs accepts docType=content: full-text search (BM25 ranking) over the pages the server has already read (get_spring_project, get_spring_reference, get_spring_guide). It is included in docType=all and stays empty until a page has been read.

🆕 Spring AI Support

"Get Spring AI ChatClient reference documentation"
"Search for RAG and embeddings in Spring AI"
"Show me Spring AI vector store documentation"
"Find Spring AI LLM integration examples"

Ecosystem Exploration

"Search the Spring ecosystem for microservices patterns"

Learning Path

"Get a beginner tutorial for REST API development"

Problem Solving

"Diagnose 'Failed to configure DataSource' error"

Migration Planning

"Compare Spring Boot 2.7.0 and 3.0.0 breaking changes"

Best Practices

"Get architecture best practices for expert developers"

🔧 Advanced Configuration

Performance Optimization

{
  "mcpServers": {
    "spring-docs": {
      "command": "npx",
      "args": ["@enokdev/springdocs-mcp@latest"],
      "env": {
        "NODE_OPTIONS": "--max-old-space-size=4096",
        "REQUEST_TIMEOUT": "15000",
        "MAX_RETRIES": "3"
      }
    }
  }
}

Corporate/Proxy Environment

{
  "mcpServers": {
    "spring-docs": {
      "command": "npx",
      "args": ["@enokdev/springdocs-mcp@latest"],
      "env": {
        "HTTP_PROXY": "http://proxy.company.com:8080",
        "HTTPS_PROXY": "http://proxy.company.com:8080"
      }
    }
  }
}

Transport HTTP (optionnel)

Par défaut le serveur parle stdio. Pour l'héberger en local ou en conteneur :

npx @enokdev/springdocs-mcp --transport http --port 3000   # écoute sur 127.0.0.1

Option

Variable

Défaut

--transport stdio|http

MCP_TRANSPORT

stdio

--port

MCP_PORT

3000

--host

MCP_HOST

127.0.0.1

(aucune)

MCP_ALLOWED_HOSTS

vide : liste de Host supplémentaires, séparés par des virgules

Endpoint MCP : POST /mcp (mode sans état) ; santé : GET /healthz. Aucune authentification : l'écoute reste sur loopback par défaut, et les en-têtes Host/Origin sont contrôlés contre le DNS rebinding. Pour un conteneur, MCP_TRANSPORT=http MCP_HOST=0.0.0.0 avec le port publié (-p 127.0.0.1:3000:3000) ; si le port publié diffère du port interne, déclarer le Host utilisé par le client, par exemple MCP_ALLOWED_HOSTS=localhost:8080.

Le Host doit être de la forme nom:port : un Host sans port (client sur le port 80 ou 443 derrière un reverse proxy, par exemple Host: mcp.example.com) est refusé en 403. Il faut alors le déclarer tel que le proxy le transmet, via MCP_ALLOWED_HOSTS=mcp.example.com (liste séparée par des virgules, comparaison exacte avec l'en-tête reçu).

Jeton GitHub (optionnel)

get_release_notes et compare_spring_versions interrogent l'API GitHub, limitée à 60 requêtes/heure sans authentification. Définir GITHUB_TOKEN (jeton sans scope particulier suffit) relève cette limite à 5000/heure ; le jeton n'est envoyé qu'à api.github.com (jamais à un autre hôte ni après une redirection) et n'est jamais journalisé. En cas de limite atteinte, l'outil échoue immédiatement avec un message clair (délai de reprise inclus) au lieu d'attendre. get_release_notes accepte version en X.Y (ex. 3.5) pour obtenir la dernière release stable de cette mineure ; compare_spring_versions applique focus (breaking-changes, new-features, deprecations).

{ "mcpServers": { "springdocs": { "command": "npx", "args": ["@enokdev/springdocs-mcp@latest"], "env": { "GITHUB_TOKEN": "ghp_..." } } } }

🧪 Testing & Development

Quick Test

echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}' | npx @enokdev/springdocs-mcp@latest

Development Setup

git clone https://github.com/tky0065/springdocs-mcp.git
cd springdocs-mcp
npm install
npm run build
npm test

Load Testing

# Test multiple tools quickly
for tool in "search_spring_docs" "search_spring_projects" "search_spring_ecosystem"; do
  echo "Testing $tool..."
  echo "{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"tools/call\", \"params\": {\"name\": \"$tool\", \"arguments\": {\"query\": \"test\", \"limit\": 2}}}" | npx @enokdev/springdocs-mcp@latest > /dev/null
done

🆘 Troubleshooting

Common Issues & Solutions

"Server failed to start"

# Check Node.js version (requires 20.18.1+)
node --version

# Update to latest
npm update -g @enokdev/springdocs-mcp

# Clear cache
npm cache clean --force

"Tools not responding"

# Test connectivity
curl -I https://spring.io

# Check Claude Desktop config syntax
cat ~/Library/Application\ Support/Claude/claude_desktop_config.json | jq .

"Slow performance"

  • Enable caching (automatic in v1.2.3+)

  • Use specific queries instead of broad searches

  • Increase memory: NODE_OPTIONS="--max-old-space-size=4096"

"Port 8080 already in use" (Spring Boot error)

Solution: Change port in application.properties:

server.port=8081

"Failed to configure DataSource"

Solutions:

  1. Add database dependency to pom.xml

  2. Configure datasource in application.properties

  3. Exclude auto-configuration: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

Health Check Script

#!/bin/bash
echo "🔍 Testing Spring MCP Server..."

# Test server startup
timeout 10s echo '{"jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {}}' | npx @enokdev/springdocs-mcp@latest > /dev/null
echo $? -eq 0 && echo "✅ Server: OK" || echo "❌ Server: FAILED"

# Test network
curl -s --max-time 5 https://spring.io > /dev/null
echo $? -eq 0 && echo "✅ Network: OK" || echo "❌ Network: FAILED"

📊 What's New in v1.2.3

🆕 Major Enhancements

  • 5 new advanced tools for comprehensive Spring ecosystem access

  • In-memory caching of repeated requests (30 min TTL, 24 h for stable content)

  • Auto-retry with exponential backoff and a 5 MiB response size cap

  • Clean architecture with modular services and optimized code

🎯 New Capabilities

  • Ecosystem-wide search across projects, guides, docs, and APIs

  • Progressive tutorials with beginner/intermediate/advanced levels

  • Smart version comparison with detailed migration guidance

  • Expert best practices categorized by domain and experience level

  • Intelligent diagnostics for common Spring Boot issues

⚡ Performance & Resilience

  • Repeated requests are served from the in-memory cache (30 min TTL, 24 h for stable content) without a new network call

  • The cache is bounded by an estimated memory budget (64 MiB by default, LRU eviction, a single value larger than the budget is not cached); override with MCP_CACHE_MAX_MB (e.g. MCP_CACHE_MAX_MB=32). spring_cache_stats reports entries and estimated memory used / budget

  • Retry with exponential backoff and request timeouts on all external HTTP calls

  • Responses larger than 5 MiB are rejected


🔮 Roadmap

v1.5.0 (Next)

  • Interactive Spring Boot project generator (Initializr metadata and dependency lookup are already available)

  • Custom tutorial creation

v1.6.0 (Future)

  • AI-powered code suggestions

  • Performance bottleneck detection

  • Security vulnerability scanning

  • Automated testing recommendations


🤝 Contributing & Support

Getting Help

  1. Search existing issues on GitHub

  2. Create detailed issue with error messages and steps to reproduce

  3. Join community discussions for questions and feature requests

Development

# Setup development environment
git clone https://github.com/tky0065/springdocs-mcp.git
cd springdocs-mcp
npm install
npm run build

# Run tests
npm test
./test-enhanced.sh

# Submit PR
git checkout -b feature/your-feature
# Make changes
git commit -m "feat: add your feature"
git push origin feature/your-feature

🌐 CLI Integration Examples

Claude Code

# Direct usage
claude-code --mcp-server "npx @enokdev/springdocs-mcp@latest"

# With config file
claude-code --mcp-config claude-mcp-config.json

Gemini CLI

# Direct integration
gemini --mcp-server "npx @enokdev/springdocs-mcp@latest"

# With YAML config
gemini --mcp-config gemini-config.yaml

# Environment variable
export GEMINI_MCP_SERVERS='[{"name":"spring-docs","command":"npx","args":["@enokdev/springdocs-mcp@latest"]}]'
gemini "Search for Spring Boot security documentation"

Custom API Integration

// Express.js API Gateway example
const { spawn } = require('child_process');

app.post('/spring-docs/:tool', async (req, res) => {
    const mcp = spawn('npx', ['@enokdev/springdocs-mcp@latest']);
    const request = {
        jsonrpc: "2.0",
        id: Date.now(),
        method: "tools/call",
        params: {
            name: req.params.tool,
            arguments: req.body
        }
    };
    mcp.stdin.write(JSON.stringify(request));
    // Handle response...
});

Compatibility Testing

# Test MCP protocol handshake
echo '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "test", "version": "1.0.0"}}}' | npx @enokdev/springdocs-mcp@latest

# Test tools listing
echo '{"jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {}}' | npx @enokdev/springdocs-mcp@latest

# Test tool execution
echo '{"jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": {"name": "search_spring_projects", "arguments": {"query": "boot", "limit": 1}}}' | npx @enokdev/springdocs-mcp@latest

📄 License & Acknowledgments

License: MIT - see LICENSE file

Thanks to:


🚀 Ready to explore the Spring ecosystem with enhanced intelligence and performance!

🌐 Universal MCP Compatibility: Works seamlessly with Claude Code, Gemini CLI, VS Code, JetBrains IDEs, and any MCP-compatible client!

Made with ❤️ by EnokDev

Available Tools

17 tools
compare_spring_versionsC

Compare different Spring Boot versions and their features

ParametersJSON Schema
NameRequiredDescriptionDefault
focusNoWhat aspect to focus on in comparisonall
version1YesFirst Spring Boot version to compare (e.g., '2.7.0')
version2YesSecond Spring Boot version to compare (e.g., '3.0.0')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It only says 'compare' and does not disclose whether the operation is read-only, what the output format is, whether versions must exist, or any side effects or performance characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with zero filler and the core verb-resource pairing is front-loaded. It is as concise as possible while still conveying the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should explain what the comparison returns (e.g., a structured diff, feature list, or breaking-change summary). It also omits any mention of the 'focus' parameter or the distinction from sibling tools like get_release_notes, leaving the agent insufficiently informed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters including the enum for 'focus' and example version strings. The description adds no further meaning beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Compare') and resource ('Spring Boot versions and their features'), making the tool's purpose immediately clear. It does not, however, differentiate from siblings like get_release_notes or get_migration_guide, so an agent must infer when this tool is preferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or alternative guidance. The description only restates the purpose, leaving the agent to guess whether to call this tool versus get_release_notes or get_migration_guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diagnose_spring_issuesC

Diagnose common Spring Boot issues and provide solutions

ParametersJSON Schema
NameRequiredDescriptionDefault
componentNoSpring Boot component related to the issue
stack_traceNoStack trace (optional, for more specific diagnosis)
error_messageYesError message or issue description

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies an advisory read-only operation but never states whether the diagnosis is static or model-generated, what permissions are needed, or whether any state is modified. The absence of an output schema makes the missing disclosure of the response shape more costly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It could stand to spend one more sentence on usage, but nothing present is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description should explain what a diagnosis/solution result looks like and when it is appropriate. Instead it stops at a one-line purpose, leaving the agent unable to anticipate the return format or the tool's limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter documented and an enum on 'component', so the schema does the heavy lifting. The description adds no context about how error_message, component, and stack_trace interact (e.g., that stack_trace refines the diagnosis), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Diagnose common Spring Boot issues') plus a secondary action ('provide solutions'). It is clearly distinguishable from sibling tools like search_spring_docs or find_spring_dependency, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the many retrieval-oriented siblings (search_spring_docs, get_spring_best_practices, etc.). The word 'common' hints at the scope but no prerequisites, exclusions, or alternative conditions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_spring_dependencyA

Trouve les starters Spring correspondant à un besoin (mots-clés en anglais, ex. 'jpa', 'postgres', 'oauth2') et renvoie leurs coordonnées avec des snippets Maven et Gradle prêts à coller, d'après Spring Initializr

ParametersJSON Schema
NameRequiredDescriptionDefault
needYesBesoin exprimé en mots-clés anglais (ex. 'jpa', 'postgres driver', 'oauth2 client')
buildNoSnippets à produire : Maven, Gradle ou les deuxboth
bootVersionNoVersion de Spring Boot ciblée au format X.Y.Z (ex. '4.0.8') ; par défaut, celle d'Initializr

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does disclose the response shape (coordinates + ready-to-paste snippets) and the backing source, which is useful context, but says nothing about no-match behavior, whether results are live from Initializr, or any network/permission characteristics. A lookup tool with zero annotation coverage needs a bit more than this.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the action and resource, then the return payload, then the source. Nothing is wasted, though the inline examples partially duplicate the schema and the sentence is long enough that the source attribution trails at the end.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by describing the return content (coordinates, Maven and Gradle snippets) and provenance. For a 3-parameter lookup tool with full schema coverage, the only real gap is unstated behavior when no starter matches the keywords.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and all three parameters (including the build enum and bootVersion format) are documented in the schema itself. The description's mention of English keywords and examples duplicates the schema's 'need' description rather than adding new meaning. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Trouve les starters Spring') and goes further by naming the return payload (coordinates plus Maven/Gradle snippets) and the data source (Spring Initializr). An agent immediately knows what the tool produces, though it never explicitly distinguishes itself from the closely related sibling get_spring_initializr, which appears to share the same data source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the phrasing 'correspondant à un besoin' suggests this is for when you need to add a dependency, but there is no statement of when to prefer it over search_spring_ecosystem, get_spring_initializr, or search_spring_projects, and no exclusions. The English-keyword hint is parameter guidance rather than tool-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_spring_guidesC

Récupère la liste de tous les guides Spring disponibles, optionnellement filtrés par catégorie

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNombre maximum de guides à retourner
categoryNoCatégorie de guides à filtrer (ex: 'Web', 'Data', 'Security', 'Testing')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It says it returns an unfiltered-or-filtered list but discloses nothing about pagination behavior, default page size, result ordering, or whether the list is exhaustive despite 'limit' defaulting to 20.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with the verb and resource front-loaded and the optional filter mentioned after. No wasted words, though it is arguably terse to the point of under-specification rather than truly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with 100% schema coverage and no output schema, the description is minimally adequate. However, with no annotations, it should say more about return shape and pagination behavior to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both 'limit' and 'category' are already documented in the schema, including examples and bounds. The description only alludes to the category filter and adds no syntax or semantics beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Récupère la liste de tous les guides Spring') plus an explicit scope ('tous'), making the plural-list nature clear. It does not explicitly distinguish itself from the singular sibling get_spring_guide, but the 'tous' qualifier does most of that work.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'optionnellement filtrés par catégorie' hints at the filtering capability but gives no when-to-use guidance, no prerequisites, and no routing toward alternatives like get_spring_guide or search_spring_docs. An agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_migration_guideA

Récupère le guide de migration ou les notes de version d'upgrade de Spring Boot (par défaut), Spring Framework ou Spring Batch pour une version cible, avec filtre par section (ex: jakarta)

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoDécalage en caractères pour lire la suite d'une page paginée
projectNoProjet concerné. spring-boot (défaut) : guide de migration / notes de version Boot ; spring-framework : notes de version (section « Upgrading From ») ; spring-batch : guide de migration (disponible pour 5.0 et 6.0). Pages markdown brutes du wiki du projet.spring-boot
sectionNoMot-clé de titre : ne renvoie que les sections correspondantes (ex. 'jakarta')
versionYesVersion cible du projet (ex. '3.0', '3.4' ou '3.4.2' pour Boot, '6.2' pour Framework, '5.0' pour Batch ; le patch est ignoré)
documentNoDocument à lire : auto (Boot : guide de migration pour les versions x.0, notes de version sinon ; Framework : notes de version ; Batch : guide de migration), guide de migration ou notes de version (Framework n'a que release-notes, Batch que migration-guide)auto

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It adds useful context (default project, that Batch guides exist only for 5.0/6.0, section keyword matching) and the schema notes raw wiki markdown, but nothing about rate limits, auth, or result format is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the verb and resource, with scope qualifiers kept short. It is efficient, though the three-project enumeration plus section filter makes it slightly packed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description plus a fully documented schema cover the resolution logic (auto document selection per project) that an agent needs to call it correctly. Missing only explicit routing against sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters in detail (offset, project, section, version, document). The description adds only the default project and a section example, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (récupère) and resource (guide de migration / notes de version) scoped to three named projects for a target version, plus a section filter. It is clear about what it returns, but it does not distinguish itself from the sibling get_release_notes, which plausibly overlaps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It conveys defaults ('Spring Boot (par défaut)') and the section-filter use case, so usage is implied. However it never says when to choose this over get_release_notes or get_all_spring_guides, nor any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_release_notesB

Récupère les notes de release GitHub d'un projet Spring (version précise ou dernière), avec filtre sur les changements majeurs, nouveautés ou dépréciations

ParametersJSON Schema
NameRequiredDescriptionDefault
focusNoAspect à mettre en avant : tout, changements majeurs, nouveautés ou dépréciationsall
projectNoProjet Spring dont on veut les notes de releaseboot
versionNoVersion de la release (ex. '3.5.0', 'v3.5.0', '4.2.0-M2' ; '3.5' = dernière release stable de cette mineure). Si omise ou 'latest' : dernière version stable. Jeton GitHub optionnel via la variable d'environnement GITHUB_TOKEN (limite de débit relevée)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden, but it does disclose genuinely useful traits: the data comes from GitHub (external network source), it is a retrieval operation, and it supports filtering and version resolution. It stops short of noting read-only nature explicitly, auth requirements, or rate limits (the GITHUB_TOKEN note lives in the schema, not the description).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the resource first, then the scoping variants. No padding or repetition, though the parenthetical could be slightly tighter and the sentence is dense for one line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only fetch with a fully described schema, the essentials are present, but with no annotations and no output schema the description does not characterize the return shape (e.g., structured release objects vs. markdown) or the rate-limit/auth context, leaving moderate gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (focus enum, project enum, version) are already fully documented in the schema, including the version examples and token note. The description merely restates the field meaning (version, filter) without adding syntax or format detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Récupère), resource (notes de release GitHub), scope (projet Spring, version précise ou dernière) and a filter capability (changements majeurs, nouveautés, dépréciations). The function is unambiguous, though it does not explicitly distinguish itself from siblings like get_migration_guide or compare_spring_versions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the description (fetch notes for a specific or latest version, optionally focusing on breaking changes/features/deprecations), but there is no explicit when-to-use, when-not, or named alternative among the many sibling tools. Nothing guides the agent to prefer this over get_migration_guide or compare_spring_versions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spring_best_practicesB

Get best practices and recommendations for Spring Boot development

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYesCategory of best practices
experience_levelNoDeveloper experience levelintermediate

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description does not disclose any behavioral traits beyond the basic purpose; lacks details on side effects, auth, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, front-loaded sentence with no extraneous information; highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple retrieval tool, but lacks description of output format or how results are structured; missing detail given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters, but the description adds no extra meaning beyond what the schema provides; baseline score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves best practices and recommendations for Spring Boot development, distinguishing it from siblings like guides or tutorials.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus siblings like get_spring_guide or search_spring_docs; no context on prerequisites or limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spring_guideC

Récupère le contenu d'un guide Spring Boot spécifique avec niveau de détail configurable

ParametersJSON Schema
NameRequiredDescriptionDefault
guideIdYesL'identifiant du guide Spring Boot (par exemple: 'rest-service', 'accessing-data-jpa')
detail_levelNoNiveau de détail: summary (1500 chars), medium (4000 chars), full (50000 chars)medium

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read operation and mentions a configurable detail level, but says nothing about the returned format (markdown/sections), whether content is truncated, latency, or any auth requirements. The one substantive behavioral fact – the character caps per level – lives in the schema, not the description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, and the core action is front-loaded. It is arguably too terse for the information an agent needs, but as a conciseness measure it wastes nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, two-parameter read tool with full schema coverage, the description is adequate. With no output schema, however, it should at least sketch what 'contenu' means (e.g. code samples, prose sections, headings), and the French wording is inconsistent with the English sibling/tool naming.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both guideId and detail_level are already fully documented including examples and character limits. The description only restates 'niveau de détail configurable' without adding format or syntax detail, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Récupère) and a clear resource (le contenu d'un guide Spring Boot spécifique), plus a differentiating qualifier ('spécifique') that separates it from the listing sibling get_all_spring_guides. It stops short of naming an alternative, but the verb+resource pair is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance. The word 'spécifique' faintly implies this is for a single known guide rather than browsing, but with siblings like get_all_spring_guides, get_spring_tutorial and search_spring_docs the description never tells the agent which one to pick. Usage is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spring_initializrC

Liste les options de Spring Initializr (start.spring.io : build, Java, langage, versions de Spring Boot) ou ses dépendances, avec filtre texte sur l'id, le nom ou la description

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoFiltre texte sur les dépendances (id, nom, description), ex. 'jpa' ou 'security'. Ignoré pour section=options
sectionNoCe qu'il faut lister : les options du projet ou les dépendances disponiblesoptions

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only listing ("Liste") and reveals a live dependency on start.spring.io, but says nothing about pagination, result size, caching, network failures, or return format for a tool that fetches remote data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence opens with the verb and resource before the parenthetical detail, and every clause carries information. It is dense but not padded, with no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 2 fully documented parameters and no output schema, the definition is adequate to call the tool. However, with no annotations and no return-value description, it lacks the behavioral detail an agent needs to anticipate results, leaving the definition only minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema, including the enum, the default, and the maxLength. The description's mention of text filtering on id/name/description restates what the schema already says, adding no syntax or format detail beyond it. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (lists) and resource (Spring Initializr options / dependencies), enumerating the option categories (build, Java, language, Spring Boot versions) and naming the backing service start.spring.io. It clearly conveys the two listing modes. It does not, however, explicitly differentiate itself from the close sibling find_spring_dependency, which also concerns dependencies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance and no mention of alternatives. An agent can infer the tool lists Initializr data, but nothing tells it when this is preferable to find_spring_dependency or get_spring_project, so selection among siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spring_projectC

Récupère les détails complets d'un projet Spring spécifique

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPosition (en caractères) pour lire la suite d'un document tronqué, fournie dans le pied de la réponse précédente
projectNameYesLe nom du projet Spring (ex: 'spring-boot', 'spring-security', 'spring-data')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. 'Récupère' implies a read, but nothing is said about truncation or the continuation flow – even though the schema's offset parameter reveals that responses can be truncated and continued. It also omits whether the operation is safe/idempotent or what happens when projectName is unknown.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient, though arguably too terse for a tool whose response can be truncated and continued.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-required-parameter read tool with full schema coverage, the description is adequate but thin: it never characterises what 'détails complets' includes, and with no annotations and no output schema the agent gets no picture of the return shape or the truncated-response flow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (projectName and offset) are already fully documented in the schema, including examples for projectName and the truncation semantics for offset. The description adds no parameter meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Récupère les détails complets d'un projet Spring spécifique'), so an agent knows this is a single-project lookup rather than a search. It does not, however, contrast itself with closely related siblings like get_spring_reference, get_spring_guide or search_spring_projects, and 'détails complets' leaves the exact payload vague.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of any alternative tool. The agent must infer from the name alone that this is the right call for fetching one project rather than searching or listing projects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spring_referenceC

Get specific section of Spring reference documentation (supports Spring Boot, Spring AI, Spring Framework, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNoPosition (en caractères) pour lire la suite d'un document tronqué, fournie dans le pied de la réponse précédente
projectNoSpring project to search ('boot' for Spring Boot, 'ai' for Spring AI, 'framework' for Spring Framework, 'security' for Spring Security, 'data-jpa' for Spring Data JPA, 'batch' for Spring Batch, 'integration' for Spring Integration, 'kafka' for Spring for Apache Kafka, 'modulith' for Spring Modulith, 'cloud-gateway' for Spring Cloud Gateway, 'cloud-config' for Spring Cloud Config)boot
sectionYesDocumentation section (e.g., 'web', 'data' for Boot; 'chatclient', 'rag' for AI; 'core', 'web' for Framework)
versionNoVersion de la documentation (ex: '3.4' ou '3.4.2' ; le patch est ignoré). Omis ou 'current' = dernière version. Les anciennes versions peuvent ne pas être publiées.
subsectionNoOptional subsection for more precise navigation

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It says nothing about output format, pagination behavior, truncation, or authentication requirements. The `offset` parameter description hints at truncated documents, but that's in the schema, not the description. Significant gap for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single efficient sentence with no waste. Front-loaded with the verb and resource. Very concise, though perhaps too brief to be truly helpful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no annotations, and no output schema, the description is minimal. It doesn't explain return format, pagination, or how to handle truncated responses despite the offset parameter implying truncation. The description should do more to prepare an agent for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters thoroughly, including the enum for `project` and the `offset` truncation behavior. The description adds nothing new about parameters. Baseline 3 is appropriate when the schema does all the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Get specific section of Spring reference documentation'. It enumerates supported projects, but it does not distinguish itself from siblings like search_spring_docs or get_spring_guide. It's clear but lacks sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, no mention of alternatives like search_spring_docs for keyword searching. The description only says what it does, not when to choose it over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spring_tutorialC

Get step-by-step tutorials for specific Spring Boot features

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoTutorial difficulty levelbeginner
topicYesTutorial topic (e.g., 'rest-api', 'jpa', 'security', 'testing')
detail_levelNoContent detail: summary (1500 chars), medium (4000 chars), full (50000 chars)medium

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no confirmation this is a read-only lookup, no note on caching, latency, or whether results are complete or truncated at the given detail levels. 'Step-by-step' hints at the content style but not at any operational trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or redundancy. It is efficient, though its extreme brevity is part of why other dimensions are thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with a fully documented schema, the essentials are present; the required topic and enum defaults are clear from the schema. With no output schema, though, the description should say more about what a tutorial response contains (and how detail_level affects it), leaving a genuine gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so topic, level, and detail_level are already fully documented (including enum meanings and character budgets) in the schema. The description adds nothing parameter-specific beyond the phrase 'specific Spring Boot features', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get step-by-step tutorials') for a defined domain ('specific Spring Boot features'), which is clearer than a bare 'retrieve content' phrasing. However, it offers no differentiation from near-siblings such as get_spring_guide, get_all_spring_guides, or get_spring_reference, so an agent cannot tell from the text alone which source to prefer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternative tools despite a large sibling set covering guides, references, and concepts. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_spring_conceptsC

Recherche des concepts Spring Boot dans la documentation de référence (titres de sections correspondants, extraits)

ParametersJSON Schema
NameRequiredDescriptionDefault
conceptYesLe concept Spring Boot à rechercher (par exemple: 'auto-configuration', 'profiles', 'actuator')
versionNoVersion de la documentation Spring Boot (ex. '3.4' ou '3.4.2' ; le patch est ignoré ; 'current' ou absent = dernière)

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose the return content (matching section titles and excerpts), which is mildly useful, but says nothing about ranking, result limits, whether the search is exact or fuzzy, permissions, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the parenthetical efficiently conveys what is returned. Dense but not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description partially compensates by naming the return content, and the schema covers both parameters. But it omits any routing guidance against the crowded sibling set, leaving a real gap for an agent choosing between the several spring search tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both the concept and version parameters (including the 'current'/absent semantics and patch-ignoring) are already fully documented in the schema. The description adds nothing beyond it, which matches the baseline 3 when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (recherche) and resource (concepts Spring Boot dans la documentation de référence) and hints at the return shape (section titles, excerpts). However, 'concepts' is vague and it never distinguishes itself from the many sibling search tools (search_spring_docs, search_spring_projects, search_spring_ecosystem, get_spring_reference), so an agent cannot tell which search surface to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusion, and no named alternative, despite 17 sibling tools including several near-identical search tools. The agent must infer routing from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_spring_docsC

Recherche dans la documentation Spring Boot avec des mots-clés

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNombre maximum de résultats à retourner
queryYesLes mots-clés à rechercher dans la documentation
docTypeNoType de documentation à rechercher. `content` = recherche plein texte (classement BM25) dans les pages déjà lues par le serveur (get_spring_project, get_spring_reference, get_spring_guide) ; inclus dans `all`.all
versionNoVersion de la documentation de référence Spring Boot (ex. '3.4' ou '3.4.2' ; le patch est ignoré ; 'current' ou absent = dernière). Ne s'applique qu'à la partie référence (et aux pages de référence Boot de la recherche plein texte) : les guides et les projets ne sont pas versionnés et ignorent ce paramètre.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure, yet it says nothing about return format, ranking, result limits, or server state. Some behavioral context (BM25 ranking, searching previously read pages, version scoping) lives only in the schema parameter descriptions, not in the tool description itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste, but also no structure or front-loaded scoping detail. It is adequately sized yet too thin to convey much, landing at the minimum-viable level.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the agent must rely entirely on the description and schema. For a 4-parameter search tool with a version-sensitive docType, the description omits return values, ranking behavior, pagination and sibling selection criteria, leaving meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema descriptions are notably rich (docType explains BM25/full-text over already-read pages; version explains patch handling and scope). The description adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Recherche dans la documentation Spring Boot avec des mots-clés'), so the agent knows it is a keyword search over Spring Boot docs. However, it gives no differentiation from the many sibling search tools (search_spring_concepts, search_spring_ecosystem, search_spring_projects), which is a real ambiguity given the overlap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the sibling search tools, nor any prerequisites or exclusions. The docType enum hints that the tool spans guides/reference/projects/content, but the description does not turn that into when-to-use advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_spring_ecosystemB

Search across the entire Spring ecosystem including all projects, guides, documentation, and Spring AI

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results per category
queryYesKeywords to search across the entire Spring ecosystem
scopeNoScope of search (use 'ai' for Spring AI specific searches)all

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does signal that results span multiple content categories (matching the schema's per-category limit). However, it never states that the operation is read-only, how results are grouped or ordered, or any pagination/limit behavior beyond what the schema already declares.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the scope of coverage is stated before any detail. The phrasing 'entire Spring ecosystem' followed by 'including all projects, guides...' is slightly redundant, keeping it just short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only search with three well-documented parameters and no output schema, the description is minimally adequate but omits the key decision an agent faces: choosing between this tool and its four search siblings. It also says nothing about result shape or per-category grouping.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so query, limit, and scope are already fully documented in the schema, establishing the baseline of 3. The description adds only marginal meaning, hinting at the Spring AI category that the 'ai' scope enum already exposes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (the entire Spring ecosystem), then enumerates the covered content types: projects, guides, documentation, and Spring AI. It implicitly positions itself as the broad umbrella versus the narrower search_spring_docs / search_spring_projects / search_spring_concepts siblings, but never names them, so differentiation still requires inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'across the entire Spring ecosystem' implies this is the catch-all search, but there is no explicit when-to-use, when-not-to-use, or named alternative among the four sibling search tools. The only routing hint ('use ai for Spring AI specific searches') lives in the schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_spring_projectsC

Recherche parmi tous les projets Spring disponibles sur spring.io/projects

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNombre maximum de projets à retourner
queryYesLes mots-clés à rechercher dans les projets Spring (ex: 'security', 'data', 'cloud')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses only that results come from spring.io/projects; there is no statement about result format, ranking, whether data is cached/live, or how the limit parameter shapes output. For a network-backed search tool this leaves real gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence that front-loads the verb and the scope. It is appropriately sized for a simple two-parameter tool, though the brevity comes at the cost of the guidance noted above.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with 100% schema coverage and no output schema, the essentials for invocation are present. What is missing is disambiguation from the many sibling search/get tools, which matters given how crowded this tool family is.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'query' (keywords, with examples) and 'limit' (1-20, default 10) fully documented in the schema. The description adds no additional parameter meaning (e.g., matching behavior, whether limit truncates or paginates), so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ("Recherche") and resource ("projets Spring") with an explicit source scope (spring.io/projects), so the agent knows this searches the project catalog rather than docs or code. It does not distinguish itself from siblings like search_spring_docs, search_spring_concepts, or search_spring_ecosystem, which are superficially similar search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives. With four sibling search_* tools plus get_spring_project and find_spring_dependency, the agent is left to guess which search surface applies to its intent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spring_cache_statsA

Affiche les statistiques du cache du serveur (entrées, expirées, capacité) et permet de purger les entrées expirées ou tout le cache

ParametersJSON Schema
NameRequiredDescriptionDefault
purgeNoPurge à effectuer avant d'afficher les statistiques : aucune (lecture seule), entrées expirées, ou tout le cachenone

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose that the tool can mutate state and specifies what is destroyed ('entrées expirées' or 'tout le cache'), which is genuine behavioral value, but it omits reversibility, permission requirements, and any warning that 'all' is irreversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence that front-loads the read behavior and appends the optional mutation. Nothing is padded, though splitting the destructive capability into its own sentence would improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema and full schema coverage, the description supplies enough to call it correctly, including the read/write duality. The main omission is any note on the shape or size of the returned statistics and the destructive nature of 'all'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single enum parameter is fully documented in the schema, including that 'none' is read-only and purge runs before display. The description mirrors this at a high level but adds no syntax or default details beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource pair ('Affiche les statistiques du cache du serveur') plus a secondary action (purge), and lists the concrete data exposed (entrées, expirées, capacité). It is clearly a different resource from every sibling (all docs/search/version tools), though it never explicitly contrasts itself with an alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer it should call this to inspect cache health or to clean the cache. There is no explicit when-to-use vs when-not-to-use guidance and no prerequisites (e.g. whether purging requires the server to be running or a specific role).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv1.4.1
    • Changedcompare_spring_versions2 fields changed
      • addedInput schema / properties / version1 / maxLength
        Added value: +50
      • addedInput schema / properties / version2 / maxLength
        Added value: +50
    • Changeddiagnose_spring_issues2 fields changed
      • addedInput schema / properties / error_message / maxLength
        Added value: +2000
      • addedInput schema / properties / stack_trace / maxLength
        Added value: +10000
    • Addedfind_spring_dependency
    • Changedget_all_spring_guides1 field changed
      • addedInput schema / properties / category / maxLength
        Added value: +100
    • Addedget_migration_guide
    • Addedget_release_notes
    • Changedget_spring_guide3 fields changed
      • changedInput schema / properties / detail_level / description
        Previous value: -"Niveau de détail: summary (1500 chars), medium (4000 chars), full (8000 chars)"New value: +"Niveau de détail: summary (1500 chars), medium (4000 chars), full (50000 chars)"
      • changedInput schema / properties / guideId / description
        Previous value: -"L'identifiant du guide Spring Boot (par exemple: 'gs-rest-service', 'gs-accessing-data-jpa')"New value: +"L'identifiant du guide Spring Boot (par exemple: 'rest-service', 'accessing-data-jpa')"
      • addedInput schema / properties / guideId / maxLength
        Added value: +100
    • Addedget_spring_initializr
    • Changedget_spring_project2 fields changed
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Position (en caractères) pour lire la suite d'un document tronqué, fournie dans le pied de la réponse précédente",
        +  "maximum": 10000000,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / projectName / maxLength
        Added value: +100
    • Changedget_spring_reference6 fields changed
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Position (en caractères) pour lire la suite d'un document tronqué, fournie dans le pied de la réponse précédente",
        +  "maximum": 10000000,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / properties / project / description
        Previous value: -"Spring project to search ('boot' for Spring Boot, 'ai' for Spring AI, 'framework' for Spring Framework)"New value: +"Spring project to search ('boot' for Spring Boot, 'ai' for Spring AI, 'framework' for Spring Framework, 'security' for Spring Security, 'data-jpa' for Spring Data JPA, 'batch' for Spring Batch, 'integration' for Spring Integration, 'kafka' for Spring for Apache Kafka, 'modulith' for Spring Modulith, 'cloud-gateway' for Spring Cloud Gateway, 'cloud-config' for Spring Cloud Config)"
      • changedInput schema / properties / project / enum
        Previous value: -[
        -  "boot",
        -  "ai",
        -  "framework"
        -]New value: +[
        +  "boot",
        +  "ai",
        +  "framework",
        +  "security",
        +  "data-jpa",
        +  "batch",
        +  "integration",
        +  "kafka",
        +  "modulith",
        +  "cloud-gateway",
        +  "cloud-config"
        +]
      • addedInput schema / properties / section / maxLength
        Added value: +100
      • addedInput schema / properties / subsection / maxLength
        Added value: +100
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Version de la documentation (ex: '3.4' ou '3.4.2' ; le patch est ignoré). Omis ou 'current' = dernière version. Les anciennes versions peuvent ne pas être publiées.",
        +  "maxLength": 20,
        +  "type": "string"
        +}
    • Changedget_spring_tutorial2 fields changed
      • changedInput schema / properties / detail_level / description
        Previous value: -"Content detail: summary (1500 chars), medium (4000 chars), full (8000 chars)"New value: +"Content detail: summary (1500 chars), medium (4000 chars), full (50000 chars)"
      • addedInput schema / properties / topic / maxLength
        Added value: +200
    • Changedsearch_spring_concepts3 fields changed
      • removedInput schema / properties / category
        Removed value: -{
        -  "description": "Catégorie du concept pour filtrer les résultats",
        -  "enum": [
        -    "core",
        -    "web",
        -    "data",
        -    "security",
        -    "testing",
        -    "production"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / concept / maxLength
        Added value: +200
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Version de la documentation Spring Boot (ex. '3.4' ou '3.4.2' ; le patch est ignoré ; 'current' ou absent = dernière)",
        +  "maxLength": 20,
        +  "type": "string"
        +}
    • Changedsearch_spring_docs4 fields changed
      • changedInput schema / properties / docType / description
        Previous value: -"Type de documentation à rechercher"New value: +"Type de documentation à rechercher. `content` = recherche plein texte (classement BM25) dans les pages déjà lues par le serveur (get_spring_project, get_spring_reference, get_spring_guide) ; inclus dans `all`."
      • changedInput schema / properties / docType / enum
        Previous value: -[
        -  "guides",
        -  "reference",
        -  "api",
        -  "all"
        -]New value: +[
        +  "guides",
        +  "reference",
        +  "projects",
        +  "content",
        +  "all"
        +]
      • addedInput schema / properties / query / maxLength
        Added value: +200
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Version de la documentation de référence Spring Boot (ex. '3.4' ou '3.4.2' ; le patch est ignoré ; 'current' ou absent = dernière). Ne s'applique qu'à la partie référence (et aux pages de référence Boot de la recherche plein texte) : les guides et les projets ne sont pas versionnés et ignorent ce paramètre.",
        +  "maxLength": 20,
        +  "type": "string"
        +}
    • Changedsearch_spring_ecosystem1 field changed
      • addedInput schema / properties / query / maxLength
        Added value: +200
    • Changedsearch_spring_projects1 field changed
      • addedInput schema / properties / query / maxLength
        Added value: +200
    • Addedspring_cache_stats
  2. 12 tool updatesv1.2.8
    • First observedcompare_spring_versions
    • First observeddiagnose_spring_issues
    • First observedget_all_spring_guides
    • First observedget_spring_best_practices
    • First observedget_spring_guide
    • First observedget_spring_project
    • First observedget_spring_reference
    • First observedget_spring_tutorial
    • First observedsearch_spring_concepts
    • First observedsearch_spring_docs
    • First observedsearch_spring_ecosystem
    • First observedsearch_spring_projects

TDQS

B3.1/5.0

Scored across 17 tools

Disambiguation3/5

The three search tools (search_spring_docs, search_spring_concepts, search_spring_ecosystem) heavily overlap in purpose, and get_spring_reference vs search_spring_concepts both target reference docs, making selection genuinely ambiguous. List-vs-detail pairs (get_all_spring_guides/get_spring_guide, search_spring_projects/get_spring_project) are clearer, but the search cluster drags this down.

Naming Consistency4/5

Most tools follow a clean snake_case verb_noun pattern (get_*, search_*, compare_*). A few deviations (spring_cache_stats as a noun-first name, find_spring_dependency vs the get_/search_ verbs) are minor but noticeable.

Tool Count3/5

At 17 tools this sits in the borderline-heavy range. The breadth (guides, projects, reference, initializr, dependencies) justifies most, but several search tools likely could be consolidated, and spring_cache_stats feels like an unrelated maintenance add-on.

Completeness4/5

The surface covers the Spring docs domain well: search, guides, project details, reference sections, version comparison, migration, Initializr, and dependency lookup. No major lifecycle dead ends, though the overlap between search tools suggests some redundancy rather than true gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides AI assistants with intelligent access to project documentation and API references through smart search, contextual rules, and Docset integration. Enables AI to understand project-specific conventions, patterns, and official framework documentation without token limits.
    11
    63 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI-powered development tools including code generation, refactoring, debugging, performance optimization, and test generation, along with smart prompts for code analysis and documentation, and a built-in knowledge base of coding best practices.
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Provides AI models with direct access to documentation for over 600 technologies from DevDocs.io, including popular languages, frameworks, and tools. It enables comprehensive searching, content retrieval, and offline access via an intelligent local caching system.
    12
    2
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to fetch, index, and perform semantic RAG-based searches on API documentation from various sources. It provides tools for hybrid search and collection management, allowing users to access up-to-date documentation from projects like Gemini and FastMCP.
    -