CtrlK
CommunityDocumentationLog inGet started
Tessl Logo

tessl/maven-org-springframework-ai--spring-ai-starter-mcp-server

Spring Boot Starter for building Model Context Protocol (MCP) servers with auto-configuration, annotation-based tool/resource/prompt definitions, and support for STDIO, SSE, and Streamable-HTTP transports

Overview
Eval results
Files

index.mddocs/

Spring AI MCP Server Starter

Spring Boot starter for building Model Context Protocol (MCP) servers with auto-configuration, annotation-based definitions, and multiple transport protocols.

Quick Reference

AspectDetails
Packageorg.springframework.ai:spring-ai-starter-mcp-server
TypeMaven Spring Boot Starter
LanguageJava
ProtocolsSTDIO, SSE, Streamable-HTTP, Stateless
Server TypesSynchronous (SYNC), Asynchronous (ASYNC)

Installation

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-server</artifactId>
</dependency>

Quick Start

1. Basic Tool Definition

@SpringBootApplication
public class MyMcpServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyMcpServerApplication.class, args);
    }
}

@Component
public class MyTools {
    @McpTool(name = "add", description = "Add two numbers")
    public int add(
        @McpToolParam(description = "First number", required = true) int a,
        @McpToolParam(description = "Second number", required = true) int b) {
        return a + b;
    }
}

2. Basic Configuration

spring.ai.mcp.server.stdio=true
spring.ai.mcp.server.name=my-mcp-server
spring.ai.mcp.server.version=1.0.0

Complete Quick Start Guide

Core Concepts

Server Capabilities

  • Tools: Executable functions with JSON schema parameters
  • Resources: URI-addressable data with template support
  • Prompts: Reusable prompt templates with arguments
  • Completions: Auto-completion for prompt arguments

Annotation Types

AnnotationPurposeExample
@McpToolDefine executable tool@McpTool(name = "calc")
@McpResourceDefine resource@McpResource(uri = "config://{key}")
@McpPromptDefine prompt template@McpPrompt(name = "greeting")
@McpCompleteDefine completion@McpComplete(prompt = "city")

Transport Protocols

ProtocolUse CaseConfiguration
STDIOCLI toolsspring.ai.mcp.server.stdio=true
SSEWeb apps (default)spring.ai.mcp.server.protocol=SSE
StreamableHTTP streamingspring.ai.mcp.server.protocol=STREAMABLE
StatelessScalable deploymentsspring.ai.mcp.server.protocol=STATELESS

Server Types

TypeExecution ModelReturn Types
SYNCBlocking operationsPrimitives, Objects, MCP types
ASYNCReactive operationsMono<T>, Flux<T>

Essential Imports

// Annotations
import org.springaicommunity.mcp.annotation.McpTool;
import org.springaicommunity.mcp.annotation.McpToolParam;
import org.springaicommunity.mcp.annotation.McpResource;
import org.springaicommunity.mcp.annotation.McpPrompt;
import org.springaicommunity.mcp.annotation.McpArg;

// Context
import org.springaicommunity.mcp.server.McpSyncRequestContext;
import org.springaicommunity.mcp.server.McpAsyncRequestContext;

// Schema Types
import org.springaicommunity.mcp.schema.McpSchema.*;

// Spring
import org.springframework.stereotype.Component;
import org.springframework.context.annotation.Bean;

Common Patterns

Error Handling

@McpTool(name = "divide", description = "Divide two numbers")
public CallToolResult divide(
        @McpToolParam(description = "Numerator", required = true) double a,
        @McpToolParam(description = "Denominator", required = true) double b) {
    
    if (b == 0) {
        return CallToolResult.builder()
            .addTextContent("Error: Division by zero")
            .isError(true)
            .build();
    }
    
    return CallToolResult.builder()
        .addTextContent("Result: " + (a / b))
        .build();
}

Progress Tracking

@McpTool(name = "process", description = "Process with progress")
public String process(McpSyncRequestContext context, 
                      @McpToolParam(description = "Data") String data) {
    context.info("Starting");
    context.progress(0);
    
    // Work...
    context.progress(50);
    
    // More work...
    context.progress(100);
    return "Done";
}

Resource with URI Template

@McpResource(
    uri = "config://{key}",
    name = "Configuration",
    description = "Get config value")
public String getConfig(String key) {
    return configService.get(key);
}

Configuration Quick Reference

# Server basics
spring.ai.mcp.server.enabled=true
spring.ai.mcp.server.name=mcp-server
spring.ai.mcp.server.version=1.0.0
spring.ai.mcp.server.type=SYNC  # or ASYNC

# Transport
spring.ai.mcp.server.stdio=false
spring.ai.mcp.server.protocol=SSE  # SSE, STREAMABLE, STATELESS

# Capabilities
spring.ai.mcp.server.capabilities.tool=true
spring.ai.mcp.server.capabilities.resource=true
spring.ai.mcp.server.capabilities.prompt=true
spring.ai.mcp.server.capabilities.completion=true

# Timeouts
spring.ai.mcp.server.request-timeout=20s

Troubleshooting Quick Fixes

ProblemSolution
Tool not discoveredEnsure class is @Component and method is public
Connection failsCheck transport config and port availability
Schema generation failsUse supported types or explicit CallToolRequest
Context unavailableVerify stateful protocol (not STATELESS)

Documentation Structure

Guides

Examples

Reference

Key Features

  • Automatic Discovery: Annotated methods auto-registered
  • JSON Schema Generation: Parameters auto-converted to schemas
  • Spring Boot Integration: Full auto-configuration and DI
  • Change Notifications: Dynamic tool/resource/prompt updates
  • Context Access: Logging, progress, elicitation, sampling
  • Tool Conversion: ToolCallback beans → MCP specifications
  • Multiple Return Types: Primitives, objects, reactive types

Next Steps

  1. New to MCP? → Start with Quick Start Guide
  2. Need configuration help? → See Configuration Guide
  3. Building complex tools? → Check Real-World Scenarios
  4. API details? → Browse Reference Documentation

Support Resources

  • Spring AI Documentation: https://docs.spring.io/spring-ai/reference/
  • MCP Specification: https://modelcontextprotocol.io/
  • GitHub Repository: https://github.com/spring-projects/spring-ai
tessl i tessl/maven-org-springframework-ai--spring-ai-starter-mcp-server@1.1.0

docs

index.md

tile.json