databasedmcp gives your AI assistant databases it keeps between conversations, so everything in this article works from the day you connect it. Free to start, no card.
Get started freeWhy build it yourself
If you pay for HubSpot, Pipedrive or Clay on your own, you likely use a fraction of it: a list of people, a note after each conversation and a reminder to follow up. The rest is pipelines, sequences and seats built for a sales team you don't have.
That fraction is three tables. Claude hears about your calls when you ask it to draft the follow-up email, and it can log the conversation at the same time. You never fill in a form. You say what happened.
Connect Claude to databasedmcp
databasedmcp is a remote MCP server that gives AI assistants private SQLite databases, with nothing to install.
In Claude on the web, desktop or mobile, open Settings → Connectors, choose Add custom connector and enter https://databasedmcp.com/mcp. Select Connect, sign in to databasedmcp with your email or Google, and select Allow. Then turn databasedmcp on for a conversation from the tools menu.
Claude asks before it runs anything that changes or deletes data. Reading runs without asking.
Any other MCP client works the same way; the docs have the details.
Copy this prompt to build it
Paste this into Claude to set up the database, its tables and its guide in one go. The rest of this article walks through what it makes and how you use it.
Set up a personal CRM for me in databasedmcp, in one go. 1. Create a database called crm, described as "Personal CRM: people, conversations and follow-ups". 2. Create three tables: - people: id, name (required), company, role, email, how_we_met, created_at (defaults to now). - conversations: id, person_id (references people), happened_on (date, defaults to today), channel (call, meeting, email or chat), summary (required, two or three sentences in my words). - followups: id, person_id (references people), what (required), due (date, required), done_at (NULL until I say it's done). 3. Write the database a guide that says what each table is for, to look people up by name before adding them so there are no duplicates, and the queries for "who do I owe something this week" and "who haven't I talked to in 60 days". From then on: when I mention a call, meeting or email, log a conversation with the person (adding them if they're new). When I promise something, add a follow-up with a due date. When I say it's done, set done_at. Show me the tables when you're finished.
Ask for the database
You don't write the schema. Describe what you want:
Set up a personal CRM in databasedmcp: people, the companies they're at, every conversation I tell you about, and follow-ups with due dates. After I mention a call or meeting, log it and any follow-up I promised.
Claude creates a database called crm and its tables:
CREATE TABLE people (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
company TEXT,
role TEXT,
email TEXT,
how_we_met TEXT,
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE conversations (
id INTEGER PRIMARY KEY,
person_id INTEGER NOT NULL REFERENCES people(id),
happened_on TEXT NOT NULL DEFAULT (date('now')),
channel TEXT CHECK (channel IN ('call', 'meeting', 'email', 'chat')),
summary TEXT NOT NULL
);
CREATE TABLE followups (
id INTEGER PRIMARY KEY,
person_id INTEGER NOT NULL REFERENCES people(id),
what TEXT NOT NULL,
due TEXT NOT NULL,
done_at TEXT
);
It also writes the database a guide on how the tables are meant to be used. The guide comes back with the schema whenever an assistant looks the database up. Claude files things the same way next week as today, and so does any other assistant you connect.
# crm: people, conversations, follow-ups
- **people**: one row per person. Look them up by name (LIKE) before adding, to avoid duplicates.
- **conversations**: one row per call, meeting or email thread I tell you about. `summary` is two or three sentences in my words.
- **followups**: what I promised and when. `done_at` stays NULL until I say it's done.
Due this week: `SELECT f.id, p.name, f.what, f.due FROM followups f JOIN people p ON p.id = f.person_id WHERE f.done_at IS NULL AND f.due <= date('now', '+7 days') ORDER BY f.due`
Gone quiet (no conversation in 60 days): `SELECT p.name, p.company, max(c.happened_on) AS last FROM people p LEFT JOIN conversations c ON c.person_id = p.id GROUP BY p.id HAVING last IS NULL OR last < date('now', '-60 days') ORDER BY last`
Use it
From here on you talk, and Claude writes the rows. Each request below is one statement:
I met Maria Lindqvist, head of ops at Nordwave, at the logistics meetup. Add her.
INSERT INTO people (name, company, role, how_we_met) VALUES (?, ?, ?, ?) RETURNING id -- params: ["Maria Lindqvist","Nordwave","Head of operations","Logistics meetup, Helsinki"]
Had a call with Maria. They're moving off spreadsheets for route planning in Q1 and want a proposal.
INSERT INTO conversations (person_id, channel, summary) VALUES (?, ?, ?) -- params: [1,"call","Nordwave moves route planning off spreadsheets in Q1. Maria wants a proposal."]
I promised her the proposal by Friday.
INSERT INTO followups (person_id, what, due) VALUES (?, ?, date('now', 'weekday 5'))
-- params: [1,"Send Nordwave the route-planning proposal"]
SQLite's date functions do the calendar: weekday 5 is the coming Friday.
Sent Maria the proposal.
UPDATE followups SET done_at = datetime('now') WHERE person_id = ? AND done_at IS NULL AND what LIKE ?
-- params: [1,"%proposal%"]
Ask it questions
Once there's data, each report you'd pay for is a single query:
Who do I owe something this week?
SELECT f.id, p.name, f.what, f.due FROM followups f JOIN people p ON p.id = f.person_id WHERE f.done_at IS NULL AND f.due <= date('now', '+7 days') ORDER BY f.due
Who haven't I talked to in two months?
SELECT p.name, p.company, max(c.happened_on) AS last FROM people p LEFT JOIN conversations c ON c.person_id = p.id GROUP BY p.id HAVING last IS NULL OR last < date('now', '-60 days') ORDER BY last
What did Maria and I talk about last time?
SELECT c.happened_on, c.channel, c.summary FROM conversations c JOIN people p ON p.id = c.person_id WHERE p.name LIKE ? ORDER BY c.happened_on DESC LIMIT 3 -- params: ["%Maria%"]
You can also open the database on the website, page through its rows and run read-only SQL yourself.
What you give up
There's no email sync. HubSpot and Clay read your inbox and calendar and log conversations without being told. Here, a conversation exists because you mentioned it. For a personal CRM that's often better, since only what mattered gets filed. It does mean telling Claude.
There are no reminders that come to you. Ask "who do I owe something this week?" on Monday morning, or add that question to a Claude project so each new chat opens with it. Pipelines, deal stages and team seats are missing too. Add a deals table when you need one. If a sales team lives in the CRM all day, pay for the real thing.
Try it
databasedmcp is free to start, with no card. Free has 100 tool calls a week, enough to set this up and try it for a week. Starter has 1,000 for everyday use.