Emails via MCP, author bylines, and a smarter command palette
Big batch of changes since the Categories release. The headline: Simple Product can now draft and send email through your AI agent, and every email touch becomes a contact relationship — no orphaned drafts, no "where did that email go?" surprises.
Email workflows via MCP
Three new tools shipped in @simple-product/mcp@0.1.17:
draft_email
Tell your agent "draft a follow-up to Sarah about pricing" and it composes the email, saves it as a draft on Sarah's contact record with an "AI Draft" badge, and you click Send when you're ready. Defaults to drafting (not sending) unless you explicitly say "send."
send_email
For when you want to fire it off. Sends through your connected Gmail, automatically saves the sent email to the contact's communication history. Tool description is firmly directive — agents only send when you explicitly ask, never on a guess.
list_drafts
"Who was that follow-up email to?" — your agent can now answer. Lists your pending drafts newest first, with subject, recipients, linked contact, and a body snippet. Pair with draft_email's draftId arg to update or send a previously drafted message.
list_emails
Returns the full email history for a contact, both sent (from SP) and received (synced from Gmail). Use it for context-aware replies — your agent reads the prior conversation before drafting.
Every email touch is a contact
The product principle: Simple Product is a customer tracking system, not an email client. So when you draft or send an email, the system makes sure there's always a contact record:
- If the recipient is already a contact → the email links to them
- If the recipient (in
to,cc, or anywhere else addressed) matches an existing contact → links to that one - If no recipients match → creates a new contact from the primary address (name = local part of the email; you can rename later)
Drafts always land on a contact's Communication tab. Sent emails always show up in the contact's history. No orphan messages floating in the void. The customer-relationship view is always complete.
Author bylines on published docs
Published docs (blog posts, release notes, anything in your category feeds) now show the author on the public page and in the API response.
- simpleproduct.dev/blog posts render "by Author Name · Date" under the title
/api/v1/docs/publicresponses include{ author: { name, image } }per doc- JSON-LD schema uses
Personinstead ofOrganizationwhen an author is set, improving SEO and social previews
If you're rendering a blog or knowledge base on your own domain using the public API, the author field is now there for the taking.
Smarter command palette (Cmd+K)
The cmd+k search now surfaces all 10 settings pages — Members, Billing, API, MCP, Integrations, Profile, AI, Analytics, Customers, General — in a dedicated "Settings" group. Type "billing" or "api keys" or "claude desktop" and jump straight there.
Settings entries render as Settings › Billing so they're visually distinct from top-level navigation entries with overlapping names (e.g. the top-level "Analytics" page vs. "Settings › Analytics").
Polish wins
- Mobile navigation finally feels right — hamburger sheet under
mdbreakpoint with body scroll lock and route-change auto-close. Logo box pinned square; "Simple Product" wordmark scales down so it doesn't crowd the right-side controls. The Account button shrinks on mobile too. - Visual consistency across
/docs,/blog, and/releasespages — same heading style, same spacing, same left-aligned typography. The mismatched icons and centered layouts are gone. - Comments use initials instead of OAuth profile images. Cleaner look, consistent with the rest of the product. (If you want avatars back, there's a single flag at the top of
CommentItem.tsxthat flips it.) - Doc publishing got more reliable. Auto-slug-on-publish means a published doc can never be unreachable: even if you (or an agent) skip the slug field, the server derives one from the title. Listings always have a working link, even for legacy posts without slugs. The publish popover now pre-fills slug and excerpt from the title and content respectively — no more empty fields you have to remember to populate.
create_docandupdate_docMCP descriptions are now directive. Agents reliably set the right category and publish state from natural language: "blog post" →type=blog, publish=true; "save these notes" → no type, no publish. Closes a class of "I published a blog post but it didn't show up" bugs caused by ambiguous instructions.
Upgrade
npx @simple-product/mcp@latest --install
Restart your MCP client (Claude Code, Claude Desktop, etc.) to pick up the new tools. Existing tools work unchanged.
How to use it
A representative workflow now possible:
-
"Read the recent feedback from Sarah and draft a follow-up about her API limit ask"
- Agent reads Sarah's feedback via
get_feedback - Agent reads prior emails via
list_emails - Agent calls
draft_emailwithpersonId=Sarah's record - Draft lands on Sarah's Communication tab, AI Draft badge, ready for your review
- Agent reads Sarah's feedback via
-
"What drafts do I have pending?"
- Agent calls
list_drafts - Shows you everything you've drafted recently with subject, recipient, last edited
- Agent calls
-
"Send the email I drafted to Acme last night"
- Agent calls
list_draftsto find it - Agent calls
send_emailwith thatdraftId - Goes through your Gmail; lands in the contact's communication history
- Agent calls
The pattern: read context → draft from context → review → send. Same loop a thoughtful human would run, just faster.