ChatGPTからZenn記事を直接投稿する【zenn-mcp-server】

不明点があれば下記もご参照ください。
はじめに
この記事では、**ChatGPT(MCP対応クライアント)**からワンフレーズの指示で Zenn 記事の新規作成・公開までを自動化する方法を紹介します。実現には公開リポジトリ zenn-mcp-server を使い、GitHub Actions の repository_dispatch を経由して zenn-cli で記事ファイルを生成・コミット・プッシュします。セットアップ手順はこのリポジトリの README にまとまっており、本記事ではそれを日本語で噛み砕きつつ、実運用のコツを添えています。(GitHub)
補足:MCP(Model Context Protocol)は、AIクライアントと外部ツール/ワークフローを標準化された方法で接続するオープンプロトコルです。ChatGPT も MCP のリモートサーバー接続に対応しています。(Model Context Protocol)
できること
-
ChatGPT から「Zennに○○というタイトルで公開して」と指示するだけで、
- GitHub Actions を
repository_dispatchで起動 -
zenn-cliによる記事ファイル生成 - タグ・本文の差し込み
- Git push → Zenn 連携による公開
まで自動化できます。(GitHub)
- GitHub Actions を
仕組み(アーキテクチャ概要)
- ChatGPT(MCPクライアント)から
zenn-mcp-server(MCPサーバー)を呼び出す - サーバーは GitHub API の
repository_dispatchを叩き、指定リポジトリでワークフローを起動 - ワークフローが
npx zenn-cli new:articleを実行し、Front Matter にタイトルや topics を設定、本文を追記 - コミット&プッシュにより Zenn 側へ反映(Zenn × GitHub 連携の既定挙動)
セットアップ画面・接続 URL 例(zenn-dev.fastmcp.app/...)や手順は README の「Setup」に掲載されています。(GitHub)
repository_dispatchは外部から GitHub Actions を起動するためのイベントです。リモートリポジトリにディスパッチする場合は PAT(Personal Access Token) が必要です。(GitHub)
前提
- Zenn と GitHub を連携し、Zenn 投稿用リポジトリ(例:
zenn-docs)を用意しておく -
zenn-cliがリポジトリで動く(Actions がnpx zenn-cliを実行)(Zenn) - GitHub PAT を作成しておく(スコープ:
repoもしくは公開リポジトリならpublic_repo)(GitHub)
セットアップ手順
1) GitHub Actions ワークフローを追加
リポジトリに .github/workflows/new-article.yml を作成します。repository_dispatch の types を new_article にしておくと、同名のイベントタイプだけが起動します。(GitHub Docs)
articles/配下に Markdown が生成されるのは Zenn の基本仕様です。(Zenn)
2) Personal Access Token(PAT)を用意
repo(または公開リポジトリなら public_repo)スコープの PAT を作成します。他リポジトリをディスパッチする場合は GITHUB_TOKEN では不可で、PAT が必要です。作成したトークンは Secrets に保存しましょう。(GitHub)

3) MCP コネクタ(ChatGPT 側)の作成
zenn-mcp-server の README には、接続時に使える ホスト済みの MCP エンドポイント例(zenn-dev.fastmcp.app/mcp?...)と、接続 UI スクリーンショットが掲載されています。ChatGPT の MCP 接続 UI から、この URL を使ってコネクションを追加します。(GitHub)
https://zenn-dev.fastmcp.app/mcp?repo_name=owner/repo&token=YOUR_TOKEN

使い方(ChatGPT からの実行)
MCP コネクタを有効にした状態で、ChatGPT に次のように指示します(ツール名や引数名はコネクタ側の定義に従ってください)。
「Zenn に『○○』というタイトルで、タグは
["zenn","mcp"]、本文は以下の Markdown を本文にして公開して」
(本文…コードブロックや画像リンクを含む複数行 Markdown)
内部では repository_dispatch が発火し、先ほどのワークフローが走って zenn-cli で記事が生成・コミットされます。(Postman)
動作確認用の手動ディスパッチ(任意)
MCP を介さず、まずは手動で API を叩いてワークフローが動くか確認したい場合は、以下のように repository_dispatch を送ります。(Postman)
curl -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR_PAT>" \
https://api.github.com/repos/<owner>/<repo>/dispatches \
-d '{
"event_type": "new_article",
"client_payload": {
"title": "ChatGPTからZenn記事を直接投稿する【zenn-mcp-server】",
"topics_json": "[\"zenn\",\"mcp\"]",
"body": "この記事では、MCPとGitHub Actionsを使って…(以下略)"
}
}'
トラブルシュート
-
403 / Write access to repository not granted
→ PAT の権限不足、または対象リポジトリへの権限がありません。同一リポジトリならGITHUB_TOKENでもよいですが、別リポジトリへディスパッチする場合は PAT(repo/public_repo) が必要です。(GitHub) -
記事にタグが反映されない
→sed置換が Front Matter のテンプレと合っていない可能性。articles/<slug>.mdの先頭でtopics: []が生成されることを確認し、topics_json(["zenn","mcp"]のような JSON 配列文字列)をそのまま差し込めるように置換パターンを調整します。zenn-cliのテンプレはバージョンで差異があるため、生成直後のファイルを確認してから正規表現を決めるのがおすすめです。(npmjs.com) -
ワークフローが起動しない
→on.repository_dispatch.typesの値(例:new_article)と API 側のevent_typeが一致しているか確認。(GitHub Docs)
参考リンク
- GitHub30/zenn-mcp-server(セットアップ/接続 URL・図解あり)(GitHub)
-
Zenn CLI:インストールと使い方、記事の配置ルール(
articles/)(Zenn) - repository_dispatch の解説(Marketplace Action / API ヘルプ)(GitHub)
- MCP の概要(公式サイト/クライアント対応)(Model Context Protocol)
まとめ
zenn-mcp-server を使えば、ChatGPT に「タイトル・本文・タグ」を伝えるだけで、Zenn への記事作成〜公開が自動化できます。MCP で ChatGPT と GitHub Actions を橋渡しし、zenn-cli の既存フローに安全に乗せる構成のため、既存の Zenn/GitHub 運用に自然に組み込めるのが魅力です。(GitHub)
Discussion
参考になります!