Releases

The latest updates and improvements to Simple Product.

MCP install: one less step, no more device-code copy

Small but nice: installing the Simple Product MCP no longer makes you copy a device code between your terminal and your browser. The CLI passes the code in the URL automatically, the browser auto-fills it, and you just confirm a workspace and click Authorize.

What changed

Before:

  1. Run npx @simple-product/mcp --install
  2. Terminal shows a device code
  3. Press Enter, browser opens
  4. Browser asks you to type the code into a form field
  5. Pick a workspace, click Authorize
  6. Wait for CLI to confirm

Now:

  1. Run npx @simple-product/mcp@latest --install
  2. Browser opens straight to the workspace picker (code already known)
  3. Click Authorize, done

One less step in your terminal, one less form field in your browser, one less variable to keep track of. The whole install runs in about 15 seconds without you typing anything you didn't already.

Why we kept the npx installer (and didn't switch to a different OAuth flow)

A quick architectural note for anyone curious. We considered a few alternatives:

  • Localhost-callback OAuth — what most modern CLIs (gh, vercel, supabase) use. Marginal UX gain, but works in fewer environments (some locked-down corporate networks block port binding) and the success page lives on a localhost:NNNN URL that looks weird. Net not better than what we shipped.
  • Pure browser-side OAuth via the MCP Authorization Spec — the eventual destination for spec-compliant clients (Claude Desktop, Code), which can handle their own OAuth in-protocol. We're set up to support that on the server side, but it doesn't replace the npx installer for two reasons. First, multi-tool fan-out: our installer detects every MCP-supporting tool on your machine (Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, etc.) and writes config to all of them in one auth step. Spec-native flows do per-tool credential isolation by design — you'd auth once per tool. Second, pre-auth at first launch: by the time your AI client boots, MCP is already authenticated. No first-call 401, no /mcp interruption mid-conversation.

So the npx installer stays as the primary install vehicle. We just shaved the friction off it.

Upgrade

npx @simple-product/mcp@latest --install

If you have an existing install, this will detect and update your client configs. After install, restart your AI client (Claude Code, Claude Desktop, Cursor, etc.) once and the new tools/auth are picked up.

This release ships in @simple-product/mcp@0.1.19.

What's next

The bigger picture: a hosted MCP endpoint at simpleproduct.dev/api/mcp/v1 that becomes the substrate behind the npx installer. New tools and updated descriptions ship server-side and reach every existing install instantly — no more "please reinstall the MCP" when we improve a tool. Coming soon.

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.

Categories, publishing, and a public docs API

Every doc can now have a category and be published to a public feed. The two built-in categories — feedback and release — work the same as any category you make up. Underneath, it's all one primitive: a doc with a type, an optional slug, and a publish state.

This unlocks a lot. The most obvious use is what we just shipped: simpleproduct.dev/blog is built entirely on the new public API — no special blog infrastructure, no separate database, just docs with category: "blog". You can do the same on your own site for a blog, knowledge base, public roadmap, case studies, RFCs, anything.

What's new

Categorize any doc

Open a doc, hit the menu, choose a category. Free-form: type blog, changelog, case-studies, whatever fits. Categories normalize on save (Blogblog) so Blog and blog are never two separate buckets.

Publish from the doc editor

The Publish button (in the toolbar) opens a popover where you set a slug, an excerpt, and toggle the publish state. Published docs are immediately reachable via the public API.

Public docs API

Three new endpoints, no auth required:

  • GET /api/v1/docs/public?type=<category>&workspace=<slug> — list published docs in a category
  • GET /api/v1/docs/public/<slug>?type=<category>&workspace=<slug> — single published doc by slug
  • GET /api/v1/docs/rss?type=<category>&workspace=<slug> — RSS feed for a category

Existing /api/v1/releases/public and /api/v1/releases/rss keep working unchanged.

Authenticated docs API now does everything

POST /api/v1/docs and PATCH /api/v1/docs/:id accept type, slug, excerpt, and publish (boolean shorthand for status). Pass null to any optional field to clear it.

MCP tools (@simple-product/mcp@0.1.14)

create_doc and update_doc accept type, slug, excerpt, and publish. Your coding agent can publish a doc into any category in one tool call. Update by running npx @simple-product/mcp@latest --install and restarting your MCP client.

Comments via MCP

create_comment is now a first-class tool. get_card / get_doc / get_feedback include the existing comment thread inline. Agents can read and post comments on behalf of the user.

How to use it

  1. Pick a category name. Anything URL-safe — blog, changelog, guides, etc.
  2. Set it on a doc via the menu, fill in a slug + excerpt, click Publish.
  3. Read it back from /api/v1/docs/public?type=<your-category>&workspace=<your-workspace-slug>.
  4. Render however you want — your stack, your design.

If you want a head-start, the simpleproduct.dev/blog code is intentionally minimal and uses the same public endpoints any customer would. Same pattern works for any category.

April 27 — Publishable keys for feedback, sidebar polish, chat focus fix, MCP analytics guide

What's new

A bundle of security, polish, and developer-experience improvements.

Publishable keys now handle feedback submissions

Publishable keys (pk_ws_) used to only carry the track scope — analytics events only. They now also include feedback:write, so the same key can power both tracking and feedback widgets in your app.

This means: one pk_ws_ key, exposed safely in your client-side bundle, drives both your analytics and your feedback collection. No more reaching for a full-access secret key just to submit feedback from the browser.

We rotated Simple Product's own feedback widget over to a publishable key as part of this. The old full-access key is being retired.

If you have existing publishable keys, they got the new scope automatically — no action needed.

MCP setup guide for analytics

The get_setup_guide MCP tool now has an analytics option. Ask your agent something like "set up Simple Product analytics in my Next.js app" and it'll get a real, copy-paste-able guide for your framework — including which key to use, which env var, where to put the provider, how to identify users, and how to track custom events.

Frameworks covered: React, Next.js, Vue, plain HTML, Node.js, Python.

The guides explicitly call out the publishable key pattern, so agents recommend the safe key by default — no more telling people to bake sk_ keys into client code.

MCP 0.1.12

Two patches to @simple-product/mcp:

  • Setup guide for analytics (the one above)
  • Fix for Claude Desktop: switch_workspace was crashing on sandboxed MCP hosts (Claude Desktop, etc.) because it tried to write to a read-only filesystem. Now it gracefully degrades — switching is in-memory only when persistent storage isn't available, and writes are best-effort otherwise.

Update with npx @simple-product/mcp@latest.

Sidebar polish

Two small but meaningful tweaks:

  • The top-left now shows your workspace name next to the logo instead of "Simple Product." If the name's long, it truncates with a tooltip on hover.
  • The bottom-left user card now shows your email under your name (instead of repeating the workspace name, which was already up top).

The workspace name is the most useful identifier when you're switching between several — it's now the most prominent thing on the screen.

Chat focus fix

In SP3K, hitting Enter to send a message used to blur the textarea — you'd have to click back into it before typing again. The input is no longer disabled while the agent's responding, so you can type your next message right away. (Same pattern as ChatGPT and Claude.ai.)

Homepage copy refinement

Tightened the hero copy on the marketing site to lead with the "Product Brain for building with AI" framing.


Small batch, but each one is a friction point removed. Keep the feedback coming.

MCP v0.1.11 — Claude Desktop fix (switch_workspace on sandboxed hosts)

What changed

A quick patch to @simple-product/mcp (v0.1.11) fixing a crash when running the MCP inside sandboxed hosts like Claude Desktop.

The bug

switch_workspace was crashing with:

EROFS: read-only file system, open '/.simple-product.json'

Cause: when running in a sandboxed MCP environment where process.cwd() is / (filesystem root), our project-config path resolver fell through to path.join('/', '.simple-product.json') — trying to write to the filesystem root, which is read-only.

The fix

Three small changes:

  1. In-memory state is now the source of truth. The workspace switch happens immediately on every call, regardless of whether we can persist it.
  2. Only persist when there's a real project context — an existing .simple-product.json or a nearby .git. No more silent fallthrough to filesystem root.
  3. Writes are best-effort. If the filesystem is read-only (Claude Desktop, other sandboxed hosts), we skip the write without crashing. switch_workspace tells you whether it persisted or if it's session-only.

What users see

  • Claude Code / Cursor / terminal installs: no change. Project-level workspace persistence works as before — switching in one project doesn't affect another.
  • Claude Desktop and other sandboxed hosts: switch_workspace now works. The message says "(Not persisted — this workspace applies for the current session only.)" so you know the switch is in-memory only.

Update

Existing installs via Claude Code or similar pick this up automatically on the next call. For Claude Desktop configs that pin to a specific version, update to @simple-product/mcp@latest (or 0.1.11).


Thanks to the friend who filed a really clear repro including the stack trace and a correct root-cause guess — made this a one-sitting fix.

April 21 — Publishable keys, MCP tracking, better boards + agent UX

What's new

A big batch of improvements focused on safer API keys, richer analytics, and a smoother experience for both humans and AI agents.

Publishable API keys (pk_ws_)

Simple Product now has two kinds of API keys, following the pattern you're used to from Stripe, PostHog, and others:

  • Secret keys (sk_ws_, sk_usr_) — full access. Keep these server-side.
  • Publishable keys (pk_ws_) — tracking only. Safe to expose in client-side code.

Publishable keys can only send analytics events — no read or write access to anything else. That means you can drop them into your React / Next.js bundle without worrying about someone inspecting the source and grabbing full access to your workspace.

Create one at Settings → API Keys → Create Key → Publishable.

We're eating our own dog food — Simple Product's own SDK now ships with a publishable key.

MCP usage tracking (automatic)

Every time an agent calls into Simple Product via the MCP server, a heartbeat now fires for the user whose token was used. That means MCP activity finally shows up in Analytics — Daily Active Users, Last Active times, retention — all without any client-side changes. Existing MCP installs pick this up automatically.

MCP server updates (v0.1.10)

We published a new version of @simple-product/mcp with a handful of improvements:

  • New getting_started tool — an onboarding guide agents can read to understand what Simple Product is and how to use the other tools effectively. Positioned as "read this first."
  • New get_card tool — fetches a card's full content including its description/body, so agents can actually read cards instead of just listing them.
  • Much better tool descriptions — every tool now explains when and why to use it, not just what it does. Helps agents pick the right tool on the first try.
  • Global install scopenpx @simple-product/mcp now installs the MCP at user scope, so it shows up across all your projects instead of just the directory you installed from.

Update existing installs with npx @simple-product/mcp@latest.

Board improvements

  • "Move to top" action on each card's ... menu. Great for curating long lists.
  • Smoother card drag-and-drop — the drop indicator no longer pushes layout around, so dragging feels stable instead of jumpy.

Navigation

  • Boards is now the default landing page when you enter a workspace.
  • SP3K moved to /sp3k alongside Chats and Projects, keeping the main nav focused on the product-building primitives (boards, docs, releases, customers, feedback, analytics).
  • App no longer shows the marketing footer — it only appears on public pages now.

Keep the feedback coming — the more we hear about what works and what doesn't, the faster we can iterate.

MCP Workspace Switching & Bug Fixes

MCP Workspace Switching

You can now switch between workspaces directly in conversation without restarting your AI coding assistant.

New tools:

  • list_workspaces - See all workspaces you have access to
  • switch_workspace - Switch to a different workspace instantly

How it works:

You: "What workspace am I in?"
AI: "You're in sp (Simple Product)"

You: "Switch to nexlayer"
AI: "Switched to Nexlayer! All subsequent commands will use this workspace."

You: "Create a doc called API Notes"
AI: [Creates doc in Nexlayer workspace]

No restart required - switching is instant and persists for future sessions.

How to Update

To use the new workspace switching feature, you'll need to update your MCP installation:

1. Reinstall the MCP package

npx @simple-product/mcp@latest --install

2. Restart your MCP-enabled app

  • Claude Code: Restart the terminal/CLI
  • Claude Desktop: Quit and reopen the app
  • Cursor/VS Code: Restart the editor or reload the window

After restarting, the new list_workspaces and switch_workspace tools will be available.


Bug Fixes

Google OAuth Integration Fixed

Fixed an issue where the Google OAuth redirect URI was incorrectly set to http://0.0.0.0:3000 instead of the production URL. This was blocking Google's OAuth verification process and could prevent Gmail/Calendar integration from working.

Last Active Date Now Updates Correctly

Fixed a bug where the "Last Active" date on contact profiles wasn't updating on subsequent visits. Previously, it only updated on the first heartbeat of each day - now it updates on every activity.


Technical Changes

  • Consolidated NEXT_PUBLIC_APP_URL into NEXT_PUBLIC_SITE_URL (one less env var to manage)
  • Added /api/mcp/workspaces and /api/mcp/switch endpoints
  • MCP package now uses mutable config state for hot switching
  • Updated to MCP package version 0.1.7

Projects - Organize work with AI-powered context

What's New

Projects let you group related items together and chat with AI that understands the full context of what you're working on.

Create Projects

  • Name your project and add custom instructions for AI
  • Link boards, cards, documents, feedback, people, organizations, and releases
  • Everything in one place for focused work

Project Chat

  • Chat with AI that has full context of your project
  • AI knows about all linked items, instructions, and relationships
  • Ask questions, get summaries, brainstorm ideas

AI Summaries

  • Generate AI summaries of your entire project
  • Based on linked items and project instructions
  • Refresh anytime as the project evolves

Board Linking

  • Link entire boards to a project
  • All cards from linked boards are automatically included in AI context
  • No need to link cards individually

Navigation Updates

  • New collapsible sidebar for SP3K (home view)
  • Route-based navigation for chats and projects
  • Improved URL structure: /chats, /chats/[id], /projects, /projects/[id]

Other Improvements

  • Document editor: double-click to edit, cleaner card styling
  • Better empty states throughout the app

GSD Feed & Setup Actions

What's New

⚡ GSD (Get Stuff Done) Feed

The workspace home now features an AI-curated feed that surfaces your most relevant work:

  • Smart ranking - Items scored by recency, ownership, and assignment
  • Unified view - See cards, docs, and feedback in one place
  • Quick navigation - Click any item to jump directly to it

🚀 Setup Actions

New users now see helpful onboarding tasks in the GSD feed:

  • Create your first board, card, and doc
  • Add a customer
  • Install the SDK and MCP
  • Set up feedback collection
  • Connect Google integration
  • Invite teammates
  • Customize AI instructions

Tasks automatically disappear as you complete them.

🔧 Improvements

  • Fixed MCP installation detection (no longer requires first use)

MCP: Claude Desktop Auto-Configuration

What's New

The Simple Product MCP installer now automatically detects and configures Claude Desktop.

How It Works

When you run npx @simple-product/mcp --install, the installer now:

  1. Detects if Claude Desktop is installed (macOS, Windows, or Linux)
  2. Automatically adds Simple Product to your claude_desktop_config.json
  3. No manual configuration needed

Supported Tools

The installer auto-configures all of these:

  • Claude Desktop (new!)
  • Claude Code (CLI)
  • Cursor
  • Windsurf
  • VS Code

Get Started

npx @simple-product/mcp --install

Then restart Claude Desktop to start using Simple Product tools.

Domain Migration & Bug Fixes

What's New

New Domain

Simple Product is now live at simpleproduct.dev! The old URL automatically redirects to the new domain.

Bug Fixes

  • Fixed chat scroll issue - Chats no longer scroll off the top of the screen
  • Fixed chat deletion race condition - Empty chats are now properly cleaned up using server-side validation
  • Fixed draft save errors - No more "Chat not found" errors when saving drafts

Performance Improvements

  • Optimized AI token usage - Reduced tokens per request from ~11k to ~4k by limiting message history to 15 messages and truncating long messages at 4000 characters. This helps stay within rate limits with more concurrent users.

Infrastructure

  • Added redirect server for seamless migration from old URL

Workspace Invite Notifications

What's New

When you add an existing Simple Product user to your workspace, they now receive an email notification letting them know they've been added.

Details

  • New users still receive an invite email with a link to create their account
  • Existing users now receive a "You've been added" email with a direct link to the workspace
  • No more wondering if your teammate knows they have access - they'll get notified automatically

Card Links Now Open Sidebar

What's New

When you click on a linked card from a document, you now go directly to that card with its details panel open - no extra clicking needed.

Before

Clicking a linked card took you to the board, but you had to find and click the card again to see its details.

After

Clicking a linked card takes you to the board with the card's sidebar already open, so you can immediately see all the details, linked docs, people, and related cards.


This is part of our ongoing work to make navigating between linked items feel seamless.

Hello World

Simple Product is now alive for testing and feedback!