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
Planta keeps a list of your plants and tells you when each one needs water, food or a bigger pot. The heart of it is that list and its history: what you have, where it sits and when you last looked after it.
That's two tables and a date sum. Tell ChatGPT "watered everything in the living room" and it adds a row for each plant. Ask what's due and it works it out from each plant's last watering and how often it likes one. ChatGPT also knows the general care for common houseplants, so adding a plant comes with a sensible starting interval.
Connect ChatGPT to databasedmcp
databasedmcp is a remote MCP server that gives AI assistants private SQLite databases, with nothing to install.
ChatGPT connects to remote MCP servers as custom connectors in developer mode. That's on paid plans, on the web. Turn on developer mode in ChatGPT's settings, then create a connector: give it a name, enter https://databasedmcp.com/mcp as the URL and choose OAuth. When ChatGPT opens a databasedmcp page, sign in and select Allow. In a new chat, turn the connector on from the tools menu.
ChatGPT moves these menus between releases. If yours look different, search its settings for developer mode and custom connectors.
Any other MCP client works the same way; the docs have the details.
Copy this prompt to build it
Paste this into ChatGPT 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 plant care log for me in databasedmcp, in one go. 1. Create a database called plant_care, described as "Plant care log: my plants, where they live and when I watered, fed or repotted them". 2. Create two tables: - plants: id, name (required, what I call it), species, room, light (low, medium, bright indirect or direct), water_every_days, acquired_on (date), died_on (NULL while it's alive), notes. - care: id, plant_id (references plants), done_on (date, defaults to today), action (water, fertilize, repot, prune or treat), notes. 3. Write the database a guide that says what each table is for, that a plant's next watering is its last watering plus water_every_days, and the queries for "what needs watering", "when was each plant last repotted" and "plants by room". From then on: when I say I watered, fed or repotted something, add a care row for each plant. When I get a plant, add it with a sensible watering interval for its species and ask me to confirm. When I move one, update its room. 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 plant care log in databasedmcp: my plants, which room they're in, their light and how often they need water, plus every time I water, feed or repot one. Tell me what's due when I ask.
ChatGPT creates a database called plant_care and its tables:
CREATE TABLE plants (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
species TEXT,
room TEXT,
light TEXT CHECK (light IN ('low', 'medium', 'bright indirect', 'direct')),
water_every_days INTEGER,
acquired_on TEXT,
died_on TEXT,
notes TEXT
);
CREATE TABLE care (
id INTEGER PRIMARY KEY,
plant_id INTEGER NOT NULL REFERENCES plants(id),
done_on TEXT NOT NULL DEFAULT (date('now')),
action TEXT NOT NULL CHECK (action IN ('water', 'fertilize', 'repot', 'prune', 'treat')),
notes 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. ChatGPT files things the same way next week as today, and so does any other assistant you connect.
# plant_care: plants and their care
- **plants**: one row per plant. `name` is what I call it. `water_every_days` is how often it wants water; `died_on` stays NULL while it's alive.
- **care**: one row per plant per thing done. action: water, fertilize, repot, prune or treat.
A plant is due when its last watering plus `water_every_days` is today or earlier.
Needs water: `SELECT p.name, p.room, max(c.done_on) AS last_watered, date(max(c.done_on), '+' || p.water_every_days || ' days') AS due FROM plants p LEFT JOIN care c ON c.plant_id = p.id AND c.action = 'water' WHERE p.died_on IS NULL GROUP BY p.id HAVING due IS NULL OR due <= date('now', '+1 day') ORDER BY due`
By room: `SELECT room, group_concat(name, ', ') AS plants FROM plants WHERE died_on IS NULL GROUP BY room`
Use it
From here on you talk, and ChatGPT writes the rows. Each request below is one statement:
I have a monstera I call Monty in the living room, a Boston fern by the kitchen window and a snake plant in the bedroom.
INSERT INTO plants (name, species, room, light, water_every_days) VALUES (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?) -- params: ["Monty","Monstera deliciosa","Living room","bright indirect",7,"Fern","Boston fern","Kitchen","medium",3,"Snake plant","Dracaena trifasciata","Bedroom","low",14]
The intervals are ChatGPT's general starting points for each species. Change them when your plants tell you otherwise.
Watered Monty and the fern today.
INSERT INTO care (plant_id, action) VALUES (?, ?), (?, ?) -- params: [1,"water",2,"water"]
I repotted Monty last Sunday, into a 24 cm pot with fresh mix.
INSERT INTO care (plant_id, done_on, action, notes) VALUES (?, date('now', 'weekday 0', '-7 days'), ?, ?)
-- params: [1,"repot","24 cm pot, fresh chunky mix"]
Moved the fern to the bathroom; it likes the humidity.
UPDATE plants SET room = ? WHERE id = ? -- params: ["Bathroom",2]
Ask it questions
Once there's data, each report you'd pay for is a single query:
What needs watering?
SELECT p.name, p.room, max(c.done_on) AS last_watered, date(max(c.done_on), '+' || p.water_every_days || ' days') AS due FROM plants p LEFT JOIN care c ON c.plant_id = p.id AND c.action = 'water' WHERE p.died_on IS NULL GROUP BY p.id HAVING due IS NULL OR due <= date('now', '+1 day') ORDER BY due
A plant with no watering logged yet shows up too, so nothing gets forgotten.
When did I last repot each plant?
SELECT p.name, max(c.done_on) AS last_repotted FROM plants p LEFT JOIN care c ON c.plant_id = p.id AND c.action = 'repot' WHERE p.died_on IS NULL GROUP BY p.id ORDER BY last_repotted
Which plants are in each room?
SELECT room, group_concat(name, ', ') AS plants FROM plants WHERE died_on IS NULL GROUP BY room
You can also open the database on the website, page through its rows and run read-only SQL yourself.
What you give up
Planta reminds you. Its notifications tell you which plants need water today, and you can identify a plant by taking a photo of it. Here nothing comes to you: you ask "what needs watering?" when you're standing with the watering can. There's no photo identification and no place for photos. Describe the plant and ChatGPT will suggest what it might be.
The care advice is ChatGPT's general knowledge about a species, not a reading of your windows or a schedule tuned to your home. Treat the watering intervals as starting points, check the soil, and adjust them as you learn what each plant wants.
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.