Skip to content

apache/solr-mcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Project Status: Incubating

Solr MCP Server

A Spring AI Model Context Protocol (MCP) server that provides tools for interacting with Apache Solr. Enables AI assistants like Claude to search, index, and manage Solr collections through the MCP protocol.

What's inside

  • πŸ” Search Solr collections with filtering, faceting, and pagination
  • πŸ“ Index documents in JSON, CSV, and XML
  • πŸ“Š Manage collections and view statistics
  • πŸ”§ Inspect schema
  • πŸ”Œ Transports: STDIO (Claude Desktop) and HTTP (MCP Inspector)
  • πŸ” OAuth2 security with Auth0 (HTTP mode only)
  • 🐳 Docker images built with Jib

Get started (users)

  • Prerequisites: Java 25+, Docker (and Docker Compose), Git
  • Start Solr with sample data:
    docker compose up -d
  • Run the server:
    • STDIO mode (default):
      • Gradle:
        ./gradlew bootRun
      • JAR:
        ./gradlew build
        java -jar build/libs/solr-mcp-0.0.1-SNAPSHOT.jar
      • Docker:
        docker run -i --rm ghcr.io/apache/solr-mcp:latest
    • HTTP mode:
      • Gradle:
        PROFILES=http ./gradlew bootRun
      • JAR:
        PROFILES=http java -jar build/libs/solr-mcp-0.0.1-SNAPSHOT.jar
      • Docker:
        docker run -p 8080:8080 --rm -e PROFILES=http ghcr.io/apache/solr-mcp:latest

For more options (custom SOLR_URL, Linux host networking) see the Deployment Guide: docs/DEPLOYMENT.md

Claude Desktop

Add this to your Claude Desktop config (macOS path shown); then restart Claude.

STDIO mode (default)

Using Docker:

{
  "mcpServers": {
    "solr-mcp": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/apache/solr-mcp:latest"],
        "env": {
            "SOLR_URL": "http://localhost:8983/solr/"
        }
    }
  }
}

Using JAR:

{
    "mcpServers": {
        "solr-mcp": {
            "command": "java",
            "args": [
                "-jar",
                "/absolute/path/to/solr-mcp-0.0.1-SNAPSHOT.jar"
            ],
            "env": {
                "SOLR_URL": "http://localhost:8983/solr/"
            }
        }
    }
}

HTTP mode

Using Docker:

{
    "mcpServers": {
        "solr-mcp": {
            "command": "docker",
            "args": [
                "run",
                "-p",
                "8080:8080",
                "--rm",
                "ghcr.io/apache/solr-mcp:latest"
            ],
            "env": {
                "PROFILES": "http",
                "SOLR_URL": "http://localhost:8983/solr/"
            }
        }
    }
}

Using JAR:

{
    "mcpServers": {
        "solr-mcp": {
            "command": "java",
            "args": [
                "-jar",
                "/absolute/path/to/solr-mcp-0.0.1-SNAPSHOT.jar"
            ],
            "env": {
                "PROFILES": "http",
                "SOLR_URL": "http://localhost:8983/solr/"
            }
    }
  }
}

Connecting to a running HTTP server

If you already have the MCP server running in HTTP mode (via Gradle, JAR, or Docker), you can connect Claude Desktop to it using mcp-remote:

Running via Gradle:

PROFILES=http ./gradlew bootRun

Running locally (JAR):

PROFILES=http java -jar build/libs/solr-mcp-0.0.1-SNAPSHOT.jar

Running via Docker:

docker run -p 8080:8080 --rm -e PROFILES=http ghcr.io/apache/solr-mcp:latest

Then add to your claude_desktop_config.json:

{
    "mcpServers": {
        "solr-mcp-http": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "http://localhost:8080/mcp"
            ]
        }
    }
}

More configuration options: docs/DEPLOYMENT.md#docker-images-with-jib

Security (OAuth2)

The Solr MCP server supports OAuth2 authentication when running in HTTP mode, providing secure access control for your MCP tools.

Features

  • OAuth2 Resource Server: JWT token validation using Auth0 (or any OAuth2 provider)
  • HTTP Mode Only: Security is only active when using the http profile
  • CORS Support: Enabled for MCP Inspector compatibility
  • Machine-to-Machine: Uses Client Credentials flow for service authentication

Quick Setup

  1. Configure Auth0 (see detailed guide: docs/AUTH0_SETUP.md)

    • Create an Auth0 Application (Machine to Machine)
    • Create an Auth0 API with your audience identifier
    • Note your Domain, Client ID, Client Secret, and Audience
  2. Set Environment Variable:

    export OAUTH2_ISSUER_URI=https://your-tenant.auth0.com/
    export PROFILES=http
  3. Run the Server:

    ./gradlew bootRun
  4. Get Access Token (using convenience script):

    ./scripts/get-auth0-token.sh --domain your-tenant.auth0.com \
      --client-id YOUR_CLIENT_ID \
      --client-secret YOUR_CLIENT_SECRET \
      --audience https://solr-mcp-api
  5. Use the Token:

    curl -H "Authorization: Bearer YOUR_TOKEN" \
      http://localhost:8080/mcp

For complete setup instructions, see docs/AUTH0_SETUP.md

Available MCP tools

Tool Description
search Search Solr collections with advanced query options
index_documents Index documents from JSON, CSV, or XML
listCollections List all available Solr collections
getCollectionStats Get statistics and metrics for a collection
checkHealth Check the health status of a collection
getSchema Retrieve schema information for a collection

Screenshots

  • Claude Desktop (STDIO):

    Claude Desktop STDIO

  • MCP Inspector (HTTP):

    MCP Inspector HTTP

  • MCP Inspector (HTTP with OAuth2 - Success):

    MCP Inspector HTTP OAuth Success

  • MCP Inspector (HTTP with OAuth2 - Failure):

    MCP Inspector HTTP OAuth Failure

  • MCP Inspector (STDIO):

    MCP Inspector STDIO

Documentation

Contributing

We welcome contributions!

Support

License

Apache License 2.0 β€” see LICENSE

Acknowledgments

Built with:

About

Solr MCP Server

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5