Meilisearch/meilisearch-mcp
Built by Metorial, the integration platform for agentic AI.
Meilisearch/meilisearch-mcp
Server Summary
Index management
Document management
Settings management
Task monitoring
API key management
Logging and monitoring
Dynamic connection configuration
Smart search across indices
A Model Context Protocol (MCP) server for interacting with Meilisearch through LLM interfaces like Claude.
# Clone repository
git clone
cd meilisearch-mcp
# Create virtual environment and install
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -e .
# Install development dependencies (for testing and development)
uv pip install -r requirements-dev.txt
Start Meilisearch server:
# Using Docker (recommended for development)
docker run -d -p 7700:7700 getmeili/meilisearch:v1.6
# Or using brew (macOS)
brew install meilisearch
meilisearch
# Or download from https://github.com/meilisearch/meilisearch/releases
Install development tools:
# Install uv for Python package management
pip install uv
# Install Node.js for MCP Inspector testing
# Visit https://nodejs.org/ or use your package manager
This project includes comprehensive integration tests that verify MCP tool functionality:
# Run all tests
python -m pytest tests/ -v
# Run specific test file
python -m pytest tests/test_mcp_client.py -v
# Run tests with coverage report
python -m pytest --cov=src tests/
# Run tests in watch mode (requires pytest-watch)
pytest-watch tests/
Important: Tests require a running Meilisearch instance on http://localhost:7700
. The tests will:
# Format code with Black
black src/ tests/
# Run type checking (if mypy is configured)
mypy src/
# Lint code (if flake8 is configured)
flake8 src/ tests/
MEILI_HTTP_ADDR=http://localhost:7700 # Default Meilisearch URL
MEILI_MASTER_KEY=your_master_key # Optional: Default Meilisearch API key
The server provides tools to view and update connection settings at runtime:
get-connection-settings
: View current connection URL and API key statusupdate-connection-settings
: Update URL and/or API key to connect to a different Meilisearch instanceExample usage through MCP:
// Get current settings
{
"name": "get-connection-settings"
}
// Update connection settings
{
"name": "update-connection-settings",
"arguments": {
"url": "http://new-host:7700",
"api_key": "new-api-key"
}
}
The server provides a flexible search tool that can search across one or all indices:
search
: Search through Meilisearch indices with optional parametersExample usage through MCP:
// Search in a specific index
{
"name": "search",
"arguments": {
"query": "search term",
"indexUid": "movies",
"limit": 10
}
}
// Search across all indices
{
"name": "search",
"arguments": {
"query": "search term",
"limit": 5,
"sort": ["releaseDate:desc"]
}
}
Available search parameters:
query
: The search query (required)indexUid
: Specific index to search in (optional)limit
: Maximum number of results per index (optional, default: 20)offset
: Number of results to skip (optional, default: 0)filter
: Filter expression (optional)sort
: Sorting rules (optional)python -m src.meilisearch_mcp
To use this with Claude Desktop, add the following to your claude_desktop_config.json
:
{
"mcpServers": {
"meilisearch": {
"command": "uvx",
"args": ["-n", "meilisearch-mcp"]
}
}
}
npx @modelcontextprotocol/inspector python -m src.meilisearch_mcp
get-connection-settings
: View current Meilisearch connection URL and API key statusupdate-connection-settings
: Update URL and/or API key to connect to a different instancecreate-index
: Create a new index with optional primary keylist-indexes
: List all available indexesdelete-index
: Delete an existing index and all its documentsget-index-metrics
: Get detailed metrics for a specific indexget-documents
: Retrieve documents from an index with paginationadd-documents
: Add or update documents in an indexsearch
: Flexible search across single or multiple indices with filtering and sorting optionsget-settings
: View current settings for an indexupdate-settings
: Update index settings (ranking, faceting, etc.)get-keys
: List all API keyscreate-key
: Create new API key with specific permissionsdelete-key
: Delete an existing API keyget-task
: Get information about a specific taskget-tasks
: List tasks with optional filters:
limit
: Maximum number of tasks to returnfrom
: Number of tasks to skipreverse
: Sort order of tasksbatchUids
: Filter by batch UIDsuids
: Filter by task UIDscanceledBy
: Filter by cancellation sourcetypes
: Filter by task typesstatuses
: Filter by task statusesindexUids
: Filter by index UIDsafterEnqueuedAt
/beforeEnqueuedAt
: Filter by enqueue timeafterStartedAt
/beforeStartedAt
: Filter by start timeafterFinishedAt
/beforeFinishedAt
: Filter by finish timecancel-tasks
: Cancel pending or enqueued tasksdelete-tasks
: Delete completed taskshealth-check
: Basic health checkget-health-status
: Comprehensive health statusget-version
: Get Meilisearch version informationget-stats
: Get database statisticsget-system-info
: Get system-level informationWe welcome contributions! Please follow these guidelines:
main
# Create feature branch
git checkout -b feature/your-feature-name
# Make your changes, write tests first
# Edit files...
# Run tests to ensure everything works
python -m pytest tests/ -v
# Format code
black src/ tests/
# Commit and push
git add .
git commit -m "Add feature description"
git push origin feature/your-feature-name
This project uses automated versioning and publishing to PyPI. The release process is designed to be simple and automated.
Automated Publishing: When the version number in pyproject.toml
changes on the main
branch, a GitHub Action automatically:
Version Detection: The workflow compares the current version in pyproject.toml
with the previous commit to detect changes
PyPI Publishing: Uses PyPA's official publish action with trusted publishing (no manual API keys needed)
To create a new release, follow these steps:
Follow Semantic Versioning (MAJOR.MINOR.PATCH):
# 1. Create a branch from latest main
git checkout main
git pull origin main
git checkout -b release/v0.5.0
# 2. Update version in pyproject.toml
# Edit the version = "0.4.0" line to your new version
# 3. Commit and push
git add pyproject.toml
git commit -m "Bump version to 0.5.0"
git push origin release/v0.5.0
# 4. Create PR and get it reviewed/merged
gh pr create --title "Release v0.5.0" --body "Bump version for release"
Once the PR is approved and merged to main
, the GitHub Action will automatically:
pip install meilisearch-mcp
After merging, verify the release:
# Check GitHub Action status
gh run list --workflow=publish.yml
# Verify on PyPI (may take a few minutes)
pip index versions meilisearch-mcp
# Test installation of new version
pip install --upgrade meilisearch-mcp
The automated release is handled by .github/workflows/publish.yml
, which:
main
branchpyproject.toml
version changedRelease didn't trigger: Check that the version in pyproject.toml
actually changed between commits
Build failed: Check the GitHub Actions logs for Python package build errors
PyPI publish failed: Verify the package name and that trusted publishing is configured properly
Version conflicts: Ensure the new version number hasn't been used before on PyPI
pip install -e .
pip install meilisearch-mcp
pip install meilisearch-mcp==0.5.0
MIT