Spring AI Weather Server
Un servidor MCP que proporciona herramientas meteorológicas de la API del Servicio Meteorológico Nacional (weather.gov), construido con Spring Boot.
Documentación
‼️IMPORTANTE‼️
El código fuente de este proyecto es: spring-ai-examples | starter-stdio-server, y la LICENCIA DE CÓDIGO ABIERTO sigue al proyecto original.
El código fuente de este proyecto es: spring-ai-examples | starter-stdio-server, la licencia de código abierto sigue al proyecto original.
Spring AI MCP Weather STDIO Server
Un proyecto inicial de Spring Boot que demuestra cómo construir un servidor de Protocolo de Contexto de Modelo (MCP) que proporciona herramientas relacionadas con el clima utilizando la API del Servicio Meteorológico Nacional (weather.gov). Este proyecto muestra las capacidades del Spring AI MCP Server Boot Starter con implementación de transporte STDIO.
Para más información, consulte la documentación de referencia del MCP Server Boot Starter.
Requisitos previos
- Java 17 o posterior
- Maven 3.6 o posterior
- Comprensión de los conceptos de Spring Boot y Spring AI
- (Opcional) Claude Desktop para la integración con asistentes de IA
Acerca de Spring AI MCP Server Boot Starter
El spring-ai-mcp-server-spring-boot-starter proporciona:
- Configuración automática de los componentes del servidor MCP
- Soporte para modos de operación síncronos y asíncronos
- Implementación de la capa de transporte STDIO
- Registro flexible de herramientas a través de beans de Spring
- Capacidades de notificación de cambios
Estructura del proyecto
src/
├── main/
│ ├── java/
│ │ └── org/springframework/ai/mcp/sample/server/
│ │ ├── McpServerApplication.java # Main application class with tool registration
│ │ └── WeatherService.java # Weather service implementation with MCP tools
│ └── resources/
│ └── application.properties # Server and transport configuration
└── test/
└── java/
└── org/springframework/ai/mcp/sample/client/
└── ClientStdio.java # Test client implementation
Compilación y ejecución
El servidor utiliza el modo de transporte STDIO y normalmente lo inicia automáticamente el cliente. Para compilar el jar del servidor:
./mvnw clean install -DskipTests
Implementación de herramientas
El proyecto demuestra cómo implementar y registrar herramientas MCP utilizando la inyección de dependencias y la auto-configuración de Spring:
@Service
public class WeatherService {
@Tool(description = "Get weather forecast for a specific latitude/longitude")
public String getWeatherForecastByLocation(
double latitude, // Latitude coordinate
double longitude // Longitude coordinate
) {
// Implementation
}
@Tool(description = "Get weather alerts for a US state")
public String getAlerts(
String state // Two-letter US state code (e.g., CA, NY)
) {
// Implementation
}
}
@SpringBootApplication
public class McpServerApplication {
@Bean
public List<ToolCallback> weatherTools(WeatherService weatherService) {
return ToolCallbacks.from(weatherService);
}
}
La auto-configuración registra automáticamente estas herramientas con el servidor MCP. Puede tener múltiples beans que produzcan listas de ToolCallbacks, y la auto-configuración los fusionará.
Herramientas disponibles
1. Herramienta de pronóstico del clima
@Tool(description = "Get weather forecast for a specific latitude/longitude")
public String getWeatherForecastByLocation(
double latitude, // Latitude coordinate
double longitude // Longitude coordinate
) {
// Returns detailed forecast including:
// - Temperature and unit
// - Wind speed and direction
// - Detailed forecast description
}
// Example usage:
CallToolResult forecast = client.callTool(
new CallToolRequest("getWeatherForecastByLocation",
Map.of(
"latitude", 47.6062, // Seattle coordinates
"longitude", -122.3321
)
)
);
2. Herramienta de alertas meteorológicas
@Tool(description = "Get weather alerts for a US state")
public String getAlerts(
String state // Two-letter US state code (e.g., CA, NY)
) {
// Returns active alerts including:
// - Event type
// - Affected area
// - Severity
// - Description
// - Safety instructions
}
// Example usage:
CallToolResult alerts = client.callTool(
new CallToolRequest("getAlerts",
Map.of("state", "NY")
)
);
Integración con clientes
Ejemplo de cliente Java
Crear un cliente MCP manualmente
// Create server parameters
ServerParameters stdioParams = ServerParameters.builder("java")
.args("-Dspring.ai.mcp.server.transport=STDIO",
"-Dspring.main.web-application-type=none",
"-Dlogging.pattern.console=",
"-jar",
"target/mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar")
.build();
// Initialize transport and client
var transport = new StdioClientTransport(stdioParams);
var client = McpClient.sync(transport).build();
El archivo ClientStdio.java demuestra cómo implementar un cliente MCP manualmente.
Para una mejor experiencia de desarrollo, considere utilizar los MCP Client Boot Starters. Estos starters permiten la auto-configuración de múltiples conexiones STDIO y/o SSE a servidores MCP. Consulte los proyectos starter-default-client y starter-webflux-client para ver ejemplos.
Usar MCP Client Boot Starter
Utilice el starter-default-client para conectarse al starter-stdio-server de clima:
-
Siga las instrucciones del readme de
starter-default-clientpara compilar una aplicación cliente demcp-starter-default-client-0.0.1-SNAPSHOT.jar. -
Ejecute el cliente utilizando el archivo de configuración:
java -Dspring.ai.mcp.client.stdio.connections.server1.command=java \
-Dspring.ai.mcp.client.stdio.connections.server1.args=-jar,/Users/christiantzolov/Dev/projects/spring-ai-examples/model-context-protocol/weather/starter-stdio-server/target/mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar \
-Dai.user.input='What is the weather in NY?' \
-Dlogging.pattern.console= \
-jar mcp-starter-default-client-0.0.1-SNAPSHOT.jar
Integración con Claude Desktop
Para integrarse con Claude Desktop, agregue la siguiente configuración a la configuración de Claude Desktop:
{
"mcpServers": {
"spring-ai-mcp-weather": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-Dspring.main.web-application-type=none",
"-Dlogging.pattern.console=",
"-jar",
"/absolute/path/to/mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar"
]
}
}
}
Reemplace /absolute/path/to/ con la ruta real a su archivo jar compilado.
Configuración
Propiedades de la aplicación
Todas las propiedades tienen el prefijo spring.ai.mcp.server:
# Required STDIO Configuration
spring.main.web-application-type=none
spring.main.banner-mode=off
logging.pattern.console=
# Server Configuration
spring.ai.mcp.server.enabled=true
spring.ai.mcp.server.name=my-weather-server
spring.ai.mcp.server.version=0.0.1
# SYNC or ASYNC
spring.ai.mcp.server.type=SYNC
spring.ai.mcp.server.resource-change-notification=true
spring.ai.mcp.server.tool-change-notification=true
spring.ai.mcp.server.prompt-change-notification=true
# Optional file logging
logging.file.name=mcp-weather-stdio-server.log
Notas clave de configuración
-
Requisitos del modo STDIO
- Deshabilitar el tipo de aplicación web (
spring.main.web-application-type=none) - Deshabilitar el banner de Spring (
spring.main.banner-mode=off) - Limpiar el patrón de registro de consola (
logging.pattern.console=)
- Deshabilitar el tipo de aplicación web (
-
Tipo de servidor
SYNC(predeterminado): UtilizaMcpSyncServerpara patrones simples de solicitud-respuestaASYNC: UtilizaMcpAsyncServerpara operaciones no bloqueantes con soporte de Project Reactor