😊

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

に公開1

https://github.com/GitHub30/zenn-mcp-server

不明点があれば下記もご参照ください。

https://qiita.com/7mpy/items/f3e8503e89832afbbf36

https://note.com/mandalay/n/n855bb8020a90

はじめに

この記事では、**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)

仕組み(アーキテクチャ概要)

  1. ChatGPT(MCPクライアント)から zenn-mcp-server(MCPサーバー)を呼び出す
  2. サーバーは GitHub API の repository_dispatch を叩き、指定リポジトリでワークフローを起動
  3. ワークフローが npx zenn-cli new:article を実行し、Front Matter にタイトルや topics を設定、本文を追記
  4. コミット&プッシュにより 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_dispatchtypesnew_article にしておくと、同名のイベントタイプだけが起動します。(GitHub Docs)

https://github.com/GitHub30/zenn-mcp-server/blob/main/.github/workflows/new-article.yml

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