mcpField
C
cms

cms

リモート
github.com/SparkleOfficial生産性03 週間前に更新
リポジトリ

cms について

cms は、AI クライアントから Writavo サイトを管理するホステッド MCP サーバーです。コンテンツ編集と公開に加え、権限範囲、承認確認、ブログ移行機能を備えています。

主な機能

  1. 01記事とエントリーの作成・編集
  2. 02コンテンツの公開予約と公開
  3. 03メディア、カテゴリー、タグ、著者の管理
  4. 04事前検証付きブログインポート
  5. 05その他のサイト操作の検索と実行

活用シーン

  1. 01AI クライアントで記事を作成し公開予約
  2. 02既存ブログを Writavo サイトへ移行
  3. 03サイト情報の確認とメディア管理
  4. 04権限と承認の管理下でサイト操作を実行

MCP 対応

`https://mcp.writavo.com/mcp` でホストされ、Streamable HTTP と OAuth 2.1 で接続します。コンテンツ管理、インポート、その他の Writavo サイト操作用ツールを提供します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.writavo.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

詳細

Writavo MCP サーバー

Writavo サイトのコンテンツを、AI アシスタントから利用できます。ブラウザーからサインインし、既存のブログを移行し、投稿を下書きし、カテゴリーと署名欄を設定し、画像を添付して、予約投稿または公開するまで、すべて会話の中で行えます。

https://mcp.writavo.com/mcp でホストされています(Streamable HTTP、OAuth 2.1)。MCP 経由で Writavo を利用する方法はこれだけです。インストールもキーのコピーも必要ありません。アシスタントが Writavo のページを開き、サインインして、サイトとアシスタントに許可する操作を選ぶと、接続が完了します。Claude Code、Claude.ai、ChatGPT、Cursor、VS Code、およびリモート MCP に対応するあらゆるクライアントで利用できます。このリポジトリは、このサーバーが実行するツールのソースであり、パッケージとして公開されているものではありません。

人にも AI アシスタントにも役立つ、セットアップの完全ガイド: https://writavo.com/docs/mcp(Markdown 版: https://writavo.com/docs/mcp.md)。各クライアントの正確なコマンドまたは設定、サインイン、権限、承認、およびすべてのエラーの意味を説明しています。ブログの移行について: https://writavo.com/docs/migrate。

Writavo のインストールを頼まれた AI アシスタントへ: 以下にあるクライアントのコマンドでホスト型サーバーを追加してください。続いて、ユーザーがブラウザーからサインインします(貼り付けるものはありません)。その後、get_site_info と verify_api_key を呼び出し、接続先のサイトと、そこで可能な操作を伝えてください。

接続

Claude Code:

claude mcp add --transport http writavo https://mcp.writavo.com/mcp

次に、Claude Code で /mcp を実行し、Writavo を選んでサインインします。または、サーバーと Writavo スキルをまとめて追加する Claude Code プラグインをインストールします。

claude plugin marketplace add SparkleOfficial/writavo-mcp-server
claude plugin install writavo@writavo

