mcpField
S
supsub-mp

supsub-mp

github.com/supsub-ai生産性559 回インストール13 週間前に更新
リポジトリ

supsub-mp について

supsub-mp は、WeChat公式アカウントの検索と実行中の検索タスクのキャンセルに使うCLIスキルです。非同期検索の候補をまとめ、名前や説明、購読状況を確認してから購読できます。

主な機能

  1. 01キーワードでアカウントを検索
  2. 02非同期結果をポーリングして集約
  3. 03実行中の検索タスクをキャンセル
  4. 04結果をJSON形式で出力
  5. 05候補の購読状況を確認

活用シーン

  1. 01類似名のアカウントを比較
  2. 02確認したアカウントを購読に追加
  3. 03タイムアウト後に残ったタスクをキャンセル

インストール

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

$npx skills add https://github.com/supsub-ai/supsub-cli --skill supsub-mp

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

詳細

supsub-mp スキル

WeChat 公式アカウントを検索します(非同期タスク、CLI はデフォルトで最大 30 秒間同期的に待機します)。実行中の検索タスクをキャンセルすることもできます。mpId を取得したら、次の手順は supsub sub add --mp-id <mpId> です(supsub-sub スキルを参照)。mp search が返す mpId は WeChat ネイティブの base64 文字列であり、--source-id に渡してはいけません(これは supsub 内部の正の整数 ID で、ID 空間が異なります)。

前提条件

  • インストール:curl -fsSL https://raw.githubusercontent.com/SupSub-AI/supsub-cli/master/scripts/install.sh | bash(ネイティブインストール。~/.local にインストールされ、バックグラウンドでの自動更新をサポートします)。またはパッケージマネージャーで npm i -g @supsub/cli / pnpm add -g @supsub/cli
  • ログイン済みであること:supsub auth status で Authenticated と表示されます(初回使用時は、先に supsub auth login を実行してください)
  • 未認証(exit 2 / UNAUTHORIZED)の場合、「ログインしていません」と伝えるだけで終わらせないでください:ユーザーのブラウザーで認証画面を開くため、supsub auth login を直接実行してください(このコマンドはブラウザーを自動で開き、認証が完了するまで待機します。10 分など、十分に長いタイムアウトを設定してください。ユーザーはブラウザーで確認ボタンをクリックするだけで、ターミナルへの入力は不要です)。認証に成功したら、元のコマンドを再試行してください。ブラウザーがない環境やヘッドレス環境では、代わりに SUPSUB_NO_BROWSER=1 supsub auth login をユーザーに案内してください。

コマンド

公众号 を検索(非同期、自動ポーリング)
supsub mp search <name>

<name> は公众号名のキーワードです(引用符で囲むことをおすすめします)。コマンドの内部処理は次のとおりです。

  1. POST /api/mps/search-tasks で非同期タスクを作成し、searchId を取得します。
  2. CLI は 2 秒ごとにタスクの状態をポーリングし、最大 30 秒間待機します。
  3. バックエンドは複数回のポーリングにわたって候補の公众号を1 件ずつ返し、CLI は自動で蓄積して重複を除外します。
  4. finished=true を受け取ると、すべての候補をまとめて結果として出力します。
  5. 30 秒以内に完了しなかった場合は終了し、searchId を返します(あわせて案内メッセージを表示します)。

各候補のフィールド:mpId、name、img、description、isSubscribed。

# 同步搜索(实测约 15-30 秒,工具超时请设到 60s 以上)
supsub mp search "机器之心"

# JSON
supsub mp search "机器之心" -o json

JSON の形式(成功時):{"success":true,"data":[{"mpId":"...","name":"...","img":"...","description":"...","isSubscribed":false}, ...]}

返されるのは複数の候補(実測では「机器之心」が 10 件、「阮一峰」が 5 件)であり、完全一致する 1 件ではありません。候補を選ぶ際の制約については、下記の「エージェントの使用上の注意」を参照してください。

見つからない場合:MP_NOT_FOUND エラーで終了します(終了コードは 0 以外)。

タイムアウト:MP_SEARCH_TIMEOUT エラーで終了します。エラー本文には data.searchId が含まれ、案内メッセージは 30 秒内未完成,可重试 supsub mp search 或取消任务: supsub mp search-cancel <searchId> のような形式です。

⚠️ タイムアウト時の処理:CLI には、検索を再開するためのクエリコマンドはありません。タイムアウトした場合、ユーザーが選べる方法は 2 つだけです。supsub mp search <name> を再実行するか、supsub mp search-cancel <searchId> を呼び出して残ったタスクをキャンセルしてから、再試行してください。


