Skip to main content
Glama

Verge MCP Server

Model Context Protocol (MCP) server for VergeCMS - ChatGPT/ClaudeなどのAIアシスタントから直接ブログを管理

Tests TypeScript License

📋 概要

Verge MCP Serverは、VergeCMSをModel Context Protocol (MCP)サーバーとして実装したものです。Claude DesktopやChatGPTなどのAIアシスタントから、ブログの作成・管理、記事の作成・編集・公開を自然言語で行うことができます。

なぜこれが重要か?

  • AIアシスタントから直接CMS操作: 自然言語でブログや記事を管理

  • 14の強力なツール: 認証、ブログ管理、記事管理の完全なCRUD操作

  • 3ステップ自動認証: ブラウザ起動→ユーザー承認→トークン永続化

  • 型安全なAPI: TypeScript + Zodによる完全な型チェックとバリデーション

  • TDD開発: 155のテストによる品質保証

✨ 主な機能

ツール構成(14ツール)

認証ツール(3個)

  • verge_login - ブラウザ自動起動による認証フロー

  • verge_get_current_user - 現在のユーザー情報取得

  • verge_update_user - ユーザー情報更新

ブログ管理ツール(5個)

  • verge_list_blogs - ブログ一覧取得

  • verge_get_blog - ブログ詳細取得

  • verge_create_blog - ブログ作成

  • verge_update_blog - ブログ更新

  • verge_delete_blog - ブログ削除

記事管理ツール(6個)

  • verge_list_articles - 記事一覧取得(検索・フィルタリング可能)

  • verge_get_article - 記事詳細取得

  • verge_create_article - 記事作成

  • verge_update_article - 記事更新

  • verge_publish_article - 記事公開

  • verge_delete_article - 記事削除

その他の特徴

  • 自動認証フロー: ブラウザが自動起動し、認証後トークンを安全に保存

  • Zodバリデーション: すべてのAPI入出力を型安全に検証

  • エラーハンドリング: 詳細なエラー情報とリトライ機能

  • エクスポネンシャルバックオフ: ネットワークエラー時の賢いリトライ戦略

🚀 クイックスタート

前提条件

  • Node.js >= 18.0.0

  • VergeCMS アカウント (tomohirof/verge-cms)

  • MCPクライアント (Claude Desktop、ChatGPTなど)

インストール

# リポジトリのクローン git clone https://github.com/tomohirof/verge-mcp-server.git cd verge-mcp-server # 依存関係のインストール npm install # ビルド npm run build

環境変数の設定

.env.exampleをコピーして.envを作成:

cp .env.example .env

.envファイルを編集:

# Plume API URL VERGE_API_URL=https://api.vergecms.io # 認証情報(オプション: ブラウザ認証を使う場合は不要) VERGE_EMAIL=your-email@example.com VERGE_PASSWORD=your-password

注意: 環境変数に認証情報を設定しなくても、初回実行時にブラウザ認証フローが自動的に開始されます。

MCPクライアントでの設定

Claude Desktopの場合

~/Library/Application Support/Claude/claude_desktop_config.jsonに追加:

{ "mcpServers": { "plume": { "command": "node", "args": ["/absolute/path/to/verge-mcp-server/dist/index.js"], "env": { "VERGE_API_URL": "https://api.vergecms.io" } } } }

Claude Desktopを再起動後、以下のようにプロンプトで利用できます:

あなた: "ブログを作成してください。名前は『Tech Blog』です" → verge_create_blogツールが実行され、ブログが作成されます あなた: "先ほど作成したブログに新しい記事を書いてください" → verge_create_articleツールが実行され、記事が作成されます あなた: "記事を公開してください" → verge_publish_articleツールが実行され、記事が公開されます

🔐 3ステップ認証フロー

このMCPサーバーは、安全で使いやすい3ステップ認証フローを提供します:

1. ブラウザ自動起動 ↓ MCPサーバーが認証用URLでブラウザを自動的に開きます 2. ユーザー承認 ↓ ブラウザでVergeCMSにログインし、MCPサーバーへのアクセスを承認 3. トークン永続化 ↓ 認証トークンが安全にローカルに保存され、次回以降自動的に使用されます

認証の使い方

方法1: ブラウザ認証(推奨)

// Claude Desktopで以下のように実行 "VergeCMSにログインしてください" // 自動的にブラウザが起動し、認証フローが開始されます // 一度認証すれば、トークンが保存され、次回以降は自動ログイン

方法2: 環境変数認証

.envファイルに認証情報を設定:

