DB MCP (HR CSV to SQLite)
An open-source MCP server that imports HR CSV data into an in-memory SQLite database for structured querying and metadata retrieval. It enables users to perform read-only SQL queries and structured searches on employee data through natural language.
README
DB MCP (HR CSV → SQLite) — Open Source Reference
This folder contains a fully open-source Model Context Protocol (MCP) server implementation that:
- Loads an HR “people” CSV file
- Reads 3 lines of metadata at the top of the CSV (comment lines starting with
#) - Imports the CSV into an in-memory SQLite database
- Exposes read-only MCP tools over stdio (newline-delimited JSON-RPC 2.0)
No Claude Desktop setup is required. A small Python client is included for testing.
Files
db_mcp_server.py— MCP server (stdio)db_mcp_client.py— simple MCP stdio client for testingdata/hr_people.csv— sample HR CSV with 3-line metadata header
Run the server
python db_mcp_server.py
Optionally pass a custom CSV path:
python db_mcp_server.py /path/to/your/hr_people.csv
Or set an environment variable:
HR_CSV_PATH=/path/to/your/hr_people.csv python db_mcp_server.py
Test with the included client (recommended)
python db_mcp_client.py
You should see:
initializehandshaketools/list- a sample SQL query result
- an interactive prompt to run more
SELECTqueries
Tools exposed
hr_metadata— returns the 3-line metadata header as a JSON objecthr_schema— returns the SQLite schema for tableemployeeshr_query— execute read-onlySELECT/WITHSQL querieshr_find_people— structured search without writing SQL
CSV metadata format (first 3 lines)
Example:
# dataset: HR People
# description: Synthetic employee roster for MCP demo (no real PII)
# primary_key: employee_id
employee_id,first_name,last_name,...
Metadata lines are parsed as key: value. If a line is not key: value, it is stored as meta_line_1, meta_line_2, etc.
Notes for sharing
- Everything here is standard-library Python (SQLite + CSV).
- The demo data is synthetic (no real PII).
- The server writes only JSON-RPC to stdout. Logs go to stderr (safe for stdio MCP).
Samples
-Terminal 1
C:\Users\davidzhang\Downloads\ml\ml\db_mcp_1>python mcp_server.py data/hr_people.csv
[db_mcp_server] Ready. Loaded data/hr_people.csv. Tools: 4
-Terminal 2
C:\Users\davidzhang\Downloads\ml\ml\db_mcp_1>python client.py --csv ./data/hr_people.csv
[db_mcp_server] Ready. Loaded ./data/hr_people.csv. Tools: 4
[db_mcp_server] Internal error:
Traceback (most recent call last):
File "C:\Users\davidzhang\Downloads\ml\ml\db_mcp_1\db_mcp_server.py", line 537, in main
server.handle(msg)
File "C:\Users\davidzhang\Downloads\ml\ml\db_mcp_1\db_mcp_server.py", line 493, in handle
self.handle_initialize(id_value, params)
File "C:\Users\davidzhang\Downloads\ml\ml\db_mcp_1\db_mcp_server.py", line 438, in handle_initialize
Initialize response:
{
"jsonrpc": "2.0",
"error": {
"code": -32603,
"message": "Internal error"
},
"id": 1
}
_send(resp)
Tools:
File "C:\Users\davidzhang\Downloads\ml\ml\db_mcp_1\db_mcp_server.py", line 45, in _send
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tools": [
{
"name": "hr_metadata",
"title": "HR dataset metadata",
"description": "Return the 3-line metadata header read from the HR CSV file.",
"inputSchema": {
"type": "object",
"additionalProperties": false
},
"outputSchema": {
"type": "object"
}
},
{
"name": "hr_schema",
"title": "HR table schema",
"description": "Return SQLite schema information for the employees table.",
"inputSchema": {
"type": "object",
"additionalProperties": false
},
"outputSchema": {
"type": "object"
}
},
{
"name": "hr_query",
"title": "Run a read-only SQL query",
"description": "Execute a read-only SQL query (SELECT/WITH only) against the in-memory SQLite database.\nTable name: employees\nExample: SELECT department, COUNT(*) AS n FROM employees GROUP BY department",
"inputSchema": {
"type": "object",
"properties": {
"sql": {
"type": "string",
"description": "A SELECT/WITH SQL query to run."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"description": "Optional row limit (wraps the query)."
}
},
"required": [
"sql"
],
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"properties": {
"rowCount": {
"type": "integer"
},
"rows": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"rowCount",
"rows"
]
}
},
{
"name": "hr_find_people",
"title": "Find employees (structured filters)",
"description": "Find employees by common HR filters without writing SQL.",
"inputSchema": {
"type": "object",
"properties": {
"name_contains": {
"type": "string",
"description": "Substring match against first or last name (case-insensitive)."
},
"department": {
"type": "string"
},
"title": {
"type": "string"
},
"location": {
"type": "string"
},
"min_salary": {
"type": "number"
},
"max_salary": {
"type": "number"
},
"hired_after": {
"type": "string",
"description": "YYYY-MM-DD"
},
"hired_before": {
"type": "string",
"description": "YYYY-MM-DD"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 25
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"properties": {
"rowCount": {
"type": "integer"
},
"rows": {
"type": "array",
"items": {
"type": "object"
}
},
"appliedFilters": {
"type": "object"
}
},
"required": [
"rowCount",
"rows",
"appliedFilters"
]
}
}
}
}
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.