自分のPCで常駐させているAIエージェント「Hermes Agent」に、SNSの投稿を任せる準備をしました。OSSのSNS予約投稿ツール「Postiz」をローカルのDockerで動かしてHermesから接続し、Mastodonへの下書き作成・確認・削除までを、承認つきで動かせるところまで来ました。実際の公開はまだしていません。
今日やったこと
- Hermesで使ってみたいOSSを2つ比較(SNS予約投稿のPostizと、エージェントの記憶を扱うHoncho)。目的に合うPostizから試すことにした
- Postizはクラウド版もあるが、ローカルのDockerで動かすことにした(7コンテナ・メモリ約2.8GB)
- 公式のdocker-composeを調整(自分のPCからだけ見えるように待ち受けを限定、イメージのバージョンを固定、デバッグ用のコンテナを外す)
- Mastodon(mastodon.social)を接続
- HermesからPostizにMCPで接続し、Postiz側の20個のツールのうち、使う6個だけを登録
- 書き込み系のツールを呼ぶたびに、Discordに承認ボタンが出るように設定
- Discordから「チャンネル一覧 → 下書き作成 → 一覧で確認 → 削除」まで試して、動作を確認
詰まったところと、どう解いたか
1. 投稿ツールが、下書き・予約・即時投稿を1つで兼ねていた
Postizの投稿ツールは、引数の type で draft(下書き)・schedule(予約)・now(即時投稿)を切り替える作りでした。使うツールを名前で絞る方法では「下書きだけ許可する」ができません。そこで、HermesのMCP設定にある trust: untrusted を使いました。読み取り専用の印(readOnlyHint: true)が付いていないツールを呼ぶたびに、承認を求める設定です。Postizは投稿や削除のツールに readOnlyHint: false を付けていたので、狙いどおり毎回承認ボタンが出ました。設定の形はこんな感じです。
mcp_servers:
postiz:
url: <PostizのURL>/api/mcp
trust: untrusted # 書き込み系は毎回承認
tools:
include: # 使うツールだけ登録
- integrationList
- integrationSchedulePostTool
- postsListTool2. ソースに書かれた名前と、実際に公開されるツール名が違った
ソースを読んで、許可リストに schedulePostTool と書きました。ところが、実際にMCPで公開されていた名前は integrationSchedulePostTool でした。許可リストにない名前はエラーにならずに無視されるので、投稿ツールが読み込まれていませんでした。実際に接続してツール一覧を取り、名前を直しました。ソースを読むだけで決めずに、つないで確かめるのが大事だと分かりました。
3. 本文が承認ボタンより後に届いた
Hermesには「ツールを呼ぶ前に、投稿する本文をチャットに書いて」と指示していました。ところがDiscordでは、同じ応答の中で書いた文章が、承認ボタンより後に届きました。これでは、承認するときに中身が見えません。そこで、何も公開されない下書きは承認ボタンだけで作り、予約・即時投稿・削除は先に中身を見せていったん止まり、返信でOKをもらってから呼ぶ、というルールに分けました。
4. 好きなMastodonサーバーにつなぐ機能が使えなかった
Postizには、好きなMastodonサーバーにつなぐためのコードがありますが、ソースの上で無効化されていました。標準のMastodon接続を使うことにして、mastodon.socialに自分用のアプリを登録してつなぎました。
5. 予約処理のコンテナに、再起動の設定がなかった
Postizの予約投稿は、Temporalというワークフローエンジンが担っています。公式のcomposeでは、Postiz本体・データベース・Redisには自動で立ち上がる設定がありますが、Temporal側の4つのコンテナにはありませんでした。このままだとPCを再起動したあとに予約投稿が止まるので、4つにも設定を追加しました。

とむ(Discord)→ Hermes → Postiz → Mastodon の流れと、操作ごとの確認の手順。下書きは承認ボタンだけで作り、予約・即時投稿・削除は、中身を見せて返信でOKをもらってから承認ボタンを出す。
気づき
mastodon.socialのルールには「生成AIの使用は明示すること」「AIが生成したものだけを投稿するアカウントは認めない」とあります。そこで、AIが書いた本文には最後の行に #AI生成 を付けるようにしました。全部を自動で投稿するのではなく、AIは下書きを作る係、投稿するかどうかは自分が見て決める、という分担が今の形です。
AIエージェントに外部への書き込みを任せるとき、ツールを絞るだけでは足りない場合があります。1つのツールが安全な操作と公開する操作を兼ねているなら、承認の仕組みと、承認の前に中身を見られる手順の両方が必要でした。
次にやること
- 毎晩作っているSNSの下書きを、Postizの下書きとして入れる形にするか検討
- 日本の利用者が多いThreadsの追加を検討(開発者アプリの登録とHTTPSの準備が必要そう)
- PCを再起動したときに、全部が自動で立ち上がるかを確認
