This document describes the architecture and design decisions of the Solr MCP Server.
The codebase follows a clean, modular architecture organized by functionality:
src/main/java/org/apache/solr/mcp/server/
├── Main.java # Application entry point
├── config/ # Configuration classes
│ ├── SolrConfig.java # Solr client bean configuration
│ └── SolrConfigurationProperties.java # Solr connection properties
├── search/ # Search functionality
│ ├── SearchService.java # MCP tool for searching Solr
│ └── SearchResponse.java # Search result DTOs
├── indexing/ # Document indexing functionality
│ ├── IndexingService.java # MCP tool for indexing documents
│ └── documentcreator/ # Document format parsers
│ ├── IndexingDocumentCreator.java # Orchestrator that delegates to format-specific creators
│ ├── JsonDocumentCreator.java # JSON document parser (implements SolrDocumentCreator)
│ ├── CsvDocumentCreator.java # CSV document parser (implements SolrDocumentCreator)
│ ├── XmlDocumentCreator.java # XML document parser (implements SolrDocumentCreator)
│ ├── SolrDocumentCreator.java # Common interface for document creators
│ ├── FieldNameSanitizer.java # Field name sanitization utility
│ └── DocumentProcessingException.java # Indexing exceptions
└── metadata/ # Collection management functionality
├── CollectionService.java # MCP tools for collection operations
├── SchemaService.java # MCP tool for schema retrieval
├── CollectionUtils.java # Collection utility methods
└── Dtos.java # Collection-related DTOs (records)
Service classes annotated with @McpTool expose functionality to AI assistants:
Spring Boot configuration using properties files:
application.properties - Default configurationapplication-stdio.properties - STDIO transport profileapplication-http.properties - HTTP transport profileStrategy pattern implementation for parsing different document formats:
Plain Java classes (POJOs) used as data transfer objects:
Spring AI MCP provides a robust framework for implementing the Model Context Protocol with:
STDIO Mode Compatibility: Docker images built with Spring Boot Buildpacks output logs and diagnostic information to stdout, which interferes with the MCP protocol's STDIO transport. The MCP protocol requires a clean stdout channel for protocol messages.
Additional Jib benefits:
The document creator pattern allows for:
src/test/java/org/apache/solr/mcp/server/
├── McpToolRegistrationTest.java # MCP tool registration tests
├── BuildInfoReader.java # Test utility for build metadata
├── SampleClient.java # Example MCP client
├── search/
│ ├── SearchServiceTest.java # Unit tests
│ └── SearchServiceDirectTest.java # Integration tests
├── indexing/
│ ├── IndexingServiceTest.java
│ ├── IndexingServiceDirectTest.java
│ ├── CsvIndexingTest.java
│ └── XmlIndexingTest.java
├── metadata/
│ ├── CollectionServiceTest.java
│ ├── CollectionServiceIntegrationTest.java
│ ├── SchemaServiceTest.java
│ └── SchemaServiceIntegrationTest.java
└── containerization/
├── DockerImageStdioIntegrationTest.java
└── DockerImageHttpIntegrationTest.java
All dependencies are managed via Gradle version catalogs in gradle/libs.versions.toml:
SOLR_URL: Solr instance URL (default: http://localhost:8983/solr/)PROFILES: Set to stdio or http to select transport modeSPRING_DOCKER_COMPOSE_ENABLED: Enable/disable Docker Compose integrationAuthentication & Authorization
Additional Tools
Performance
Monitoring
Multi-Solr Support