databasedmcp

← Articles

How to build a customer feedback board with Claude

Collect feature requests from calls, emails and support chats in one place, with who asked and in their words, by pasting them to Claude.

6 min read

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 free

Why build it yourself

Feature requests arrive everywhere: a line in a support email, a comment on a sales call, a message in a shared channel. Canny and Productboard gather them in one place. For a small product team, the core of that is a list of requests and who asked for each.

Those messages often reach Claude anyway, when you ask it to summarise a call or draft a reply. It can file the request at the same time: match it to an existing one, add the customer and keep their exact words. When you plan the next release, you ask what people want most.

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.

prompt
Set up a customer feedback board for me in databasedmcp, in one go.

1. Create a database called feedback, described as "Customer feedback board: feature requests, the customers who asked and what they said, filed by Claude."
2. Create three tables:
   - requests: id, title (required), detail, status (under_review, planned, in_progress, shipped or declined, defaults to under_review), created_at (defaults to now), shipped_at.
   - customers: id, name (required), company, plan.
   - votes: id, request_id (references requests, required), customer_id (references customers, required), source (call, email, support or chat), quote (their words), at (defaults to now). One vote per customer per request: make request_id and customer_id unique together.
3. Write the database a guide that says what each table is for, to search request titles and details before adding a new request because most feedback matches one already there, to look customers up by name and company before adding them, that a customer votes once per request, and the queries for "most wanted open requests" and "who to tell when a request ships".

From then on: when I paste feedback, match it to an existing request or add a new one, add the customer if they're new, and log their vote with the source and a quote in their own words. If they ask again, replace their quote instead of counting a second vote. When I say a request's status changed, update it. 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 customer feedback board in databasedmcp: feature requests with a status, the customers who asked, and a vote for each time someone asks, with their words. When I paste feedback, match it to an existing request if there is one.

Claude creates a database called feedback and its tables:

schema
CREATE TABLE requests (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  detail TEXT,
  status TEXT NOT NULL DEFAULT 'under_review' CHECK (status IN ('under_review', 'planned', 'in_progress', 'shipped', 'declined')),
  created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
  shipped_at TEXT
);

CREATE TABLE customers (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  company TEXT,
  plan TEXT
);

CREATE TABLE votes (
  id INTEGER PRIMARY KEY,
  request_id INTEGER NOT NULL REFERENCES requests(id),
  customer_id INTEGER NOT NULL REFERENCES customers(id),
  source TEXT CHECK (source IN ('call', 'email', 'support', 'chat')),
  quote TEXT,
  at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE (request_id, customer_id)
);

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.

guide
# feedback: requests, customers, votes

- **requests**: one row per feature request. Search titles and details (LIKE) before adding a new one; most feedback matches something already here. status: under_review, planned, in_progress, shipped, declined. Set `shipped_at` when it ships.
- **customers**: one row per customer who asked for something. Look up by name and company first.
- **votes**: one row per customer per request, with `quote` in their words and `source` (call, email, support, chat). A customer votes once per request.

Most wanted: `SELECT r.id, r.title, r.status, count(v.id) AS votes FROM requests r LEFT JOIN votes v ON v.request_id = r.id WHERE r.status NOT IN ('shipped', 'declined') GROUP BY r.id ORDER BY votes DESC`

Who to tell when a request ships: join votes to customers on `request_id`.

Use it

From here on you talk, and Claude writes the rows. Each request below is one statement:

Priya Raman from Kestrel Analytics, on the Team plan, emailed asking to export reports as CSV. Add her.
execute
INSERT INTO customers (name, company, plan) VALUES (?, ?, ?) RETURNING id
-- params: ["Priya Raman","Kestrel Analytics","Team"]
There's nothing about exports yet, so add that as a request.
execute
INSERT INTO requests (title, detail) VALUES (?, ?) RETURNING id
-- params: ["Export reports as CSV","Download any report as a CSV file to use in spreadsheets."]
Log her vote with what she said.
execute
INSERT INTO votes (request_id, customer_id, source, quote) VALUES (?, ?, ?, ?) ON CONFLICT (request_id, customer_id) DO UPDATE SET quote = excluded.quote
-- params: [1,1,"email","Our finance team rebuilds every report by hand in a spreadsheet each month."]

If Priya asks again, her vote still counts once, and her latest words replace the old ones.

We're putting CSV export in the next release. Mark it planned.
execute
UPDATE requests SET status = 'planned' WHERE id = ?
-- params: [1]

Ask it questions

Once there's data, each report you'd pay for is a single query:

What do customers want most?
query
SELECT r.id, r.title, r.status, count(v.id) AS votes FROM requests r LEFT JOIN votes v ON v.request_id = r.id WHERE r.status NOT IN ('shipped', 'declined') GROUP BY r.id ORDER BY votes DESC, r.created_at LIMIT 10
Who asked for CSV export, and what did they say?
query
SELECT c.name, c.company, c.plan, v.source, v.quote, v.at FROM votes v JOIN customers c ON c.id = v.customer_id JOIN requests r ON r.id = v.request_id WHERE r.title LIKE ? ORDER BY v.at
-- params: ["%CSV%"]
Which requests come from paying teams?
query
SELECT r.title, count(*) AS votes FROM votes v JOIN customers c ON c.id = v.customer_id JOIN requests r ON r.id = v.request_id WHERE c.plan IN ('Team', 'Business') GROUP BY r.id ORDER BY votes DESC

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 public board. With Canny, customers post and vote on requests themselves, see the roadmap and get an email when something ships. Here, only you and the people you share the account with see the requests, and every vote is one you filed. When a request ships, Claude can list who asked and draft the note, but you send it.

There are no integrations pulling feedback in from your support desk or CRM, and none of Productboard's prioritisation scores or roadmap views. If your product team plans from those every week, they're worth paying for. If you want every request in one place, this does that.

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.

Create an account

More articles · databasedmcp · Docs