In today’s organizations, data is scattered across countless platforms—Slack, Gmail, SQL databases, Google Drive, GitHub, and more. Bringing these data sources into one unified, queryable system is often complex, requiring expensive data integration platforms or risky cloud-based services.
I’ve solved this by building a 100% local MCP (Model Context Protocol) server that can connect to 200+ data sources and enable natural language querying across them via a simple chat interface.
Let’s walk you through how I’ve built this powerful federated query system using MindsDB, Cursor IDE, and Docker.
This project revolves around building a local-first, modular, and scalable MCP server that:
Connects to over 200+ data sources.
Allows natural language querying across structured and unstructured platforms.
Is completely self-hosted, ensuring maximum data privacy and security.
I’ve used:
🧠 MindsDB: A federated query engine that understands complex, multi-source queries.
💻 Cursor IDE: The interface that hosts the MCP chat and connects to the server.
🐳 Docker: For local containerization and seamless deployment.
Feature | Description |
---|---|
🔍 Multi-source Querying | Query 200+ data sources with a single natural language prompt. |
🧠 Context-Aware AI | AI responses tailored to your connected organizational data. |
💬 Real-time Chat Interface | Unified chat window powered by Cursor IDE. |
🔧 Modular Design | Easily plug in new data sources via MindsDB integrations. |
🐳 Docker-based Deployment | Fully local deployment ensuring security and control. |
🔒 Privacy-first | Data remains on your local machines—no cloud dependency. |
User submits a query via Cursor’s chat interface.
Cursor client forwards the query to the MCP server.
MCP server sends the query to MindsDB’s federated query engine.
MindsDB retrieves results from the relevant connected data sources.
MCP server receives results and passes them back to Cursor.
Cursor displays the AI-generated response in the chat interface.
Docker
Cursor IDE
MindsDB (installed locally)
MindsDB provides a pre-built Docker image for quick setup.
To install MindsDB locally, I ran the following command:
docker run --name mindsdb_container -e MINDSDB_APIS="http,mcp" \
-p 47334:47334 -p 47337:47337 mindsdb/mindsdb
After installing, go to 127.0.0.1:47334
in your browser to access the MindsDB editor.
This GUI allows me to:
Connect over 200+ data sources
Run SQL queries against them
Manage the federated query engine visually
Let’s start building our federated query engine by connecting our data sources to MindsDB.
We use Slack, Gmail, GitHub, and Hacker News as our federated data sources.
After building the federated query engine, let’s unify our data sources by connecting them to MindsDB’s MCP server.
Go to: File → Preferences → Cursor Settings → MCP → Add new global MCP server
In the JSON file, add the following 👇
Done! Our MindsDB MCP server is live and connected to Cursor!
The MCP server offers two tools:
list_databases
: Lists all data sources connected to MindsDB.query
: Answers user queries on the federated data.Apart from Claude and Cursor, the MindsDB MCP server also works with the new OpenAI MCP integration:
The usage of list_databases
is depicted below. We asked it to list all the data sources it can access and retrieved the four data sources we connected earlier:
Below is another usage, where we asked it to list the available Slack channels.
While this is quite basic, I have shown a much more sophisticated usage in the video attached at the top.
I can now submit queries directly via Cursor’s chat interface:
“Show me the last five emails from Gmail.”
“Summarize recent Slack mentions.”
“Fetch the top stories from Hacker News.”
“List all open GitHub issues in my repository.”
Data Privacy: Fully local, no cloud dependency.
Unified Access: Query Slack, Gmail, GitHub, and more from one place.
Scalable: Easy to add new data sources.
Simple Interface: Natural language queries—no SQL skills required.
I built this unified MCP server to make data querying seamless, private, and conversational.
It’s:
💻 Local-first for security.
🔧 Modular for flexibility.
💬 Simple for everyday use.
If you’re looking to own your data workflow, this is a powerful, scalable approach.