mcpField
B
baoyu-post-to-wechat

baoyu-post-to-wechat

github.com/jimliuマーケティング・グロース27.0k34.5k 回インストール7 週間前に更新
リポジトリ

baoyu-post-to-wechat について

baoyu-post-to-wechatは、公式アカウント向けの投稿スキルです。APIまたはブラウザーで記事を投稿し、複数画像の投稿、テーマ、メタデータ、複数アカウントを扱えます。

主な機能

  1. 01APIまたはブラウザーで記事を投稿
  2. 02最大9枚の画像を含む投稿
  3. 03MarkdownをWeChat向けに変換
  4. 04テーマ、色、メタデータの設定
  5. 05複数の公式アカウントを管理

活用シーン

  1. 01Markdownの記事をWeChatに投稿
  2. 02複数画像から画像付き投稿を作成
  3. 03ブラウザーセッションで記事を投稿
  4. 04許可済みIPからリモートAPIを利用

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jimliu/baoyu-skills --skill baoyu-post-to-wechat

インストール後、Claude Code で/baoyu-post-to-wechatを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
api-setup.md
article-posting.md
image-text-posting.md
multi-account.md
references/config/
first-time-setup.md
scripts/
bun.lock
cdp.ts
check-permissions.ts
copy-to-clipboard-mac.test.ts
copy-to-clipboard.ts
md-to-wechat.ts
package.json
paste-from-clipboard.ts
wechat-agent-browser.ts
wechat-api.ts
wechat-article-focus.test.ts
wechat-article.ts
wechat-browser.ts
wechat-extend-config.test.ts
wechat-extend-config.ts
wechat-http.test.ts
wechat-http.ts
wechat-image-loader.ts
wechat-image-processor.ts
wechat-remote-publish.test.ts
wechat-remote-publish.ts
wechat-socks-http.test.ts
wechat-socks-http.ts

詳細

WeChat 公式アカウントに投稿する

ユーザー入力ツール

このスキルがユーザーに入力を求める場合は、次の優先順位に従ってツールを選択します。

  1. 組み込みのユーザー入力ツールを優先する — 現在のエージェントランタイムが公開している AskUserQuestion、request_user_input、clarify、ask_user など、または同等のツールを使用します。
  2. フォールバック:そのようなツールがない場合は、番号付きのプレーンテキストメッセージを出力し、各質問について選んだ番号または回答をユーザーに返信してもらいます。
  3. まとめて質問する:複数の質問を1回の呼び出しで処理できるツールであれば、該当する質問をまとめて一度に尋ねます。1回に1つの質問しかできない場合は、優先順位に従って1つずつ尋ねます。

以下の AskUserQuestion の具体例は参考です。他のランタイムでは、環境に応じたツールに置き換えてください。

言語

ユーザーの言語で応答します。中国語で書かれている場合は中国語で、英語の場合は英語で返信します。技術的なトークン(パス、フラグ、フィールド名)は英語のままにします。

スクリプトディレクトリ

{baseDir} = この SKILL.md があるディレクトリです。${BUN_X} は、bun を優先し、なければ npx -y bun を使用します。それもなければ brew install oven-sh/bun/bun を提案します。

スクリプト目的
scripts/wechat-browser.ts画像・テキスト投稿(图文)
scripts/wechat-article.tsブラウザー経由で記事を投稿(文章)
scripts/wechat-api.tsAPI 経由で記事を投稿(文章)
scripts/md-to-wechat.tsMarkdown → 画像プレースホルダー付きの WeChat 対応 HTML
scripts/check-permissions.ts環境と権限を確認

設定(EXTEND.md)

以下のパスを順に確認し、最初に見つかったものを使用します。