実行中の検索タスクをキャンセル
supsub mp search-cancel <searchId>

<searchId> は、直前の supsub mp search がタイムアウト分岐で返したエラーデータから取得します(JSON モードでは、{"success":false,"error":{"code":"MP_SEARCH_TIMEOUT","data":{"searchId":"..."}}} の形式を dieWith と output() が処理します。テーブルモードでは、エラー文字列に searchId が直接含まれます)。

supsub mp search-cancel sid_abc123
supsub mp search-cancel sid_abc123 -o json

JSON の形式:{"success":true,"data":{"message":"已取消"}}

タスクが存在しないか、すでにキャンセルされている場合は、TASK_NOT_FOUND エラーで終了します(HTTP 404 → 終了コードは 0 以外)。


エージェントの使用上の注意

  • mp search は同期的にラップされた非同期タスクです。呼び出し側が通常 searchId を気にする必要はなく、結果の配列をそのまま取得できます。searchId の処理が必要なのは、30 秒のタイムアウト分岐の場合だけです。
  • 結果の解析には常に -o json を使用してください。成功時、data は Mp[] です。失敗時は標準の ErrorEnvelope(code、message、任意の data.searchId)が返されます。
  • 検索から登録までの流れ(最も一般的なケース):
    # 1. 列出候选,连 name 一起看(实测「机器之心」返回 10 条)
    supsub mp search "机器之心" -o json | jq -r '.data[] | "\(.mpId)\t\(.isSubscribed)\t\(.name)"'
    # 2. 与用户确认选中哪一个后,用 --mp-id 订阅(走 POST /api/mps;type 默认 MP,可省)
    #    可顺带 --group <gid> 一步入组
    supsub sub add --mp-id "MzA3MzI4MjgzMw==" --group 1166
    
  • ⚠️ jq '.data[0]' で最初の候補を直接選ばないでください。 実測では、mp search "机器之心" の候補 10 件には「机器之心PRO会员」「机器之心SOTA模型」のような類似名のアカウントだけでなく、「新智元」「量子位」など、まったく関係のないアカウントも含まれていました。候補(name、description、isSubscribed)をユーザーに提示して選んでもらい、確認後に登録してください。同名または類似名の候補が複数ある場合は、特にユーザーの代わりに決めてはいけません。
  • ⚠️ mpId を --source-id として使わないでください:mp search が返す mpId は WeChat ネイティブの base64 文字列(例:MzkyNTYzODk0NQ==)です。一方、supsub sub add --source-id が想定するのは supsub 内部の正の整数である sourceId(supsub search / sub list から取得)であり、両者は異なる ID 空間に属します。base64 をデコードすると数字になる場合でも、バックエンドは「情報ソースが存在しません」として拒否します。必ず --mp-id を使用してください。
  • 候補のフィールドは mpId / name / img / description / isSubscribed です。isSubscribed フィールドの存在は実測で確認済み(2026-07 に開発環境で確認)です。この値に基づいて登録済みのアカウントをスキップできるため、supsub search --type MP の利用や sub list との照合は不要です。バックエンドのバージョンによってこのフィールドが実際に欠落している場合は、sub list との照合に切り替えてください。
  • mp search 内部のポーリング設定は固定です。間隔は 2 秒、合計 30 秒(POLL_INTERVAL_MS / POLL_MAX_MS)で、CLI から調整するフラグは公開されていません。実測では、実際の検索には約 15~30 秒かかります(「机器之心」は 27.4 秒、「阮一峰」は 14.7 秒)。したがって、このコマンドを呼び出す際はツールのタイムアウトを 60 秒以上に設定し、デフォルト値を使わないでください。また、開始前に「この処理には約 30 秒かかります」とユーザーに伝え、応答が止まったように思わせないようにしてください。
  • バックエンドは候補の公众号を「ストリーミング」方式で返します。CLI がすでに mpId に基づいて重複を除外しているため、呼び出し側で再度重複を除外する必要はありません。
  • タイムアウト分岐後に実行できる正当な処理は、supsub mp search-cancel <searchId> で残ったタスクをキャンセルするか、supsub mp search <name> を再実行することだけです。
  • 終了コード:0 は正常終了、タイムアウト/見つからない/タスクが存在しないなどの業務エラー(バックエンドの 4xx)は 1、2 は UNAUTHORIZED、10 はネットワークエラー、11 はサーバーエラー(5xx)です。

コメント