はじめに
Xの通常投稿とX記事は、どちらも「Xへ出すコンテンツ」です。しかしAIエージェントに任せる実装としては、同じツールに混ぜない方が安全です。
通常投稿は短文、画像、予約、投稿結果URLの確認が中心です。一方でX記事は、本文が長く、サムネイルがあり、エディタ画面での見え方が重要で、公開後URLの確認も必要です。
Agent Memoriesでは、X記事を通常投稿MCPの延長で「実装済み」と言い切らず、別adapterまたはSOPとして扱います。この記事では、その理由と最低限のゲートを整理します。
通常投稿MCPに混ぜると何が起きるか
通常投稿MCPは、次のような入力で成立します。
type XPostInput = {
text: string;
imagePaths?: string[];
dryRun?: boolean;
};
この形は短文投稿には向いています。しかしX記事では足りません。
- タイトルと本文の分離
- サムネイルの表示確認
- 下書き保存と公開の分離
- 公開直前の最終確認
- 公開URLの取得と台帳記録
これらを text と imagePaths に押し込むと、実装は簡単に見えますが、事故時にどの段階で止めるべきか分かりにくくなります。
adapterを分ける
X記事用adapterでは、入力を記事として扱います。
type XArticleDraftInput = {
slug: string;
title: string;
bodyMarkdown: string;
coverImagePath: string;
routeId: "agent_memories_official";
account: "@agent_memories";
dryRun: true;
};
重要なのは dryRun: true を既定にすることです。最初の呼び出しで公開まで進めず、まず下書き生成とチェック項目を返します。
type XArticleDraftResult = {
ok: true;
draftId?: string;
checks: {
titlePresent: boolean;
coverPresent: boolean;
bodyLength: number;
secretLeakScan: "pass" | "fail";
};
nextStep: "review_thumbnail" | "fix_required";
};
ゲート1: 下書き保存
記事はまず下書きに保存します。下書き保存の成功は、公開成功ではありません。
async function createDraft(input: XArticleDraftInput): Promise<XArticleDraftResult> {
const checks = validateArticleInput(input);
if (checks.secretLeakScan === "fail") {
return { ok: true, checks, nextStep: "fix_required" };
}
if (input.dryRun) {
return { ok: true, checks, nextStep: "review_thumbnail" };
}
throw new Error("Live draft creation requires an explicit publish session");
}
この段階では、外部公開をしません。プレビュー、入力検証、secret露出チェックまでに留めます。
ゲート2: サムネイル確認
X記事は、サムネイルが崩れると読まれません。記事本文が正しくても、タイトルが切れていたり、画像が古かったりすると、発信としては失敗です。
そのため、adapterはサムネイル確認を独立した状態として扱います。
type ReviewState =
| "draft_created"
| "thumbnail_reviewed"
| "ready_to_publish"
| "published";
人間またはQC担当がスクリーンショットを確認し、thumbnail_reviewed へ進めるまで、公開関数は実行できないようにします。
ゲート3: 公開URL確認
公開後はURLを取得して台帳に残します。ここを省くと、出したつもりの記事が見つからないままになります。
type PublishedArticle = {
slug: string;
platform: "x_article";
account: "@agent_memories";
url: string;
publishedAt: string;
};
公開処理は「送信成功」では終わらせません。公開URLをブラウザで開き、本文、サムネイル、アカウントが一致していることまで確認します。
通常投稿とX記事の境界
通常投稿MCPは、短文投稿、画像投稿、like、repost、bookmarkのような小さな操作に向いています。X記事adapterは、長文コンテンツの下書き、レビュー、公開確認に向いています。
同じXでも、責務を分けると事故の種類が減ります。
- 通常投稿: 速く、小さく、dry-run中心
- X記事: 下書き、確認、公開URL台帳
まとめ
X記事は、通常投稿MCPに混ぜず、別adapterとして扱う方が安全です。
最低限のゲートは次の3つです。
- 下書き保存で止める
- サムネイル確認を独立させる
- 公開URLを取得して台帳に残す
AIパートナーが記事化まで手伝えるようになるほど、公開前の状態管理が重要になります。Agent Memoriesでは、便利さより先に「どこで止まるか」を設計します。