VERGE_EMAIL=your-email@example.com VERGE_PASSWORD=your-password

📚 ツールリファレンス

認証ツール

verge_login

VergeCMSにログインし、JWTトークンを取得します。

入力パラメータ:

{ email?: string; // メールアドレス(オプション: 省略時はブラウザ認証) password?: string; // パスワード(オプション) }

レスポンス例:

{ success: true, token: "eyJhbGc...", user: { id: 1, email: "user@example.com", name: "John Doe" } }

verge_get_current_user

現在ログイン中のユーザー情報を取得します。

入力パラメータ: なし

レスポンス例:

{ id: 1, email: "user@example.com", name: "John Doe", created_at: "2024-01-01T00:00:00Z" }

verge_update_user

ユーザー情報を更新します。

入力パラメータ:

{ user_id: number; // ユーザーID name?: string; // 新しい名前 email?: string; // 新しいメールアドレス password?: string; // 新しいパスワード }

ブログ管理ツール

verge_list_blogs

すべてのブログを一覧表示します。

入力パラメータ: なし

レスポンス例:

[ { id: 1, name: "Tech Blog", title: "技術ブログ", slug: "tech-blog", description: "技術記事を書くブログ" } ]

verge_get_blog

特定のブログの詳細情報を取得します。

入力パラメータ:

{ blog_id: number; // ブログID }

verge_create_blog

新しいブログを作成します。

入力パラメータ:

{ name: string; // ブログ名(必須) title: string; // タイトル(必須) slug: string; // URLスラッグ(必須) description?: string; // 説明(オプション) }

使用例:

// Claude Desktopでの使用例 "新しいブログを作成してください。 名前: 'My Tech Blog' タイトル: '技術ブログ' スラッグ: 'tech-blog' 説明: '最新の技術トレンドを発信するブログ'"

verge_update_blog

既存のブログを更新します。

入力パラメータ:

{ blog_id: number; // ブログID(必須) name?: string; // 新しい名前 title?: string; // 新しいタイトル slug?: string; // 新しいスラッグ description?: string; // 新しい説明 }

verge_delete_blog

ブログを削除します。

入力パラメータ:

{ blog_id: number; // ブログID }

記事管理ツール

verge_list_articles

記事一覧を取得します(検索・フィルタリング可能)。

入力パラメータ:

{ blog_id: number; // ブログID(必須) search?: string; // 検索キーワード status?: 'draft' | 'published'; // ステータスフィルタ category_ids?: number[]; // カテゴリIDでフィルタ tag_ids?: number[]; // タグIDでフィルタ }

使用例:

// 公開済み記事のみを取得 { blog_id: 1, status: 'published' } // キーワード検索 { blog_id: 1, search: 'TypeScript' }

verge_get_article

記事の詳細情報を取得します。

入力パラメータ:

{ article_id: number; // 記事ID blog_id: number; // ブログID }

verge_create_article

新しい記事を作成します。

入力パラメータ:

{ blog_id: number; // ブログID(必須) title: string; // タイトル(必須) content: string; // 本文(必須、Markdown) slug: string; // URLスラッグ(必須) status?: 'draft' | 'published'; // ステータス(デフォルト: draft) featured_image?: string; // アイキャッチ画像URL excerpt?: string; // 抜粋 author_id?: number; // 著者ID category_ids?: number[]; // カテゴリID配列 tag_ids?: number[]; // タグID配列 }

使用例:

// Claude Desktopでの使用例 "新しい記事を作成してください。 ブログID: 1 タイトル: 'TypeScriptでMCPサーバーを作る' スラッグ: 'typescript-mcp-server' 内容: '# はじめに\n\nこの記事では...'"

verge_update_article

既存の記事を更新します。

入力パラメータ:

{ article_id: number; // 記事ID(必須) blog_id: number; // ブログID(必須) title?: string; // 新しいタイトル content?: string; // 新しい本文 slug?: string; // 新しいスラッグ status?: 'draft' | 'published'; // 新しいステータス featured_image?: string; // 新しいアイキャッチ画像 excerpt?: string; // 新しい抜粋 author_id?: number; // 新しい著者ID category_ids?: number[]; // 新しいカテゴリID配列 tag_ids?: number[]; // 新しいタグID配列 }

verge_publish_article

記事を公開状態に変更します。

入力パラメータ:

{ article_id: number; // 記事ID blog_id: number; // ブログID }

verge_delete_article

記事を削除します。

入力パラメータ:

{ article_id: number; // 記事ID blog_id: number; // ブログID }

🧪 開発ワークフロー

TDD方針

このプロジェクトはTest-Driven Development (TDD) で開発されています:

  1. Zodスキーマのユニットテスト優先: 入出力フォーマットを確定

  2. APIクライアント層: fetchモックでリクエスト生成・レスポンス処理をテスト

  3. MCPツール層: APIクライアントモックでハンドラーをテスト

  4. 統合テスト: 型整合性とMCPプロトコル整合性を確認

現在のテスト状態: 155テスト全てパス ✅

テストの実行

# 全テスト実行 npm test # テストUI起動 npm run test:ui # カバレッジ測定 npm run test:coverage

開発コマンド

# TypeScriptを直接実行(開発モード) npm run dev # MCPインスペクター(ツールの動作を検証) npm run inspector # ビルド npm run build # 型チェック npx tsc --noEmit # Lint npm run lint

📂 プロジェクト構造

verge-mcp-server/ ├── src/ │ ├── index.ts # MCPサーバーエントリーポイント │ ├── server.ts # MCPサーバーコア実装 │ ├── config.ts # 環境変数管理 │ ├── auth/ │ │ ├── index.ts # 認証フロー統合 │ │ ├── browser-auth.ts # ブラウザ認証フロー │ │ └── token-storage.ts # トークン永続化 │ ├── client/ │ │ ├── types.ts # Zodスキーマ・型定義 │ │ ├── errors.ts # カスタムエラークラス │ │ └── api.ts # Plume APIクライアント │ └── tools/ │ ├── schemas.ts # MCPツール入力スキーマ │ ├── auth.ts # 認証ツールハンドラー │ ├── blogs.ts # ブログ管理ツールハンドラー │ └── articles.ts # 記事管理ツールハンドラー ├── tests/ │ ├── client/ │ │ ├── types.test.ts # Zodスキーマテスト(43テスト) │ │ ├── api.test.ts # APIクライアントテスト(21テスト) │ │ ├── api-retry.test.ts # リトライ機能テスト(11テスト) │ │ ├── api-backoff.test.ts # バックオフテスト(7テスト) │ │ ├── api-timeout.test.ts # タイムアウトテスト(5テスト) │ │ └── errors.test.ts # エラーハンドリングテスト(11テスト) │ ├── tools/ │ │ ├── auth.test.ts # 認証ツールテスト(6テスト) │ │ ├── blogs.test.ts # ブログ管理ツールテスト(10テスト) │ │ └── articles.test.ts # 記事管理ツールテスト(8テスト) │ └── integration/ │ ├── server.e2e.test.ts # E2Eテスト(6テスト) │ ├── error-handling.test.ts # エラーハンドリング統合テスト(8テスト) │ └── articles.scenario.test.ts # 記事管理シナリオテスト(3テスト) ├── dist/ # ビルド出力 ├── package.json ├── tsconfig.json ├── vitest.config.ts └── README.md

🔧 トラブルシューティング

よくある質問(FAQ)

Q: 認証に失敗します

A: 以下を確認してください:

  • VergeCMSのアカウントが有効か

  • VERGE_API_URLが正しいか

  • ブラウザ認証の場合、ブラウザが正常に起動するか

  • 環境変数認証の場合、メールアドレスとパスワードが正しいか

Q: "Token expired" エラーが表示されます

A: トークンの有効期限が切れています。以下のコマンドで再認証してください:

# トークンファイルを削除 rm ~/.verge-mcp-token.json # Claude Desktopを再起動し、再度ログインを実行

Q: MCPツールが認識されません

A: Claude Desktopの設定を確認してください:

  1. claude_desktop_config.jsonのパスが正しいか

  2. dist/index.jsのパスが絶対パスになっているか

  3. Claude Desktopを再起動したか

Q: ビルドエラーが発生します

A: 以下を試してください:

# node_modulesを削除して再インストール rm -rf node_modules npm install # ビルド npm run build

セキュリティに関する注意事項

  • トークン保存: 認証トークンは~/.verge-mcp-token.jsonに保存されます

  • 環境変数: 本番環境では環境変数に認証情報を設定しないでください

  • ブラウザ認証推奨: セキュリティの観点から、ブラウザ認証フローの使用を推奨します

🔗 関連リンク

📝 ライセンス

MIT License - 詳細はLICENSEを参照してください。

👤 作者

Tomohiro Fukuda

🙏 謝辞

  • Anthropic - Model Context Protocolの開発

  • VergeCMS - ブログプラットフォーム

  • Zod - TypeScript-first schema validation

  • すべてのコントリビューターとユーザーの皆様

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tomohirof/verge-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server