mcpField
G
ghost-mcp-server

ghost-mcp-server

ローカル
github.com/proarsビジネス・マーケティング11 週間前に更新

ghost-mcp-server について

ghost-mcp-serverは、Ghost Admin APIを通じてGhost CMSを管理するTypeScript製MCPサーバーです。MCPクライアントからコンテンツやSEO、メンバーを操作でき、専用ツールのないAPIルートも検索・呼び出せます。

主な機能

  1. 01投稿やページの作成・編集・削除
  2. 02タグ、メンバー、ニュースレターの管理
  3. 03投稿とページのSEOメタデータ設定
  4. 04画像とテーマのアップロード
  5. 05ルート検索と汎用APIリクエスト

活用シーン

  1. 01Ghostの投稿やページの下書き・更新
  2. 02SEO項目や投稿タグの調整
  3. 03メンバーとニュースレター設定の管理
  4. 04専用ツールのないAdmin APIルートの検索・呼び出し

MCP 対応

stdioでMCPクライアントをGhost Admin APIに接続し、コンテンツ管理ツール、ルート検索、汎用リクエストツールを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"proars-ghost": {
"command": "npx",
"args": [
"-y",
"@proars/ghost-mcp-server"
],
"env": {
"GHOST_API_URL": "<GHOST_API_URL>",
"GHOST_ADMIN_API_KEY": "<GHOST_ADMIN_API_KEY>"
}
}
}
}
起動コマンドnpx -y @proars/ghost-mcp-server
設定が必要な環境変数
GHOST_API_URLGhost Admin domain, for example https://your-blog.com
GHOST_ADMIN_API_KEYシークレットGhost Admin API key (id:secret)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@proars/ghost-mcp-server2.2.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Ghost MCP Server:Claude、Cursor、その他のAIクライアントからGhost CMSを管理

CI npm Node.js 20+ Tools Routes License: MIT

Ghost MCP Serverは、TypeScriptで書かれたGhost CMS向けのオープンソースModel Context Protocolサーバーです。Claude Desktop、Claude Code、CursorなどのMCPクライアントを、stdio経由でGhost Admin APIに接続します。これにより、AIアシスタントは投稿やページの作成・編集、SEOメタデータの設定、タグ・メンバー・ニュースレターの管理、画像やテーマのアップロード、コンテンツのエクスポートを行えます。

60個のツールを提供します。内訳は、API専用ツール55個、SEOとタグ向けのショートカット3個、ルート検索ツール1個、汎用リクエストツール1個です。組み込みカタログには、固定されたGhostのソーススナップショットから取得した253個のAdmin APIルートが含まれています。サイトで利用できる機能は、認証情報、Ghostのバージョン、機能フラグによって異なります。ルートとソースについてはGHOST_API.listをご覧ください。

デモ:Claude CodeがMCPサーバー経由でGhostに下書き投稿を作成

クイックスタート

Node.js 20以降と、Admin APIにアクセスできるGhostサイトが必要です。

  1. Ghost AdminでSettings → Integrations → Add custom integrationを開き、Admin API Key(id:secret)をコピーします。Content APIキーは使用しないでください。
  2. クライアントの設定にサーバーを追加します。Claude DesktopまたはCursorの場合:
{
  "mcpServers": {
    "ghost": {
      "command": "npx",
      "args": ["-y", "@proars/ghost-mcp-server"],
      "env": {
        "GHOST_API_URL": "https://your-blog.com",
        "GHOST_ADMIN_API_KEY": "64f1a2b3c4d5e6f7a8b9c0d1:3e5f7a9b1c2d4e6f8a0b2c4d6e8f0a1b3c5d7e9f1a2b4c6d8e0f2a3b5c7d9e1f"
      }
    }
  }
}

上記のキーは実際の形式に合わせた架空の例です。24個の16進数文字、コロン、続けて64個の16進数文字で構成されています。両方の値をご自身のものに置き換えてください。

npxでサーバーを実行する場合は、例のようにenv経由で設定を渡します。.envファイルが読み込まれるのは、ソースをチェックアウトした場合(下記参照)、またはGHOST_MCP_ENV_FILEで指定したパスからのみです。

  1. クライアントを再起動して、「SEOタイトル付きで最新の投稿を一覧表示して」のように依頼します。

