Mini CRM MCP
Enables querying and interacting with a SQLite CRM database of sales leads using natural language, offering tools for pipeline summaries, lead search, and weighted forecasting.
README
Mini CRM MCP
A complete, end-to-end Model Context Protocol server over crm/leads.db (40 sales leads). An
MCP client or LLM can ask "give me the funnel by stage", "what's in Priya's pipeline", or "what's
our weighted forecast" and get structured answers without ever writing SQL.
This is a practical server (like the sibling Mcp_venki is a teaching one). It replaced an
earlier StudentAnalytics prototype — same architecture, pointed at real CRM data.
Pipeline stages: New → Contacted → Qualified → Proposal → Won / Lost.
What it exposes
Tools (model-callable)
| Tool | Purpose |
|---|---|
pipeline_summary() |
The funnel: count + total value per stage |
list_owners() |
Every rep with lead count and total pipeline value |
list_leads(status?, owner?, source?, min_value?, limit=25) |
Filtered lead list (all filters ANDed) |
search_leads(query, limit=25) |
Free-text search across name / company / email |
get_lead(lead_id) |
One full lead record + close probability |
owner_leaderboard() |
Per-rep won / open / weighted-forecast value |
forecast() |
Weighted revenue forecast; streams progress via ctx |
Resources (loadable read-only data)
crm://schema— the table schema + stage ordercrm://lead/{lead_id}— a single lead as a readable card (URI template)
Prompt
pipeline_review(owner?)— template that asks the model to write a pipeline review
The weighted forecast
Each stage has a close probability (New 10%, Contacted 25%, Qualified 50%, Proposal 70%, Won 100%,
Lost 0%). forecast() and owner_leaderboard() multiply each lead's value by its stage probability
and sum — a standard sales-forecasting method. On the current data this yields ≈ $396,755
weighted against a $942,310 raw pipeline.
Safety
The SQLite connection is opened with mode=ro, so the server physically cannot write to the
DB — the engine rejects any mutation. Every query is a parameterized SELECT; tool arguments are
bound, never string-formatted, so they can't inject SQL. A test asserts the read-only guarantee.
Run it
Use any Python (3.10+) that has the mcp SDK installed:
pip install -r requirements.txt
# 1. Drive it end-to-end with a hand-written client (no Claude, no config):
python client_demo.py
# 2. Run the protocol tests (launch the real server over stdio):
python -m pytest test_server.py -q
A demo database ships in data/leads.db, so the server runs out of the box.
CRM_DB (env var) overrides the database path to point at your own leads table.
Registered in Claude
Added to the project .mcp.json as MiniCRM, pointing at the hermes-venv Python and the repo's
crm/leads.db. Restart the app / reconnect MCP servers to pick it up, then the tools appear as
mcp__MiniCRM__* and the prompt as /mcp__MiniCRM__pipeline_review.
Files
server.py— the MCP server (7 tools, 2 resources, 1 prompt)client_demo.py— hand-written stdio client that exercises every primitivetest_server.py— 8 protocol-level tests (all passing)data/leads.db— bundled demo database (40 synthetic leads)requirements.txt/pytest.inidocs/— the illustrated deep-dive PDF and its HTML source
Gotchas (carried over from building the sibling servers)
- FastMCP returns a
listas one content-block per item, and puts the whole value inresult.structuredContent(list/scalar wrapped as{"result": ...}, dict returns as-is). ReadstructuredContent, notcontent[0].text, or you only see the first element. session.read_resource(uri)returns a result with.contents, not a 2-tuple.- Don't hold the MCP session in a
pytest_asyncioasync-generator fixture — anyio's cancel scope is finalized in a different task and every test errors in teardown. Useasync withinside the test body (seetest_server.py).
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.