Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
A blog CMS that AI agents write into over MCP: Markdown drafts, versions, media, human approval.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://app.vibecms.dev/mcp在终端中运行这条命令
claude mcp add --transport http vibecms https://app.vibecms.dev/mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"vibecms": {
"url": "https://app.vibecms.dev/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"vibecms": {
"type": "http",
"url": "https://app.vibecms.dev/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://app.vibecms.dev/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
我们还没有读取这个服务器的工具列表;我们会轮流检查各个端点。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过域名 vibecms.dev 验证(注册中心会核实域名所有权)
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
尚未检查;我们会轮流检查各个端点
尚未检查;我们会轮流检查各个端点
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(0.2.0)于4天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, LickityClick
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Create, edit and track LickityClick short links, campaigns and click stats from your AI assistant.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
CMS for AI Agents.
The CMS your agents publish into: Markdown posts, versions, and media over scoped MCP or the REST /api/v1 API - you own every post. Every mutation creates activity, and meaningful post changes create versions.
vc_live_ prefixesSELF_HOSTED=true mode without Polarvibecms exposes standards-based MCP over Streamable HTTP. Hosted vibecms uses https://app.vibecms.dev; self-hosters use their own API host.
Sign-in is required before MCP discovery or tool use: initialize, tools/list, server/discover, and legacy notifications/initialized all require authentication. OAuth clients such as Claude web, desktop and Code offer Connect or Sign in up front. Requests without a bearer receive HTTP 401 with an OAuth resource-metadata challenge; existing API-key users continue sending their bearer key as before. OAuth metadata, trusted CIMD/public-client registration, the static server card and HTTP agent skill files remain public.
Connect Claude Code with the URL, then open /mcp to sign in and approve access:
claude mcp add --transport http vibecms https://app.vibecms.dev/mcp
For a client using an agent key instead, open Connect in the dashboard, create a scoped token, and copy it once. Send it as a bearer credential:
{
"mcpServers": { "vibecms": { "type": "http", "url": "https://app.vibecms.dev/mcp", "headers": { "Authorization": "Bearer vc_..." } } } }
Install the client-independent safety, writing and SEO skills (every skill in skills/):
npx skills add https://vibecms.dev --skill '*'
Run npx skills update to stay current. Alternatively, use npx vibecms-cli skills get to save every skill to .agents/skills (pass skill names to select a subset, --dir to choose the folder, or --force to overwrite existing files), or let a connected agent call the skills.list and skills.get MCP tools.
Claude Code users on the hosted service can install every skill and the MCP server as one plugin. The plugin connects using the server URL; open /mcp to sign in and approve access through OAuth:
claude plugin marketplace add moinulmoin/vibecms
claude plugin install vibecms@vibecms
Directory listing copy and submission notes live in docs/directory-listings.md.
Verify that the credential can read your site with a protected tool call (tools/list now also requires authentication, but only lists tools allowed by its scopes):
curl https://app.vibecms.dev/mcp \
-H "Content-Type: application/json" \ -H "Authorization: Bearer vc_..." \ --data '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"sites.get","arguments":{}}}'
A valid token returns the current site in structuredContent; an invalid or missing token returns 401. The approval-first publishing flow is:
sites.get -> posts.format_guide -> draft -> posts.preview
-> latest saved version -> explicit approval -> posts.publish(postId, expectedVersionNumber) -> returned URL
Fix error and warn SEO findings before asking for publication approval. posts.preview includes deterministic seo findings. For a saved post, use posts.seo_check({postId, focusKeyword?}) or GET /api/v1/posts/{postId}/seo?focusKeyword=deployment. The 31 rules are plain code and run on every plan: 26 for search engines (metadata, headings, links, content, duplicates, indexing, focus keyword) and 5 for AI answers (a short opening paragraph before the first heading, numbers with a source link, sections short enough to quote, steps as lists). vibecms runs no AI model on your posts; your agent answers the judgment questions in the vibecms-seo skill with its own model.
The REST /api/v1 API mirrors the MCP tools with full read/write parity. Post lists return summaries without full Markdown, so fetch a single post body through REST or MCP posts.get:
curl "https://app.vibecms.dev/api/v1/posts?limit=20&offset=0" \
-H "Authorization: Bearer vc_..."
Hosted vibecms Cloud counts MCP and REST against the same workspace API quota. Rate-limit failures are machine-readable: REST returns 429 with RATE_LIMIT, and MCP returns a JSON-RPC rate-limit error.
vibecms is licensed under AGPL-3.0-or-later. See LICENSE.
The vibecms name and marks are covered by the trademark guidelines in TRADEMARKS.md.
pnpm install
pnpm typecheck pnpm lint pnpm test pnpm build pnpm public:audit pnpm db:migrate:local pnpm db:seed:local pnpm dev
Database migration SQL lives in packages/db/drizzle/ and is shared by both Workers. Local API development, Astro rendering, migrations, and seed commands share the root .wrangler/state directory so both Workers see the same D1 and R2 data.
See plans/README.md for the decision-record index.
vibecms now has a real self-host switch:
SELF_HOSTED=true
In self-host mode, Polar is optional, billing gates are disabled, and hosted workspace API quotas are not enforced by default. After signup and blog setup, the owner lands on /dashboard; publishing, media uploads, scoped agent access, activity history, and post versions run on the self-hoster's Cloudflare D1/R2 resources.
The repository deploys the same three-Worker topology in hosted and self-hosted modes:
apps/api/wrangler.jsonc, apps/public/wrangler.jsonc, and apps/og/wrangler.jsonc configure hosted development/production.wrangler.jsonc configures the self-hosted Hono API + dashboard Worker.wrangler.public.jsonc configures the self-hosted Astro public-blog Worker.wrangler.og.jsonc configures the optional self-hosted OG Worker.pnpm deploy builds all configured Workers, applies D1 migrations, then deploys API → OG → public (OG first so public's service bindings resolve).During deploy, configure the root Wrangler files (wrangler.jsonc, wrangler.public.jsonc, and wrangler.og.jsonc unless you omit OG per docs/self-hosting.md). Public blogs are host-only (tenant identity is the host), so the API/dashboard and public blog use separate Worker hosts:
APP_URL=https://vibecms.<your-subdomain>.workers.dev
BETTER_AUTH_URL=https://vibecms. .workers.dev PUBLIC_BLOG_DOMAIN=vibecms-public. .workers.dev SELF_HOSTED=true
The public blog serves at /, / , and /tag/ on PUBLIC_BLOG_DOMAIN; removed /blog/ /* path mode is not supported.
The only required self-host secrets are listed in .dev.vars.example:
BETTER_AUTH_SECRET=<generate with openssl rand -hex 32>
TOKEN_PEPPER=
Minimal local/self-host env shape (local URLs are not public hosted URLs):
APP_URL=https://vibecms.example.workers.dev
BETTER_AUTH_URL=https://vibecms.example.workers.dev PUBLIC_BLOG_DOMAIN=vibecms-public.example.workers.dev SELF_HOSTED=true BETTER_AUTH_SECRET= TOKEN_PEPPER=
See docs/self-hosting.md for the Cloudflare self-host flow and deploy-button notes.
apps/api/wrangler.jsonc and apps/public/wrangler.jsonc before production deploy.BETTER_AUTH_SECRET, TOKEN_PEPPER, POLAR_ACCESS_TOKEN, and POLAR_WEBHOOK_SECRET; AUTOSEOPILOT_INTERNAL_SECRET is optional and only enables the managed AutoSEOPilot routes.gh workflow run deploy-production.yml --ref main -f release_sha= -f smoke_mode=authenticated, which runs pnpm deploy:prod: preflights and builds production artifacts, captures backup metadata, migrates D1, deploys OG → public → API, then smokes. Astro sessions are disabled (no SESSION KV).For self-hosted production, set SELF_HOSTED=true and only BETTER_AUTH_SECRET plus TOKEN_PEPPER are required as secrets; Polar access token/product/webhook secrets are hosted-SaaS only.
Current Cloudflare development resources are wired in apps/api/wrangler.jsonc and apps/public/wrangler.jsonc:
vibecms-api-dev at https://app.basedui.devvibecms-public-dev at https://basedui.dev and *.basedui.devvibecms_devvibecms-assetsRun the full dev deploy/test flow:
pnpm install
pnpm typecheck pnpm lint pnpm db:seed:dev pnpm deploy:dev
pnpm deploy:dev syncs the development token pepper, applies remote D1 migrations, builds the dashboard assets, deploys the Hono API Worker, deploys the OG Worker, then builds and deploys the Astro public Worker.
For Polar billing, create a sandbox product in Polar and update the dev vars. The committed dev vars already carry sandbox product and launch-discount ids; if you use your own Polar sandbox products, set all four — POLAR_MONTHLY_PRODUCT_ID, POLAR_YEARLY_PRODUCT_ID, POLAR_LAUNCH_DISCOUNT_MONTHLY_ID, and POLAR_LAUNCH_DISCOUNT_YEARLY_ID — in apps/api/wrangler.jsonc under env.development.vars. Checkout selects the configured discounts automatically, so create matching forever-duration discounts that produce $9/month and $75/year, or remove the two discount vars to test list-price checkout:
pnpm --filter @vc/api exec wrangler secret put POLAR_ACCESS_TOKEN
pnpm --filter @vc/api exec wrangler secret put POLAR_WEBHOOK_SECRET pnpm deploy:dev
Recommended sandbox product setup:
POLAR_MONTHLY_PRODUCT_ID. If yearly is a separate Polar product, set it as POLAR_YEARLY_PRODUCT_ID. Set both launch discount ids too, or checkout sends the committed sandbox discounts.SELF_HOSTED=true bypasses billing gates entirely and never shows the link.Recommended minimum Polar organization access token scopes:
checkouts:write for creating checkout sessions.customer_sessions:write for creating customer portal sessions.You do not need product, order, refund, file, meter, webhook, or subscription write scopes for the current app runtime. Webhooks are verified with POLAR_WEBHOOK_SECRET, not the API token.
In Polar, set the webhook endpoint to:
https://app.vibecms.dev/api/polar/webhook
Subscribe to these webhook events:
subscription.created, subscription.updated, subscription.active, subscription.past_due, subscription.canceled, subscription.revoked.checkout.updated.只显示了开头部分;其余内容请在仓库中阅读