GHOST_API_URLは、サイトのサブディレクトリがある場合はそれを含めた正規のAdminドメインです。/ghost/api/adminは含めません。ローカルサイトでは、http://localhost:2368のようなアドレスを使用します。

設定ファイルの場所:macOSのClaude Desktopでは~/Library/Application Support/Claude/claude_desktop_config.jsonを使用します。Cursorでは~/.cursor/mcp.json、またはプロジェクト内の.cursor/mcp.jsonを使用します。

Claude Code:

claude mcp add ghost --scope user \
  -e GHOST_API_URL=https://your-blog.com \
  -e GHOST_ADMIN_API_KEY=64f1a2b3c4d5e6f7a8b9c0d1:3e5f7a9b1c2d4e6f8a0b2c4d6e8f0a1b3c5d7e9f1a2b4c6d8e0f2a3b5c7d9e1f \
  -- npx -y @proars/ghost-mcp-server

--scope userを指定すると、すべてのフォルダーでサーバーを利用できます。指定しない場合、サーバーはコマンドを実行したフォルダーにのみ登録されます。Claude Codeがサーバーを起動・停止するため、ターミナルを開いたままにする必要はありません。

claude mcp get ghostを実行して接続を確認します。Connectedと表示されるはずです。または、claudeセッション内で/mcpと入力してください。サーバーを削除するには、claude mcp remove ghost -s userを実行します。

その他のstdio MCPクライアントでも、同じコマンドnpx -y @proars/ghost-mcp-serverを2つの環境変数とともに実行できます。

更新: npxはキャッシュを使用するため、起動のたびにレジストリで@latestが確認されるとは限りません。コマンドの実行時に必ずレジストリの最新状態を確認するには、npx --prefer-online -y @proars/ghost-mcp-server@latestを使用します。JSON形式のクライアント設定では、argsを次のように設定します。

["--prefer-online", "-y", "@proars/ghost-mcp-server@latest"]

特定のバージョンを使い続けるには、たとえば@proars/[email protected]のようにバージョンを固定してください。各リリースの変更内容は変更履歴をご覧ください。

このリポジトリをクローンしたディレクトリ内からnpxを実行しないでください。npmが同じ名前のローカルのpackage.jsonを見つけ、ghost-mcp-server: command not foundエラーになります。別の任意のフォルダーから実行してください。

ソースからインストール

コードを変更する場合や、未公開バージョンを実行する場合に使用します。

git clone https://github.com/proars/ghost-mcp-server.git
cd ghost-mcp-server
npm install
npm run build
cp .env.example .env

.env の GHOST_API_URL と GHOST_ADMIN_API_KEY を設定し、クライアントからビルドを指定します。--silent はそのままにしてください。そうしないと、npm の起動バナーが MCP プロトコルストリームの stdout に出力されます。

{
  "mcpServers": {
    "ghost": {
      "command": "npm",
      "args": ["--silent", "--prefix", "/ABSOLUTE/PATH/ghost-mcp-server", "start"]
    }
  }
}

プロジェクトルートの .env ファイルは、クライアントがどのディレクトリからサーバーを起動しても読み込まれます。すでに設定されている変数が優先され、必須の変数が両方とも設定されている場合、ファイルは読み込まれません。GHOST_MCP_ENV_FILE で別の env ファイルを指定でき、GHOST_MCP_SKIP_DOTENV=1 でファイルの読み込みを無効にできます。

サーバーでできること

リソースツール
投稿get_posts, get_post, get_post_by_slug, create_post, update_post, delete_post, copy_post
ページget_pages, get_page, get_page_by_slug, create_page, update_page, delete_page, copy_page
タグget_tags, get_tag, get_tag_by_slug, create_tag, update_tag, delete_tag
ティアget_tiers, get_tier, create_tier, update_tier
ニュースレターget_newsletters, get_newsletter, create_newsletter, update_newsletter
オファーget_offers, get_offer, create_offer, update_offer
メンバーget_members, get_member, create_member, update_member, delete_member
ラベルget_labels, create_label, update_label, delete_label
スタッフget_users, get_user, update_user, delete_user, get_roles, invite_user
画像とテーマupload_image, upload_theme, activate_theme
Webhookcreate_webhook, update_webhook, delete_webhook
サイトget_site, get_settings
ショートカットupdate_post_seo, update_page_seo, update_post_tags
検出と汎用呼び出しghost_list_endpoints, ghost_api_request

