Quiver is an open-source, self-hosted, AI-powered marketing command center for product teams. Every session starts with your actual positioning, ICP, messaging, and past results, so outputs improve as your team logs more work.
Quiver includes:
- Marketing context system with version history and proposal review workflow
- Five AI session modes (Strategy, Create, Feedback, Analyze, Optimize) with skill loading
- Artifact library with versioning, status workflow, and campaign linking
- Campaign workspace tying sessions, artifacts, content, research, and performance together
- Performance log with close-the-loop queue and context update proposals
- Content layer with markdown body, SEO/OG metadata, distribution tracking, and metric snapshots
- Customer research layer with async AI processing, quote extraction, and VoC quote library
- MCP server access over stdio (
mcp/) and HTTP (/api/mcp) for external AI clients - Public Content API for website pulls from Quiver as source of truth
- Light/dark mode with persisted user preference
- Fork this repo
- Create a Supabase project
- Get an Anthropic API key
- Deploy to Vercel with the button above
- Run Prisma migration against your database:
npx prisma migrate deploy
- Visit your deployment URL and complete onboarding
Copy .env.example to .env.local and fill in values:
| Variable | Required | Notes |
|---|---|---|
DATABASE_URL |
Yes | Postgres connection string (pooled) |
DIRECT_URL |
Yes | Direct DB connection for Prisma migrations |
NEXT_PUBLIC_SUPABASE_URL |
Yes | Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
Yes | Supabase anon/public key |
SUPABASE_SERVICE_ROLE_KEY |
Yes | Server-only Supabase service role key |
ANTHROPIC_API_KEY |
Yes | Anthropic API key |
NEXT_PUBLIC_APP_URL |
Yes | App URL (https://... or http://localhost:3000) |
QUIVER_SHARE_SECRET |
Yes | Secret for session share links (openssl rand -base64 32) |
MCP_AUTH_SECRET |
No | Optional Bearer auth for /api/mcp |
TABSTACK_API_KEY |
No | Reserved for Issue #50 content import (not implemented in this checkout) |
Published content is available from Quiver via a public, unauthenticated API:
GET /api/public/content/[slug] # single published piece with markdown body + SEO/OG
GET /api/public/content # paginated list of published piecesQuery params for list endpoint:
contentType(optional)limit(default20, max50)offset(default0)
Both endpoints are rate-limited to 60 requests/minute per IP (in-memory limiter per app instance).
Use this API at build time or runtime in your website. Quiver stays the source of truth.
Quiver ships with an MCP server that exposes the full product surface as tools for Claude Desktop, Cursor, Windsurf, and other MCP-compatible clients.
A better-informed Claude instance (project memory + connected services + Quiver MCP tools) can log performance, save research, update context, and manage content directly, while Quiver remains the storage and tracking system.
cd mcp
npm install
npx prisma generate
npm run build{
"mcpServers": {
"quiver": {
"command": "node",
"args": ["/absolute/path/to/quiver/mcp/dist/index.js"],
"env": {
"DATABASE_URL": "your-supabase-connection-string"
}
}
}
}Note:
ANTHROPIC_API_KEYis optional for the stdio server. The only tool that uses it islog_performance— it runs AI synthesis after logging results to propose context updates. Without the key,log_performancestill works but skips synthesis.
{
"mcpServers": {
"quiver": {
"command": "node",
"args": ["/absolute/path/to/quiver/mcp/dist/index.js"],
"env": {
"DATABASE_URL": "your-supabase-connection-string"
}
}
}
}Quiver also includes a Streamable HTTP MCP endpoint in the Next.js app:
https://<your-domain>/api/mcp- Set
MCP_AUTH_SECRETto requireAuthorization: Bearer <secret> - Without
MCP_AUTH_SECRET, endpoint allows requests (safe only for private/internal deployments)
Context:
get_context,get_context_history,propose_context_update,apply_context_update,restore_context_version
Campaigns:
list_campaigns,get_campaign,create_campaign,update_campaign,update_campaign_status
Artifacts:
list_artifacts,get_artifact,save_artifact,update_artifact,update_artifact_status
Performance:
log_performance,get_performance_log,get_close_the_loop_queue,list_proposals,action_proposal
Content:
list_content,get_content,save_content,update_content,add_distribution,log_content_metrics,get_content_metrics,get_content_calendar
Research:
list_research_entries,get_research_entry,save_research_entry,list_quotes,get_linear_payload
Sessions:
list_sessions,get_session
Workspace:
get_dashboard_summary
propose_context_update: creates a pending proposal for human reviewapply_context_update: applies changes immediately and creates a new context version
Use apply_context_update only when the user explicitly asks for immediate change.
Quiver loads static markdown skills from /skills (pinned from coreyhaines31/marketingskills).
- Skills are loaded at session start from disk
- Feedback mode uses
customer-research - Create mode skill selection depends on artifact type
- Admins can update to newer pinned skill versions from Settings
See lib/ai/skills.ts for exact mapping.
Each session prompt is assembled from:
- Role definition
- Active product context
- Loaded skill content
- Performance history (create mode)
- Featured customer quotes (create + strategy)
- Published content context (create + strategy)
- Mode instructions
- Output instructions
See lib/ai/session.ts.
| Layer | Choice |
|---|---|
| Framework | Next.js 14, App Router |
| Language | TypeScript (strict mode) |
| Styling | Tailwind CSS |
| Components | shadcn/ui + Radix UI |
| Database | Supabase (Postgres) |
| ORM | Prisma |
| Auth | Supabase Auth |
| AI | Anthropic SDK |
| Testing | Vitest |
| Deployment | Vercel |
See CONTRIBUTING.md for local setup, branch naming, and PR checklist.
Good first contributions:
- Rich text editing experience for Content body
- Additional MCP tool domains
- New session modes and mode-specific UX
- Expanded artifact-type to skill routing
- Content import implementation for Issue #50 (
TABSTACK_API_KEY, import endpoint, UI)
- Product specification:
SPEC.md - Agent instructions:
CLAUDE.md,AGENTS.md - Build prompt context:
PROMPT.md
Built with the marketingskills framework.