vibecms について
vibecmsは、AIエージェントが記事を作成・公開するブログCMSです。Markdown編集、メディア管理、バージョン履歴、SEOチェックを備え、承認後に公開する運用に対応します。
主な機能
- 01Markdown記事編集
- 02メディアアップロード
- 03アクティビティと版履歴
- 04決定論的なSEOチェック
- 05承認後の公開
- 06ホスト型またはセルフホスト
活用シーン
- 01エージェント作成記事の下書きとレビュー
- 02承認前のSEO課題チェック
- 03記事の変更履歴の追跡
MCP 対応
Streamable HTTPで認証必須のMCPツールを公開し、エージェントによるサイトや記事の管理、プレビュー、公開、スキル取得に対応します。エージェントのアクセスはスコープ付き認証情報で制御されます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://app.vibecms.dev/mcpclaude mcp add --transport http dev-vibecms-vibecms https://app.vibecms.dev/mcp{"mcpServers":{"dev-vibecms-vibecms":{"type":"http","url":"https://app.vibecms.dev/mcp"}}}Cursor で開く{"servers":{"dev-vibecms-vibecms":{"type":"http","url":"https://app.vibecms.dev/mcp"}}}VS Code で開く{"mcpServers":{"dev-vibecms-vibecms":{"type":"http","url":"https://app.vibecms.dev/mcp"}}}{"mcpServers":{"dev-vibecms-vibecms":{"serverUrl":"https://app.vibecms.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
AI エージェント向け CMS。
エージェントが投稿する CMS です。Markdown の投稿、バージョン、メディアを、スコープ制限付き MCP または REST の /api/v1 API 経由で扱えます。すべての投稿の所有権はお客様にあります。変更操作はすべてアクティビティを作成し、投稿に意味のある変更があるとバージョンが作成されます。
機能
- シンプルなホスト型ブログダッシュボード
- 公開ブログページ
- Markdown 投稿エディター
- R2 メディアアップロード
- D1 データベース
- アクティビティ履歴
- 投稿のバージョン履歴
- スコープ制限付きの、再表示されないエージェントトークン(プレフィックスは
vc_live_) - 信頼されたエージェント向け MCP エンドポイント
- ホスト型 vibecms Cloud の Polar 課金
- Polar を使用しない
SELF_HOSTED=trueモード
MCP クライアントを接続する
vibecms は、標準に準拠した MCP を Streamable HTTP 経由で公開します。ホスト型 vibecms では https://app.vibecms.dev を使用し、セルフホストの場合は独自の API ホストを使用します。
MCP の検出やツールの使用には、サインインが必要です。initialize、tools/list、server/discover、従来の notifications/initialized はすべて認証を必要とします。Claude の Web、デスクトップ、Code などの OAuth クライアントでは、最初に 接続 または サインイン を選択します。Bearer トークンを含まないリクエストには、OAuth リソースメタデータのチャレンジを含む HTTP 401 が返されます。既存の API キーユーザーは、これまでどおり Bearer キーを送信できます。OAuth メタデータ、信頼された CIMD/パブリッククライアント登録、静的サーバーカード、HTTP エージェントスキルファイルは引き続き公開されています。
URL を指定して Claude Code を接続し、/mcp を開いてサインインし、アクセスを承認してください。
claude mcp add --transport http vibecms https://app.vibecms.dev/mcp
代わりにエージェントキーを使用するクライアントでは、ダッシュボードで 接続 を開き、スコープ付きトークンを作成して、一度だけコピーします。Bearer 認証情報として送信してください。
{
"mcpServers": {
"vibecms": {
"type": "http",
"url": "https://app.vibecms.dev/mcp",
"headers": {
"Authorization": "Bearer vc_..."
}
}
}
}
クライアントに依存しない安全対策、ライティング、SEO のスキルをインストールします(skills/ 内のすべてのスキル)。
npx skills add https://vibecms.dev --skill '*'
最新の状態を保つには npx skills update を実行してください。代わりに npx vibecms-cli skills get を使用すると、すべてのスキルを .agents/skills に保存できます(スキル名を渡すと一部のスキルを選択でき、--dir <path> で保存先フォルダーを指定でき、--force で既存ファイルを上書きできます)。または、接続済みのエージェントから MCP ツール skills.list と skills.get を呼び出すこともできます。
ホスト型サービスを利用する Claude Code ユーザーは、すべてのスキルと MCP サーバーを 1 つのプラグインとしてインストールできます。プラグインはサーバー URL を使って接続します。/mcp を開いてサインインし、OAuth 経由でアクセスを承認してください。
claude plugin marketplace add moinulmoin/vibecms
claude plugin install vibecms@vibecms
ディレクトリ掲載用の説明文と投稿に関する注意事項は、docs/directory-listings.md に記載されています。
認証情報で保護されたツール呼び出しを行い、サイトを読み取れることを確認してください(tools/list も認証が必要になりましたが、スコープで許可されたツールのみを一覧表示します)。
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":{}}}'
有効なトークンの場合、現在のサイトが structuredContent に返されます。無効なトークンまたはトークンがない場合は 401 が返されます。承認を先に行う公開フローは次のとおりです。
sites.get -> posts.format_guide -> draft -> posts.preview
-> latest saved version -> explicit approval
-> posts.publish(postId, expectedVersionNumber) -> returned URL
公開承認を求める前に、SEO の検出結果にある error と warn を修正してください。
posts.preview には、結果が一定の SEO 検出結果が含まれます。保存済みの投稿では、
posts.seo_check({postId, focusKeyword?}) または
GET /api/v1/posts/{postId}/seo?focusKeyword=deployment を使用してください。
31 個のルールは通常のコードで実装されており、すべてのプランで実行されます。検索エンジン向けが 26 個(メタデータ、見出し、リンク、コンテンツ、重複、インデックス登録、フォーカスキーワード)、AI の回答向けが 5 個(最初の見出しより前に短い導入段落を置く、出典リンク付きの数値を使う、引用しやすい長さのセクションにする、手順をリストにする)です。vibecms は投稿に対して AI モデルを実行しません。エージェントは独自のモデルを使用し、vibecms-seo スキルで判断が必要な質問に回答します。
REST の /api/v1 API は、MCP ツールと完全な読み書きの同等性を備えています。投稿一覧には Markdown 全文ではなく要約が返されるため、投稿本文を取得するには REST または MCP の posts.get を使って個別に取得してください。
curl "https://app.vibecms.dev/api/v1/posts?limit=20&offset=0" \
-H "Authorization: Bearer vc_..."
ホスト型 vibecms Cloud では、MCP と REST の両方が同じワークスペース API 使用枠の対象になります。レート制限エラーは機械可読です。REST では RATE_LIMIT を含む 429 が返され、MCP では JSON-RPC のレート制限エラーが返されます。
ライセンス
vibecms は AGPL-3.0-or-later のライセンスで提供されています。LICENSE を参照してください。
vibecms の名称とマークは、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
データベースのマイグレーション SQL は packages/db/drizzle/ にあり、両方の Worker で共有されています。
ローカル API 開発、Astro のレンダリング、マイグレーション、シードコマンドではルートの .wrangler/state ディレクトリを共有するため、両方の Worker から同じ D1 と R2 のデータを参照できます。
意思決定記録のインデックスについては、plans/README.md を参照してください。
セルフホストモード
vibecms に正式なセルフホスト切り替え機能が追加されました。
SELF_HOSTED=true
セルフホストモードでは Polar は任意となり、課金制限は無効になり、ホスト型ワークスペースの API クォータはデフォルトで適用されません。サインアップとブログのセットアップが完了すると、オーナーは /dashboard に移動します。公開、メディアのアップロード、スコープを限定したエージェントアクセス、アクティビティ履歴、投稿バージョンは、セルフホスト環境の Cloudflare D1/R2 リソース上で動作します。
このリポジトリでは、ホスト型とセルフホスト型の両方で、同じ 3 つの Worker 構成をデプロイします。
apps/api/wrangler.jsonc、apps/public/wrangler.jsonc、apps/og/wrangler.jsoncは、ホスト型の開発環境/本番環境を設定します。- ルートの
wrangler.jsoncは、セルフホスト型の Hono API + ダッシュボード Worker を設定します。 - ルートの
wrangler.public.jsoncは、セルフホスト型の Astro パブリックブログ Worker を設定します。 - ルートの
wrangler.og.jsoncは、任意のセルフホスト型 OG Worker を設定します。 pnpm deployは、設定されているすべての Worker をビルドし、D1 マイグレーションを適用してから、API → OG → public の順にデプロイします(public のサービスバインディングを解決できるよう、先に OG をデプロイします)。
デプロイ時には、ルートの Wrangler ファイル(wrangler.jsonc、
wrangler.public.jsonc、および docs/self-hosting.md に従って OG を省略しない場合は
wrangler.og.jsonc)を設定してください。パブリックブログはホストのみを使用します
(テナントの識別にはホストを使います)。そのため、API/ダッシュボードとパブリックブログには別々の
Worker ホストが必要です。
APP_URL=https://vibecms.<your-subdomain>.workers.dev
BETTER_AUTH_URL=https://vibecms.<your-subdomain>.workers.dev
PUBLIC_BLOG_DOMAIN=vibecms-public.<your-subdomain>.workers.dev
SELF_HOSTED=true
パブリックブログは、PUBLIC_BLOG_DOMAIN 上の /、/<post-slug>、/tag/<tag> で配信されます。削除された /blog/<site-slug>/* パスモードには対応していません。
セルフホストに必要なシークレットは、.dev.vars.example に記載されているものだけです。
BETTER_AUTH_SECRET=<generate with openssl rand -hex 32>
TOKEN_PEPPER=<generate with openssl rand -hex 32>
ローカル/セルフホスト環境の最小限の環境変数構成(ローカル URL はホスト型の公開 URL ではありません):
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=<generate with openssl rand -hex 32>
TOKEN_PEPPER=<generate with openssl rand -hex 32>
Cloudflare でセルフホストする手順とデプロイボタンに関する注意事項については、docs/self-hosting.md を参照してください。
リリースに関する注意事項
- 本番環境にデプロイする前に、共有する Cloudflare D1/R2 の ID を
apps/api/wrangler.jsoncとapps/public/wrangler.jsoncに設定してください。 - Wrangler で API Worker のシークレット
BETTER_AUTH_SECRET、TOKEN_PEPPER、POLAR_ACCESS_TOKEN、POLAR_WEBHOOK_SECRETを設定してください。AUTOSEOPILOT_INTERNAL_SECRETは任意で、マネージド AutoSEOPilot ルートを有効にする場合のみ必要です。 - 両方の Worker 設定で、製品、URL、ホストの各変数を設定してください。
- レビュー済みコミットを
gh workflow run deploy-production.yml --ref main -f release_sha=<full sha> -f smoke_mode=authenticatedで昇格させると、pnpm deploy:prodが実行されます。これは本番アーティファクトの事前チェックとビルド、バックアップメタデータの取得、D1 のマイグレーション、OG → public → API のデプロイを行ってから、スモークテストを実行します。Astro セッションは無効です(SESSION KV はありません)。
セルフホスト型の本番環境では、SELF_HOSTED=true を設定してください。シークレットとして必要なのは BETTER_AUTH_SECRET と TOKEN_PEPPER のみです。Polar のアクセストークン/製品/Webhook のシークレットは、ホスト型 SaaS でのみ使用します。
開発環境へのデプロイ
現在のCloudflare開発リソースは、apps/api/wrangler.jsoncとapps/public/wrangler.jsoncで設定されています。
- API+ダッシュボードのWorker:
https://app.basedui.devのvibecms-api-dev - 公開用Astro Worker:
https://basedui.devおよび*.basedui.devのvibecms-public-dev - 共有D1データベース:
vibecms_dev - 共有R2バケット:
vibecms-assets
開発環境のデプロイとテストを一通り実行します。
pnpm install
pnpm typecheck
pnpm lint
pnpm db:seed:dev
pnpm deploy:dev
pnpm deploy:devは、開発用トークンのpepperを同期し、リモートD1のマイグレーションを適用し、ダッシュボードのアセットをビルドして、Hono API Workerをデプロイします。続いてOG Workerをデプロイし、最後にAstroの公開用Workerをビルドしてデプロイします。
Polarの課金を設定するには、Polarでサンドボックス製品を作成して、開発環境の変数を更新してください。
コミット済みの開発環境変数には、サンドボックス製品とローンチ割引のIDがすでに設定されています。独自のPolarサンドボックス製品を使用する場合は、POLAR_MONTHLY_PRODUCT_ID、POLAR_YEARLY_PRODUCT_ID、POLAR_LAUNCH_DISCOUNT_MONTHLY_ID、POLAR_LAUNCH_DISCOUNT_YEARLY_IDの4つすべてを、apps/api/wrangler.jsoncのenv.development.varsに設定してください。
チェックアウトでは設定済みの割引が自動的に選択されるため、月額9ドル、年額75ドルになる期間無期限の割引を作成してください。または、通常価格でのチェックアウトをテストするには、2つの割引用変数を削除してください。
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
推奨するサンドボックス製品の設定:
- 定期購読製品。
- 価格:月額15ドル(通常価格)。Polarで年額製品/価格を作成する場合は年額150ドル(割引適用時は割引により月額9ドル、年額75ドル)。
- 月額製品を
POLAR_MONTHLY_PRODUCT_IDに設定してください。年額製品が別のPolar製品の場合は、POLAR_YEARLY_PRODUCT_IDに設定してください。ローンチ割引のIDも両方設定してください。設定しない場合、チェックアウトではコミット済みのサンドボックス割引が送信されます。 - ホステッドモードでは、無料利用の上限は公開済み記事5件、同時に5件の下書き、画像10枚です。クレジットカードは不要で、無料ブログには「vibecmsで公開」という小さなリンクが表示されます。サブスクリプションに加入すると、投稿数が無制限になり、10 GBのメディア容量、分析、カスタムドメインが利用でき、リンクが非表示になります。セルフホストモードでは、
SELF_HOSTED=trueにすると課金制限がすべて適用されず、リンクも表示されません。 - ローンチ特典:ホステッドブログ1つ、投稿数無制限、メディア容量10 GB、月間リクエスト上限のないスコープ限定のエージェントアクセス(分単位および日単位の制限のみ)、アクティビティとバージョン履歴、読者およびAIによる発見状況の分析。
- アプリで適用されるアップロードポリシー:JPEG/PNG/WebP/GIFのみ、画像サイズは最大10 MB、動画のホスティング不可、汎用ファイルのホスティング不可。
Polar組織のアクセストークンに推奨する最小限のスコープ:
- チェックアウトセッションの作成に必要な
checkouts:write。 - 顧客ポータルセッションの作成に必要な
customer_sessions:write。
現在のアプリの実行時には、製品、注文、返金、ファイル、メーター、Webhook、サブスクリプションに対する書き込みスコープは必要ありません。Webhookの検証にはAPIトークンではなくPOLAR_WEBHOOK_SECRETを使用します。
PolarでWebhookエンドポイントを次のように設定してください。
https://app.vibecms.dev/api/polar/webhook
次のWebhookイベントを登録してください。
- 必須:
subscription.created、subscription.updated、subscription.active、subscription.past_due、subscription.canceled、subscription.revoked。 - チェックアウト/顧客情報の照合におけるフォールバックとして必須:
checkout.updated。 - 今後の分析に役立つ任意のイベント:
order.paid。
現在、アプリはsubscription.*のペイロードと、成功したcheckout.updatedのペイロードから課金状態を更新します。Webhookの配信形式はraw JSONのままにし、エンドポイントの署名シークレットをPOLAR_WEBHOOK_SECRETにコピーしてください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。