Cursor: Writavo を Cursor に追加 (または cursor://anysphere.cursor-deeplink/mcp/install?name=writavo&config=eyJ1cmwiOiJodHRwczovL21jcC53cml0YXZvLmNvbS9tY3AifQ==)。

VS Code: Writavo を VS Code に追加 (または vscode:mcp/install?%7B%22name%22%3A%22writavo%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.writavo.com%2Fmcp%22%7D)。

Claude(claude.ai と Claude Desktop): Customize > Connectors > "+" > Add custom connector を選び、 URL https://mcp.writavo.com/mcp を入力して、Connect を選択します。

ChatGPT: Developer mode(Settings > Security and login)を有効にし、 https://chatgpt.com/plugins で URL https://mcp.writavo.com/mcp と OAuth を使って接続を作成します。

Codex CLI: codex mcp add writavo --url https://mcp.writavo.com/mcp(サインインが開始されます。 codex mcp login writavo で再度実行できます)。

Gemini CLI: gemini mcp add --transport http -s user writavo https://mcp.writavo.com/mcp を実行し、 続けて /mcp auth writavo を実行します。

Windsurf と Zed: https://writavo.com/docs/mcp#clients をご覧ください。

JSON 設定を使うその他のクライアント:

{
  "mcpServers": {
    "writavo": { "type": "http", "url": "https://mcp.writavo.com/mcp" }
  }
}

OAuth に対応していないクライアントでは、代わりに Writavo のシークレットキーをベアラートークンとして送信できます (Authorization: Bearer wv_sk_...。https://app.writavo.com/settings/api-keys で作成します)。手動で作成したキーは AI エージェントキーではないため、権限の選択、オフスイッチ、呼び出しログは適用されません。サインインを推奨します。

接続時に Writavo は、どのアシスタントが接続を要求しているか、接続後に戻る先、接続するサイト、および実行可能な操作を表示します。領域ごとに 1 行ずつ表示されます(記事、コンテンツタイプとエントリー、カテゴリー、タグ、著者、メディア、AI パイプライン、サイト設定とデザイン、公開とドメイン、SEO、アウトリーチ連絡先、読者コメント、チームと組織、請求、レポートとログ)。各領域で「アクセスなし」、「読み取り」、「読み取りと書き込み」を選択できます(パイプラインはクレジットを消費する「読み取り、計画、実行」、読者コメントは「読み取りとモデレート」です。アウトリーチ連絡先とレポートは読み取り専用です)。選択肢の初期設定は組織の既定値に基づきます。コンテンツ、メディア、サイト設定は「読み取りと書き込み」、それ以外は「読み取り」です。ただし、アウトリーチ連絡先と読者コメントには他の人の名前やメールアドレスが含まれるため、選択しない限り無効になっています。接続には、アクセスする各サイトに対して、選択した権限に制限された通常の Writavo キーが使われ、アプリ名(「Claude Code (hosted MCP)」)が付けられます。接続済みのアシスタント、その呼び出し内容を確認し、アクセスを取り消すには、https://app.writavo.com/settings/agents にアクセスしてください。

できること

Writavo が公開している OpenAPI 仕様から 45 個のツールを生成し、さらに 9 個を手作業で作成しています。

  • 記事。 記事の一覧表示、読み取り、作成、更新、削除、公開、公開停止、予約投稿、予約のキャンセル。
  • コンテンツタイプとエントリー。 コンテンツタイプの一覧表示と読み取り、エントリーの一覧表示、読み取り、作成、更新、削除、公開、公開停止、予約投稿。
  • タクソノミーとユーザー。 カテゴリー、タグ、著者の一覧表示、読み取り、作成、更新、削除。
  • メディア。 一覧表示、読み取り、更新、削除のほか、upload_media を使うと、アシスタントが一連の処理を調整しなくても、署名付き URL を使った 3 ステップのアップロードを 1 回の呼び出しで実行できます。公開 url、または filename を指定した base64 のバイトデータを受け取ります。
  • パイプライン。 実行の開始、ステータスの確認、キューの確認。
  • メタ情報。 サイト情報、コンテンツタイプ、プランの使用状況と残高、キーが一切不要な get_api_docs。
  • サインイン。 サインイン用のツールはありません。接続時にサーバーが OAuth でサインインします。
  • プラン。 start_plan_purchase は、プランがあらかじめ選択された請求ページへのリンクを返します。支払いはブラウザーで開く Stripe のページで行われ、チャット内で行われることはありません。コンテンツを保存、公開、インポートする CMS は従量課金制で、プランは不要です。プランを購入すると、AI 記事パイプラインを利用できます。
  • インポート。 import_content を使うと、既存のブログを取り込めます(下記参照)。
  • その他すべてをアクションとして提供。 サイト設定とナレッジプロフィール、組織、記事フォーマットと AI プロンプト、パイプラインの設定とコンテンツプラン、配信とドメイン、SEO、アウトリーチ、訪問者分析とそのインストール確認、読者コメント、チームとロール、請求、インサイトとログは、個別のツールとしては提供されません。search_writavo_actions に「チームメンバーを招待」「カスタムドメイン」などの短い語句を渡すと、一致する操作とともに、それぞれの入力スキーマ、必要なスコープ、事前確認が必要か、承認が必要か、費用がかかるか、使用するランナーが返されます。read_writavo_action は読み取りを実行します(GET 操作のみを実行するため、クライアントは確認なしで許可できます)。run_writavo_action は変更を伴う操作を実行します。どちらも operation_id を受け取り、最初にスキーマに照らして引数を検証します。アシスタントには絶対に実行できない操作(「カードを追加」「サイトを削除」など)の依頼には、その操作を返し、利用者が操作するダッシュボードのリンクも示します。そのため、クライアントが読み込むツールの説明は 100 個を大きく超えるのではなく、数十個に抑えられ、残りの説明は検索時にのみ取得されます。

すべてのツールに MCP アノテーションが付いています。読み取りには readOnlyHint、削除と公開停止には destructiveHint、読み取り、更新、削除には idempotentHint、そしてすべてのツールが 1 つの閉じたシステムであるお客様のサイトだけにアクセスするため、openWorldHint: false が設定されています。

ブログのインポート

migrate-content プロンプトは、接続、すでに持っているアクセス権で現在のシステムを調査、インポートファイルを作成、ドライラン、修正、インポート、検証という一連の移行手順をアシスタントに案内します。スラッグは保持されるため URL は変わらず、公開済みの投稿は元の公開日が維持され、下書きは下書きのままです。画像はメディアライブラリにコピーされます。

ドキュメントは単一の JSON ドキュメントである Writavo Import Format v1 です。サーバーは、インポートの進行状況とともに、import_id を使って保存済みインポートとして保持します(最後に使用されてから 7 日間、開始した接続に対して保持されます)。そのため、ドキュメントは一度送るだけでよく、以降の呼び出しはすべて { "import_id": ... } だけです。最大 10 MB で、送信方法は 3 つあります。

  • upload: true は、一度だけ使えるリンクと、ファイルをサーバーに直接 PUT する curl コマンドを返します。シェルコマンドを実行できるアシスタントに最適です。ファイルが会話を経由することはありません。
  • url:サーバーが匿名で取得する https URL(署名付きストレージ URL など)。
  • data:ドキュメントをインラインで送信します。1 回の呼び出しにつき最大 50 件の記事、512 KB までです(小さなドキュメントのみ)。それより大きなドキュメントは分割して送信し、最初の呼び出しで返された import_id を各パートで使用します。著者は ref、カテゴリーとタグは slug、記事は external_id に基づいて統合され、再送信されたエントリーは保存済みのものを置き換えます。

ドキュメントの例:

{
  "format": "writavo-import",
  "version": 1,
  "authors": [{ "ref": "jane", "name": "Jane Doe", "is_ai_generated": false }],
  "categories": [{ "slug": "guides", "name": "Guides" }],
  "tags": [{ "slug": "soil", "name": "Soil" }],
  "articles": [
    {
      "external_id": "blog:1001",
      "status": "published",
      "title": "How to test your soil",
      "slug": "how-to-test-your-soil",
      "content": "Markdown, with ![images](https://example.com/kit.jpg)",
      "author": "jane",
      "category": "guides",
      "tags": ["soil"],
      "published_at": "2021-03-04T09:30:00Z"
    }
  ]
}

フィールドの全一覧と JSON Schema は writavo://import-format リソースに記載されています。または、引数なしで import_content を呼び出してください。external_id は各記事に割り当てる独自の安定した ID で、これにより 2 回目の実行で重複ではなく更新が行われます。

import_content は、明示的に指定しない限りドライランです。ドキュメント全体を Site に対して一度に検証し、新規作成、更新、公開される内容、すべての問題(トップレベルのエントリーと external_id ごとの各記事をまとめて)、コピーする画像、および所要時間の見積もりを報告し、何も書き込みません。公開を伴うインポートには confirm: true が必要です。適用処理はその後、Writavo のサーバー上でバックグラウンドですべての記事が処理されるまで実行され、すぐに応答を返します。{ "import_id": ..., "status": true } で進捗と処理にかかった時間を確認でき、cancel: true で実行中のバッチ終了後に停止できます。記事を再送信すると重複ではなく更新されるため、インポートは安全に再実行できます。

同じインポートは、アシスタント以外の用途(スクリプト、CLI、記事をプッシュする別の CMS など)向けの REST API としても利用できます。ドキュメントを指定する POST /v1/imports、POST /v1/imports/{id}/start、GET /v1/imports/{id} を使用します。https://writavo.com/docs/migrate を参照してください。削除や公開解除は一切行わず、コピーした画像の URL 以外、コンテンツは何も変更しません。

確認なしでは実行されない操作

publish_article、schedule_article、すべての delete_*、trigger_pipeline_run、および公開を伴う import_content は、最初の呼び出しでは何も実行しません。実行される内容を説明して confirm: true を待ちます。アシスタントがこれを設定できるのは、ユーザーの同意を得た後だけです。公開するとコンテンツがライブサイトに掲載され、削除は取り消せず、パイプラインの実行には実際のクレジットが消費されます。

アクションにも同じルールが適用されます。run_writavo_action は、費用が発生する操作、ライブサイトを変更する操作、何かを削除する操作、またはチームを変更する操作について説明し、confirm: true を待ちます。

キーがどのスコープを持っていても、アシスタントからはアクセスできないものもあります。

  • API キー。 シークレットキーを発行できるサーバーが侵害されれば、シークレットキーが発行されることになります。
  • Webhook。 配信先 URL を変更できるアシスタントがいると、イベントストリームを気付かれないうちに別の場所へ転送される可能性があります。
  • AI エージェントの制御、自身のリクエストの承認、支払い情報、プランの変更、所有権、Site または組織の削除、アウトリーチポリシーとメールボックス、CMS または Bing の認証情報。 get_api_docs(tools セクション)には、それぞれに対して人が使用するダッシュボードへのリンクが記載されています。

これらはすべてダッシュボードで操作します。

承認とエージェントの無効化

ブラウザーからサインインしたアシスタントが何かを削除したり、記事を非公開にしたりする場合、組織で事前に人による承認を必須にできます。これはデフォルトで有効です。アシスタントが要求した場合、スイッチの設定にかかわらず、費用が発生する操作やチームを変更する操作(パイプラインの実行とパイプラインの拡張、有料の SEO スキャン、カスタムドメイン、ホストサイトの公開、CMS の接続とプッシュ、自動補充、クレジット上限の引き上げ、プランの維持、招待、ロールと権限の変更、メンバーの削除)は、常に承認が必要です。ツールは何も実行せず、https://app.writavo.com/approvals/... へのリンクを返します。そこで承認すると、アシスタントは承認 ID を添えて呼び出しを再実行し、そのリクエストに限り、一度だけ処理されます。オーナーまたは管理者は、https://app.writavo.com/settings/agents で承認を無効にするか、組織全体の AI エージェントアクセスを無効にできます。このページには、接続されているすべてのアシスタントと、それらが行ったすべての呼び出しも表示されます。ダッシュボードで自分で作成したキーは、どちらのスイッチの対象にもなりません。

決して記録しない情報

  • 接続用のキーは、Bearer ヘッダーとして https://api.writavo.com/v1 にのみ送信され、それ以外には送信されません。テレメトリー、分析情報、サードパーティーのホストには送信されません。各リクエストには、呼び出したツール(Writavo-Mcp-Tool)が指定され、これによって「設定」>「AI エージェント」の呼び出しログが記録されます。ベース URL は仕様から読み取られます。それ以外のリクエストは、upload_media またはインポート時の署名付きストレージアップロードと、インポート時に、コピーするために独自ファイル内の画像 URL を取得する処理のみです。
  • すべての応答、ログ行、エラーにはレダクターが適用されます。そのため、API がエラーメッセージ内でキーを返した場合でも、キーが会話履歴に含まれることはありません。

表示される可能性のあるエラー

各エラーには、ステータスコードではなく、変更すべき内容が返されます。

コード意味対処方法
INSUFFICIENT_SCOPEキーに必要なスコープがないか、キーの作成者の権限が現在その操作に及びません必要な権限で再接続(サインイン)するか、https://app.writavo.com/settings/api-keys で自分が作成したキーにスコープを追加してください
NOT_ENTITLEDご利用のプランにその機能が含まれていませんhttps://app.writavo.com/billing でアップグレードしてください
INSUFFICIENT_CREDITS組織に次の作業単位を実行するだけのクレジットがありませんhttps://app.writavo.com/billing でチャージしてください
SPEND_CAP_REACHEDこのサイトで設定した月間上限に達しました上限を引き上げるか、リセットをお待ちください
NOT_FOUND該当するオブジェクトがないか、別のサイトに属しています正しいサイトのキーを使用していることを確認してください
AGENT_ACCESS_DISABLED組織の AI エージェントアクセスが無効になっていますオーナーまたは管理者が https://app.writavo.com/settings/agents で有効にします
APPROVAL_REQUIREDこの操作には人による承認が必要ですリンクを共有し、承認を待ってから、approval_id を付けてツールを再度呼び出してください
APPROVAL_PENDINGまだ誰も決定していませんリンクを開くよう依頼し、承認されたら再度呼び出してください
APPROVAL_DENIED承認が人によって却下されました再試行はできません。代わりにどうするかを決めてください
APPROVAL_INVALID承認の有効期限が切れたか、使用済みか、別のリクエストに対するものですapproval_id を付けずにツールを再度呼び出してください
API_KEY_REVOKED / API_KEY_EXPIRED接続用のキーが取り消されたか、有効期限が切れています再接続して、もう一度サインインしてください
PAYMENT_METHOD_REQUIRED含まれている CMS 利用枠を使い切り、登録済みのカードがありませんhttps://app.writavo.com/billing でカードを追加してください。プランの上限ではありません

エラーの全一覧は、get_api_docs の errors と https://writavo.com/docs/errors にあります。 サインインに関する問題(ブラウザーのページに「このブラウザーではサインインを確認できませんでした」と表示される、選択するサイトがないなど)については、https://writavo.com/docs/mcp#troubleshooting をご覧ください。

プロンプト

  • draft-article. トピックを調査し、あなたのサイト独自のトーンで下書きを作成します。公開や予約投稿は行いません。
  • publish-checklist. 既存の下書きについて、タイトル、スラッグ、SEO 項目、抜粋、カテゴリー、著者、アイキャッチ画像を順に確認し、公開前に確認を求めます。
  • migrate-content. 別のシステムにある既存のブログを、忠実にあなたのサイトへ移行します。ドライランを実施し、公開前に確認を求めます。https://writavo.com/docs/migrate の手順書に従います。

開発

このパッケージは Writavo モノレポ内のプライベートなワークスペースパッケージであり、npm には公開されていません。ツールは src/core/ に集約され、@writavo/mcp-server/core としてエクスポートされます。ホスト型サーバーはこれをバンドルします。

import { createWritavoMcpServer } from "@writavo/mcp-server/core";

const server = createWritavoMcpServer({
  apiKey: () => key,              // null makes every key-requiring tool say how to connect
  userAgent: "my-host/1.0",
});

このパッケージは環境変数を読み取らず、ファイルシステムにアクセスせず、モジュールの状態にもキーを保持しないため、Cloudflare Worker で実行できます(ホスト型サーバーはまさにこれをマウントします)。ローカル用や stdio 用のエントリーポイントはありません。このパッケージには bin がなく、./core のみをエクスポートします。ツールのスキーマ、説明、参照テキストは手書きではなく生成されます。

npm run build       check the generated tools are current, then compile
npm run gen         regenerate from the vendored openapi.yaml
npm test            run the offline smoke checks (the core over an in-memory MCP client, imports and more, against a stub API)
npm run gen:check   fails if the committed tool surface is stale

openapi.yaml にエンドポイントを追加して再生成するだけで追加は完了します。x-writavo-approval が指定されたオペレーションには、approval_id 引数が自動で追加されます。ツールとして指定された 45 個のオペレーションはそれぞれ個別のツールです。それ以外のオペレーションはすべて、タグ、またはオペレーションやタグに指定された x-mcp-surface: tool | action に基づいて、src/generated/operations.ts の ACTIONS カタログに登録されます。これらは search_writavo_actions、read_writavo_action、run_writavo_action で利用できます。src/generated/ 以下のファイルを編集すると CI に失敗します。手書きの 9 個のツールは src/tools/ にあり(src/core/server.ts の CORE_LOCAL_TOOL_NAMES)、モノレポの scripts/mcp-surface.mjs にある LOCAL_TOOLS に一覧されています。

ライセンス

MIT(LICENSE)。フォーク、変更、ベンダリング、別の製品への組み込みが可能です。

MIT ライセンスの許諾対象はこのクライアントコードのみです。このパッケージが呼び出す Writavo Content API や、Writavo のその他の部分に対するライセンスではありません。API の利用には引き続き独自の認証情報が必要であり、https://writavo.com/terms の規約が適用されます。また、このパッケージのコンパイル元である仕様 openapi.yaml は、従来どおりプロプライエタリな契約です。

この区分は意図的なものです。このコードは薄い生成クライアントであり、制限する価値のあるものは何もありません。MIT ライセンスのクライアントのほうが、信頼しやすく監査も容易です。製品の本体は、その背後にある API です。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。