パス範囲
.baoyu-skills/baoyu-post-to-wechat/EXTEND.mdプロジェクト
${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-post-to-wechat/EXTEND.mdXDG
$HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.mdユーザーホーム

見つかった場合 → 読み込み、解析して適用します。見つからない場合 → ほかの処理を行う前に、初回セットアップ(references/config/first-time-setup.md)を実行します。

必須キー(大文字と小文字は区別せず、1/0 または true/false を受け付けます):

キーデフォルト対応先
default_author空CLI/frontmatter で指定されていない場合の author のフォールバック
need_open_comment1draft/add の articles[].need_open_comment
only_fans_can_comment0draft/add の articles[].only_fans_can_comment

推奨する EXTEND.md:

default_theme: default
default_color: blue
default_publish_method: browser
default_author: 宝玉
need_open_comment: 1
only_fans_can_comment: 0
chrome_profile_path: /path/to/chrome/profile

# Remote API publishing (optional) — only set if WeChat's IP allowlist
# excludes your local machine. See "Remote API Method" below.
# remote_publish_host: server.example.com
# remote_publish_user: deploy
# remote_publish_port: 22
# remote_publish_identity_file: ~/.ssh/id_ed25519
# remote_publish_known_hosts_file: ~/.ssh/known_hosts
# remote_publish_strict_host_key_checking: accept-new
# remote_publish_connect_timeout: 10
# remote_publish_proxy_jump: bastion.example.com

ssh / scp の生のオプションには意図的に対応していません。上記の型指定されたキーのみが適用されます。認証は SSH キーのみで、パスワードは使用できません。

テーマの選択肢:default、grace、simple、modern。カラーのプリセット:blue、green、vermilion、yellow、purple、sky、rose、olive、black、gray、pink、red、orange(または hex)。

値の優先順位:CLI 引数 → frontmatter → EXTEND.md(アカウントレベル → グローバル)→ スキルのデフォルト。

複数アカウントのサポート

EXTEND.md では、複数の公式アカウントを管理するための accounts: ブロックをサポートしています。エントリが2つ以上ある場合、ワークフローにアカウント選択を求めるステップ 0.5 が挿入されます(または、default: true や --account <alias> に基づいて自動選択されます)。

互換性ルール、アカウントごとのキー、認証情報の解決、アカウントごとの Chrome プロファイル、CLI の使用方法などの詳細は、references/multi-account.md を参照してください。

事前チェック(任意)

初回使用前に、環境チェックを提案します(ユーザーはスキップできます)。

${BUN_X} {baseDir}/scripts/check-permissions.ts

確認項目:Chrome、プロファイルの分離、Bun、アクセシビリティ、クリップボード、貼り付けのキーストローク、API 認証情報、Chrome の競合。

チェックに失敗した項目対処方法
ChromeChrome をインストールするか、WECHAT_BROWSER_CHROME_PATH を設定します
プロファイルディレクトリbaoyu-skills/chrome-profile に共有プロファイルがあります
Bun ランタイムbrew install oven-sh/bun/bun または npm install -g bun
アクセシビリティ(macOS)システム設定 → プライバシーとセキュリティ → アクセシビリティ → ターミナルアプリを有効にします
クリップボードへのコピーSwift/AppKit が利用できることを確認します(macOS:xcode-select --install)
貼り付けのキーストローク(Linux)xdotool(X11)または ydotool(Wayland)をインストールします
API 認証情報Step 2 のガイド付きセットアップに従うか、.baoyu-skills/.env に設定します

画像付き投稿(画像とテキスト)

複数の画像を含む短い投稿(最大9枚):

${BUN_X} {baseDir}/scripts/wechat-browser.ts --markdown article.md --images ./images/
${BUN_X} {baseDir}/scripts/wechat-browser.ts --title "标题" --content "内容" --image img.png --submit

詳細:references/image-text-posting.md。

記事投稿ワークフロー(記事)

- [ ] Step 0: Load preferences (EXTEND.md)
- [ ] Step 0.5: Resolve account (multi-account only — see references/multi-account.md)
- [ ] Step 1: Determine input type
- [ ] Step 2: Select method and configure credentials
- [ ] Step 3: Resolve theme/color and validate metadata
- [ ] Step 4: Publish to WeChat
- [ ] Step 5: Report completion
ステップ 0:設定を読み込む

EXTEND.md を確認して読み込みます(上記の「設定」を参照)。見つからない場合は、ほかの質問をする前に初回セットアップを完了してください。以降のステップで使用する default_theme、default_color、default_author、need_open_comment、only_fans_can_comment を解決してキャッシュします。

ステップ 1:入力タイプを判定する
入力判定次のステップ
HTML ファイルパスが .html で終わり、ファイルが存在するステップ 3 に進む
Markdown ファイルパスが .md で終わり、ファイルが存在するステップ 2
プレーンテキストファイルパスではない、またはファイルが存在しないMarkdown に保存してから、ステップ 2

プレーンテキストの処理:

  1. スラッグを生成します(意味のある最初の2~4語をケバブケースにします。スラッグでは中国語を英語に翻訳します)。
  2. post-to-wechat/YYYY-MM-DD/<slug>.md に保存します(必要に応じてディレクトリを作成します)。
  3. Markdown ファイルとして処理を続けます。
ステップ 2:公開方法を選択して設定する

EXTEND.md または CLI で指定されていない場合は、方法を確認します。

方法速度必要なもの
api(推奨)高速API 認証情報(ローカル IP が許可リストに登録されていること)
browser低速Chrome + ログイン済みセッション
remote-api高速API 認証情報 + SSH で接続でき、IP が WeChat の許可リストに登録されているサーバー

API を選択して認証情報が不足している場合 → references/api-setup.md に従ってガイド付きセットアップを実行します(.baoyu-skills/.env に書き込みます)。

remote-api 方法:WeChat の「公众号设置 → IP 白名单」では、API アクセスが固定 IP 1~2件に制限されていることがよくあります。ローカルマシンの IP がそのリストにない一方で、クラウドサーバーの IP が登録されている場合は、remote-api を使用します。Markdown のレンダリング、画像処理、下書きの組み立て、HTML の書き換えはすべて引き続きローカルで行われ、api.weixin.qq.com への送信 HTTPS 呼び出し(token、uploadimg、add_material、draft/add)のみが、SSH SOCKS5 動的ポートフォワード(ssh -N -D)を経由します。これにより、WeChat にはリモートサーバーが送信元 IP として認識されます。リモートホストにはファイルを書き込みません。AppSecret がローカルプロセスの外に出ることもありません。必要なのはリモートホスト上の sshd と外部ネットワーク接続のみで、Python もエージェントプロセスも不要です。詳細は以下の「リモート API 方法」を参照してください。

ステップ 3:テーマと色を解決し、メタデータを検証する
  1. テーマ:CLI --theme → EXTEND.md default_theme → default(最初に一致したものを使用します。解決できた場合は確認しません)。
  2. 色:CLI --color → EXTEND.md default_color → 省略(テーマのデフォルトが適用されます)。
  3. メタデータを検証する(Markdown の場合はフロントマター、HTML の場合は meta タグ)。
フィールド不足している場合 →
タイトル確認するか、Enter キーを押してコンテンツから自動生成します
概要フロントマターの description → summary → 確認または自動生成
作者CLI --author → フロントマターの author → EXTEND.md default_author
参照元 URLCLI --source-url → フロントマターの sourceUrl/contentSourceUrl/content_source_url

自動生成:タイトル = 最初の H1/H2 または最初の文。概要 = 最初の段落を120文字に切り詰めたもの。

  1. カバー画像(API の article_type=news では必須):CLI --cover → フロントマター(coverImage / featureImage / cover / image)→ imgs/cover.png → 最初のインライン画像 → それでも見つからない場合は停止して画像を要求します。
Step 4: 公開

重要 — Markdown を事前に HTML に変換しないでください。 公開スクリプトが内部で変換を処理します。また、2 つの方法では画像のレンダリング方法が異なります。API ではアップロード用に <img> タグが生成され、ブラウザーでは貼り付けて置き換えるためのプレースホルダーが使われます。事前に変換した HTML を渡すと、どちらかの方法で問題が発生します。

Markdown の引用の既定動作:Markdown 入力の場合、通常の外部リンクは既定で末尾の引用に変換されます。ユーザーがインラインリンクを残すことを明示的に希望する場合に限り、--no-cite を使ってください。既存の HTML 入力はそのまま使用されます。

API 方式(.md または .html を受け付けます):

${BUN_X} {baseDir}/scripts/wechat-api.ts <file> --theme <theme> [--color <color>] [--title <title>] [--summary <summary>] [--author <author>] [--cover <cover_path>] [--source-url <url>] [--no-cite]

default の場合でも、必ず --theme を指定してください。--color は、ユーザーまたは EXTEND.md で明示的に設定されている場合に限り指定してください。

リモート API 方式(同じスクリプトに --remote を追加します):

${BUN_X} {baseDir}/scripts/wechat-api.ts <file> --theme <theme> --remote [--remote-host <host>] [--remote-user <user>] [--remote-port <port>] [--remote-identity-file <path>] [--remote-known-hosts-file <path>] [--remote-strict-host-key-checking yes|no|accept-new] [--remote-connect-timeout <s>] [--remote-proxy-jump <spec>]

--remote-* フラグを指定すると、自動的に --remote も有効になります。CLI の値は、EXTEND.md のアカウントレベル、次にグローバルの remote_publish_* キーより優先されます。default_publish_method: remote-api を設定すると、--remote を指定しなくてもリモートモードが有効になります。

draft/add のペイロード規則:

  • エンドポイント:POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN
  • article_type:news(既定値)または newspic
  • news の場合、thumb_media_id を含めてください(カバー画像は必須です)
  • CLI で指定できない場合でも、リクエストボディには必ず need_open_comment(既定値 1)と only_fans_can_comment(既定値 0)を含めてください
  • news の場合、任意で content_source_url を含められます(元記事の URL。「阅读原文」リンクとして表示され、最大 1KB)。CLI フラグ --source-url または frontmatter の sourceUrl/contentSourceUrl/content_source_url で指定してください

ブラウザー方式(--markdown または --html を受け付けます):

${BUN_X} {baseDir}/scripts/wechat-article.ts --markdown <markdown_file> --theme <theme> [--color <color>] [--no-cite]
${BUN_X} {baseDir}/scripts/wechat-article.ts --html <html_file>
Step 5: 完了レポート
WeChat Publishing Complete!

Input: [type] - [path]
Method: [API | Browser]
Theme: [theme] [color if set]

Article:
• Title: [title]
• Summary: [summary]
• Images: [N] inline
• Comments: [open/closed], [fans-only/all]    ← API method only

Result:
✓ Draft saved to WeChat Official Account
• media_id: [media_id]                         ← API method only

Next Steps (API):
→ Manage drafts: https://mp.weixin.qq.com (登录后进入「内容管理」→「草稿箱」)

Files created:
[• post-to-wechat/YYYY-MM-DD/slug.md (if plain text input)]
[• slug.html (converted)]

機能の比較

機能画像とテキスト記事(API)記事(リモート API)記事(ブラウザー)
プレーンテキスト入力✗✓✓✓
HTML 入力✗✓✓✓
Markdown 入力タイトル/本文✓✓✓
複数の画像✓(最大 9 枚)✓(本文内)✓(本文内)✓(本文内)
テーマ✗✓✓✓
メタデータの自動生成✗✓✓✓
既定のカバー画像の代替(imgs/cover.png)✗✓✓✗
コメントの制御✗✓✓✗
Chrome が必要✓✗✗✓
API 認証情報が必要✗✓✓✗
SSH 接続可能で、許可リストに登録された IP を持つサーバーが必要✗✗✓✗
速度中高速高速低速

トラブルシューティング

問題対処法
API 認証情報がないStep 2 のセットアップガイドに従ってください
アクセストークンエラー認証情報が有効で、期限切れでないことを確認してください
ログインしていない(ブラウザー)初回実行時にブラウザーが開きます。QR コードをスキャンしてログインしてください。QR 画像を Telegram で受け取るには、TELEGRAM_BOT_TOKEN と TELEGRAM_CHAT_ID を設定してください
Chrome が見つからないWECHAT_BROWSER_CHROME_PATH を設定してください
タイトル/要約がない自動生成を使うか、手動で入力してください
カバー画像がないfrontmatter にカバー画像を追加するか、記事ディレクトリに imgs/cover.png を配置してください
コメントの既定値が違うEXTEND.md の need_open_comment/only_fans_can_comment を確認してください
貼り付けに失敗するシステムのクリップボード権限を確認してください
Remote publish host is required--remote-host または EXTEND.md の remote_publish_host を設定してください
SOCKS proxy on 127.0.0.1:… not readySSH トンネルを開始できませんでした。キー、ホスト、StrictHostKeyChecking を確認するか、--remote-connect-timeout を使用してください
リモート公開中に ssh exited early が発生するサーバーに対してユーザーが非対話で ssh 接続できることを確認してください。接続が遅い場合は --remote-connect-timeout を増やしてください
リモート API 呼び出しが errcode 40164(無効な IP)を返すリモートサーバーの外向き IP が WeChat の許可リストに登録されていません。公众号设置 → IP 白名单 で追加してください

参考資料

ファイル内容
references/image-text-posting.md画像付きテキストのパラメーター、自動圧縮
references/article-posting.md記事のテーマ、画像の処理
references/multi-account.md複数アカウントの互換性、認証情報、Chrome プロファイル、CLI
references/api-setup.md認証情報のセットアップガイド
references/config/first-time-setup.md初回のEXTEND.mdセットアップ

拡張機能のサポート

EXTEND.mdによるカスタム設定に対応しています。パスとサポート対象のオプションについては「環境設定」を参照してください。

コメント