Ghost にはティア、ニュースレター、オファーの削除エンドポイントがないため、これらのリソースには delete_* ツールがありません。

警告:このサーバーは、破壊的な操作を含む、サポート対象のすべての機能を公開します。 delete_post、delete_page、delete_tag、delete_member、delete_user、activate_theme、upload_theme、ghost_api_request は、コンテンツ、購読者、サイト設定を完全に削除または上書きする可能性があります。削除したレコードは通常復元できません。このサーバー専用のインテグレーションキーを作成し、一括操作の前に Ghost Admin からコンテンツのバックアップをエクスポートして、クライアントで update_*、delete_*、汎用呼び出しすべてに手動承認を有効にしてください。

ツールの呼び出し方法
  • 作成と更新: レコードのフィールドを data に入れ、レコードの id を別の引数として渡します。投稿とページの更新では、最新の読み取りで取得した data.updated_at が必要です。SEO ショートカット(update_post_seo、update_page_seo)とタグのショートカットでは、updated_at を直接指定します。
  • 一覧: limit、page、filter、order、include、fields を使用します。投稿とページは、デフォルトで簡潔なフィールドとタグを含めて返されます。単一レコードの読み取りでは、レコード全体が返されます。
  • SEO: update_post_seo と update_page_seo は、meta_title、meta_description、og_title、og_description を1回の呼び出しで設定します。id、現在の updated_at、およびこれらのフィールドのうち少なくとも1つを渡します。省略したフィールドは変更されません。
  • タグ: タグを設定すると、既存のセット全体が置き換えられます。まだ存在しないタグは作成され、空の配列を指定するとすべてのタグが削除されます。
  • 公開: data.status="published" を指定するか、未来の data.published_at と "scheduled" を指定して update_post を呼び出します。メールで投稿を送信するには、newsletter(スラッグ)と、必要に応じて email_segment を追加します。
  • 画像: upload_image では、file_path、省略可能な purpose(image、profile_image、icon のいずれか)、および ref を指定します。
専用ツールのないルートにはどうアクセスすればよいですか?

ghost_list_endpointsを使って、group、method、accessまたはsearchで検索します。without_dedicated_tool=trueを設定すると、残りの198個のルートを一覧表示できます。各項目には、アクセス要件、機能フラグ、アップロードフィールドが表示されます。

ghost_api_requestを使って任意のルートを呼び出します。pathは/ghost/api/adminからの相対パスで、実際のIDまたはスラッグを含み、クエリ文字列は含みません。

ghost_api_request method=GET  path=/labels/slug/vip/
ghost_api_request method=POST path=/members/upload/ files={membersfile: "/Users/me/members.csv"}
ghost_api_request method=GET  path=/posts/export/   save_to="/Users/me/posts.csv"

Ghostが想定する構造で、JSONペイロードをbodyに送信します。クエリパラメーターはqueryに指定します。マルチパートファイルはfiles={formField: "/absolute/path"}で送信し、必要に応じてテキストのfieldsを指定します。

ダウンロードの場合、save_toには、書き込み可能な既存のフォルダー内にある新しいファイルを指定する必要があります。末尾の区切り文字は拒否され、既存のファイルが上書きされることはありません。POST、PUT、DELETEがファイルを返す場合、変更リクエストを繰り返すと効果も繰り返される可能性があるため、最初の呼び出しでsave_toを設定してください。

必要なGhostの権限は何ですか?

クラスルート要件
I / PUBLIC125インテグレーションキーの許可リスト、またはパブリックアクセスです。ハンドラーの権限も適用されます。
U116必要なロールを持つスタッフユーザーのアクセストークン、またはユーザーセッションです。
SESSION3ユーザークッキーセッションです。インテグレーションキーとスタッフのトークンはブロックされます。
FLOW9独自の認証を持つログイン、リカバリー、セットアップのフローです。

