Seamless Milvus vector database integration with Model Context Protocol for AI applications and tools
The Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. Whether you're building an AI-powered IDE, enhancing a chat interface, or creating custom AI workflows, MCP provides a standardized way to connect LLMs with the context they need.
This repository contains a MCP server that provides access to Milvus vector database functionality.
Before using this MCP server, ensure you have:
The recommended way to use this MCP server is to run it directly with uv
without installation. This is how both Claude Desktop and Cursor are configured to use it in the examples below.
If you want to clone the repository:
git clone https://github.com/stephen37/mcp-server-milvus.git
cd mcp-server-milvus
Then you can run the server directly:
uv run src/mcp_server_milvus/server.py --milvus-uri http://localhost:19530
This MCP server can be used with various LLM applications that support the Model Context Protocol:
Install Claude Desktop from https://claude.ai/download
Open your Claude Desktop configuration:
~/Library/Application Support/Claude/claude_desktop_config.json
Add the following configuration:
{
"mcpServers": {
"milvus": {
"command": "/PATH/TO/uv",
"args": [
"--directory",
"/path/to/mcp-server-milvus/src/mcp_server_milvus",
"run",
"server.py",
"--milvus-uri",
"http://localhost:19530"
]
}
}
}
Cursor also supports MCP tools through its Agent feature in Composer. You can add the Milvus MCP server to Cursor in two ways:
Go to Cursor Settings
> Features
> MCP
Click on the + Add New MCP Server
button
Fill out the form:
Type: Select stdio
(since you're running a command)
Name: milvus
Command: /PATH/TO/uv --directory /path/to/mcp-server-milvus/src/mcp_server_milvus run server.py --milvus-uri http://127.0.0.1:19530
⚠️ Note: Use
127.0.0.1
instead oflocalhost
to avoid potential DNS resolution issues.
Create a .cursor/mcp.json
file in your project root:
Create the .cursor
directory in your project root:
mkdir -p /path/to/your/project/.cursor
Create a mcp.json
file with the following content:
{
"mcpServers": {
"milvus": {
"command": "/PATH/TO/uv",
"args": [
"--directory",
"/path/to/mcp-server-milvus/src/mcp_server_milvus",
"run",
"server.py",
"--milvus-uri",
"http://127.0.0.1:19530"
]
}
}
}
Restart Cursor or reload the window
After adding the server, you may need to press the refresh button in the MCP settings to populate the tool list. The Composer Agent will automatically use the Milvus tools when relevant to your queries.
To verify that Cursor has successfully integrated with your Milvus MCP server:
The server provides the following tools:
milvus-text-search
: Search for documents using full text search
collection_name
: Name of collection to searchquery_text
: Text to search forlimit
: Maximum results (default: 5)output_fields
: Fields to include in resultsdrop_ratio
: Proportion of low-frequency terms to ignore (0.0-1.0)milvus-vector-search
: Perform vector similarity search on a collection
collection_name
: Name of collection to searchvector
: Query vectorvector_field
: Field containing vectors to search (default: "vector")limit
: Maximum results (default: 5)output_fields
: Fields to include in resultsmetric_type
: Distance metric (COSINE, L2, IP) (default: "COSINE")filter_expr
: Optional filter expressionmilvus-hybrid-search
: Perform hybrid search combining vector similarity and attribute filtering
collection_name
: Name of collection to searchvector
: Query vectorvector_field
: Field containing vectors to search (default: "vector")filter_expr
: Filter expression for metadatalimit
: Maximum results (default: 5)output_fields
: Fields to include in resultsmetric_type
: Distance metric (COSINE, L2, IP) (default: "COSINE")milvus-multi-vector-search
: Perform vector similarity search with multiple query vectors
collection_name
: Name of collection to searchvectors
: List of query vectorsvector_field
: Field containing vectors to search (default: "vector")limit
: Maximum results per query (default: 5)output_fields
: Fields to include in resultsmetric_type
: Distance metric (COSINE, L2, IP) (default: "COSINE")filter_expr
: Optional filter expressionmilvus-query
: Query collection using filter expressions
collection_name
: Name of collection to queryfilter_expr
: Filter expression (e.g. 'age > 20')output_fields
: Fields to include in resultslimit
: Maximum results (default: 10)milvus-count
: Count entities in a collection
collection_name
: Name of the collectionfilter_expr
: Optional filter expressionmilvus-list-collections
: List all collections in the database
milvus-collection-info
: Get detailed information about a collection
collection_name
: Name of the collectionmilvus-get-collection-stats
: Get statistics about a collection
collection_name
: Name of collectionmilvus-create-collection
: Create a new collection with specified schema
collection_name
: Name for the new collectionschema
: Collection schema definitionindex_params
: Optional index parametersmilvus-load-collection
: Load a collection into memory for search and query
collection_name
: Name of collection to loadreplica_number
: Number of replicas (default: 1)milvus-release-collection
: Release a collection from memory
collection_name
: Name of collection to releasemilvus-get-query-segment-info
: Get information about query segments
collection_name
: Name of collectionmilvus-get-collection-loading-progress
: Get the loading progress of a collection
collection_name
: Name of collectionmilvus-insert-data
: Insert data into a collection
collection_name
: Name of collectiondata
: Dictionary mapping field names to lists of valuesmilvus-bulk-insert
: Insert data in batches for better performance
collection_name
: Name of collectiondata
: Dictionary mapping field names to lists of valuesbatch_size
: Number of records per batch (default: 1000)milvus-upsert-data
: Upsert data into a collection (insert or update if exists)
collection_name
: Name of collectiondata
: Dictionary mapping field names to lists of valuesmilvus-delete-entities
: Delete entities from a collection based on filter expression
collection_name
: Name of collectionfilter_expr
: Filter expression to select entities to deletemilvus-create-dynamic-field
: Add a dynamic field to an existing collection
collection_name
: Name of collectionfield_name
: Name of the new fielddata_type
: Data type of the fielddescription
: Optional descriptionmilvus-create-index
: Create an index on a vector field
collection_name
: Name of collectionfield_name
: Field to indexindex_type
: Type of index (IVF_FLAT, HNSW, etc.) (default: "IVF_FLAT")metric_type
: Distance metric (COSINE, L2, IP) (default: "COSINE")params
: Additional index parametersmilvus-get-index-info
: Get information about indexes in a collection
collection_name
: Name of collectionfield_name
: Optional specific field to get index info forMILVUS_URI
: Milvus server URI (can be set instead of --milvus-uri)MILVUS_TOKEN
: Optional authentication tokenMILVUS_DB
: Database name (defaults to "default")To run the server directly:
uv run server.py --milvus-uri http://localhost:19530
What are the collections I have in my Milvus DB?
Claude will then use MCP to check this information on our Milvus DB.
I'll check what collections are available in your Milvus database.
> View result from milvus-list-collections from milvus (local)
Here are the collections in your Milvus database:
1. rag_demo
2. test
3. chat_messages
4. text_collection
5. image_collection
6. customized_setup
7. streaming_rag_demo
Find documents in my text_collection that mention "machine learning"
Claude will use the full-text search capabilities of Milvus to find relevant documents:
I'll search for documents about machine learning in your text_collection.
> View result from milvus-text-search from milvus (local)
Here are the documents I found that mention machine learning:
[Results will appear here based on your actual data]
In Cursor's Composer, you can ask:
Create a new collection called 'articles' in Milvus with fields for title (string), content (string), and a vector field (128 dimensions)
Cursor will use the MCP server to execute this operation:
I'll create a new collection called 'articles' with the specified fields.
> View result from milvus-create-collection from milvus (local)
Collection 'articles' has been created successfully with the following schema:
- title: string
- content: string
- vector: float vector[128]
If you see errors like "Failed to connect to Milvus server":
docker ps
(if using Docker)127.0.0.1
instead of localhost
in the URIIf you see authentication errors:
MILVUS_TOKEN
is correctIf the MCP tools don't appear in Claude Desktop or Cursor:
If you continue to experience issues:
Discover seamless cross-platform e-commerce link conversion and product promotion with Taobao MCP Service supporting Taobao JD and Pinduoduo integrations
Configure and run ORAS MCP Server easily with Docker and VS Code integration
APIs for extreme p-value calculations in R via Python using FastMCP and pyper integration
Integrate and manage Cloudera Machine Learning with Python APIs for jobs, models, experiments, and project management
Discover MCP agent strategies supporting Function Calling and ReAct via HTTP SSE streamable protocols
Real-time and historical cryptocurrency market data via MCP server supporting major exchanges and comprehensive analysis