All releases

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/public responses include { author: { name, image } } per doc
  • JSON-LD schema uses Person instead of Organization when 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 md breakpoint 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 /releases pages — 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.tsx that 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_doc and update_doc MCP 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:

  1. "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_email with personId=Sarah's record
    • Draft lands on Sarah's Communication tab, AI Draft badge, ready for your review
  2. "What drafts do I have pending?"

    • Agent calls list_drafts
    • Shows you everything you've drafted recently with subject, recipient, last edited
  3. "Send the email I drafted to Acme last night"

    • Agent calls list_drafts to find it
    • Agent calls send_email with that draftId
    • Goes through your Gmail; lands in the contact's communication history

The pattern: read context → draft from context → review → send. Same loop a thoughtful human would run, just faster.