スタッフのトークンを使うには、ユーザーのGhost AdminプロフィールにあるトークンをGHOST_ADMIN_API_KEYに設定します。権限はユーザーのロールに従います。スタッフのトークンでは、DELETE /db/、PUT /users/owner/、POST /authentication/reset/を呼び出せません。

このサーバーは、クッキーセッション、ログイン、2FAを実装していません。これらのルートは、検出専用としてカタログに含まれています。

リクエストではAccept-Version: v5.0を送信します。カタログはGhostのmainブランチのスナップショットなので、新しいルートや実験的なルートが含まれており、インストール環境では404が返される場合があります。パブリックContent APIは含まれていません。

AIクライアントにサイトへのアクセスを許可しても安全ですか?

ブログへの書き込み権限を持つアカウントと同様に扱い、人間が必ず確認するようにしてください。

  • キーはクライアントの環境、または.envに保管し、決してコミットしないでください。破壊的なツール(すべてのupdate_*およびdelete_*ツール、activate_theme、upload_theme、ghost_api_request)では手動承認を有効にしてください。
  • 変更リクエストの送信後に失敗した場合は、Ghostで確認してから再試行してください。処理が完了している可能性があります。応答が途中で切れている場合は、読み取りツールを使って結果を確認してください。
  • リダイレクトは常に追跡されません。正規のAdmin URLを設定し、変更リクエストでリダイレクトを受け取った場合は、別のリクエストを送信する前に結果を確認してください。
  • ローカルファイルのパスは絶対パスである必要があります。隠しパスコンポーネントは、指定されたとおりのパスでも、シンボリックリンク解決後でも拒否されます。アップロードできるのは通常ファイルのみで、ダウンロード先のファイルはリクエスト前に所有者のみの権限で確保されます。
  • ファイルチェックはサンドボックスではありません。名前が表示される機密ファイルは保護されず、呼び出し中にローカルプロセスがディレクトリを書き換えることも防げません。サイトのコンテンツは信頼できないものとして扱い、アップロードリクエストを確認してください。
  • アップロードとダウンロードはメモリにバッファーされます。HTTPリクエストは120秒でタイムアウトし、100,000文字を超えるツールの応答は途中で切り詰められます。

開発

npm run typecheck   # tsc --noEmit
npm test            # regression tests with synthetic credentials and a local fake Ghost server
npm run catalog     # regenerate src/catalog.ts from GHOST_API.list
npm run build       # compile to dist/
npm start           # run the build over stdio (requires configuration)

ルート一覧はGHOST_API.listにあります。scripts/generate-catalog.mjsによってsrc/catalog.tsが生成されるため、手動で編集しないでください。ルートを変更するには、一覧を編集してnpm run catalogを実行し、その後テストを実行してください。標準出力はMCPメッセージ用に確保されているため、ログは標準エラー出力に書き込まれます。

GitHub Actionsは、mainへのすべてのプッシュとすべてのプルリクエストで、Node 20および22を使って型チェック、ビルド、テストを実行します。

テストでは、カタログとツールの整合性、リクエストの構築、ファイルの安全性、リダイレクト、再試行に関するガイダンス、設定の分離を確認します。実際に稼働しているGhostインスタンスとの互換性を証明するものではありません。

よくある質問

セルフホストの Ghost と Ghost(Pro) で動作しますか? はい。Admin API にアクセスでき、キーを持っていれば動作します。GHOST_API_URL に、Ghost Admin のカスタムインテグレーションページに表示されている API URL を設定してください。これは Ghost(Pro) やカスタムドメインを使用しているサイトで特に重要です。サーバーはリダイレクトを追跡しないため、別のアドレスにリダイレクトされるアドレスでは失敗します。

どのクライアントに対応していますか? Claude Desktop、Claude Code、Cursor など、stdio サーバーを起動できる MCP クライアントに対応しています。

Admin キーがなくても公開コンテンツを読み取れますか? いいえ。Admin API のみを使用します。公開 Content API には対応していません。

コンテンツを削除できますか? はい。delete_post、delete_page などのツールによる削除は取り消せません。クライアントで手動承認を必須にしてください。

ライセンス

MIT。

コメント

MCP は初めてですか?

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

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