API・MCP で投稿する
ハック!でAIには、画面のエディタのほかに、AI ツールやプログラムから投稿する方法が 2 つあります。
- MCP: Claude Code などの AI ツールに登録すると、会話の中から下書きの作成や公開を頼めます。
- API: curl や自作のプログラムから、HTTP で下書きの作成・更新・公開ができます。
どちらも、ハック!でAIのアカウントが必要です。投稿の決まりは、画面から投稿するときと同じです(投稿ガイドライン)。
MCP でつなぐ
接続先の URL は次のとおりです(Streamable HTTP)。OAuth に対応しているので、アクセストークンを用意しなくてもつなげます。
https://hackde-ai.gameagelayer.com/mcpClaude Code の場合
claude mcp add --transport http hackde-ai https://hackde-ai.gameagelayer.com/mcp- 上のコマンドを実行します。
- Claude Code を起動して
/mcpと入力し、hackde-ai を選んで認証を始めます。ブラウザが開きます。 - ハック!でAIにログインし、連携の画面で「許可する」を押します。
- Claude Code に戻り、「ハック!でAIに下書きを作って」のように頼みます。
ほかのツールの場合
MCP の設定に、上の URL を登録します。OAuth に対応したツールでは、最初につなぐときにブラウザで連携の画面が開きます。
OAuth に対応していないツールでは、アクセストークンを Authorization ヘッダーに入れます。
{
"mcpServers": {
"hackde-ai": {
"type": "http",
"url": "https://hackde-ai.gameagelayer.com/mcp",
"headers": { "Authorization": "Bearer hda_pat_xxxxxxxx" }
}
}
}使える道具
| 道具 | できること |
|---|---|
writing_guide | 投稿の決まり(使える Markdown・画像・カテゴリ・自動チェック)を読む |
whoami | 接続中のアカウントを確かめる |
list_categories | カテゴリの一覧 |
list_posts | 自分の投稿と下書きの一覧 |
get_post | 投稿を 1 つ、本文つきで取得する |
create_draft | 下書きを作る |
update_draft | 下書きを書き換える |
upload_image | 画像をアップロードする |
publish_post | 公開する・公開中の投稿を更新する |
unpublish_post | 公開をやめて下書きに戻す |
delete_post | 投稿か下書きを削除する |
連携したアプリは、マイページの「連携中のアプリ」に並びます。使わなくなったら、そこで解除できます。
アクセストークン
API を使うときと、OAuth に対応していないツールから MCP につなぐときは、アクセストークンを使います。マイページの「アクセストークン」で、名前と有効期限を決めて発行します(1 人 10 個まで)。
API を使う
入口は https://hackde-ai.gameagelayer.com/api/v1 です。リクエストに Authorization: Bearer アクセストークン を付け、本文は JSON で送ります。
export HDA_TOKEN="hda_pat_xxxxxxxx"
# 下書きを作る(返ってきた post.id を、あとの操作に使う)
curl -X POST https://hackde-ai.gameagelayer.com/api/v1/posts \
-H "Authorization: Bearer $HDA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Claude Code に不具合を直してもらった","body_markdown":"## やったこと\n\n残りの件数が逆に数えられていたのを、1 行の修正で直せました。"}'
# 画像をアップロードする(返ってきた url を本文に書く)
curl -X POST https://hackde-ai.gameagelayer.com/api/v1/uploads \
-H "Authorization: Bearer $HDA_TOKEN" \
-F file=@screenshot.png
# 公開する
curl -X POST https://hackde-ai.gameagelayer.com/api/v1/posts/POST_ID/publish \
-H "Authorization: Bearer $HDA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"category":"coding","tags":["Claude Code"]}'入口の一覧
| メソッドと道 | 内容 |
|---|---|
GET /me | トークンの持ち主(@ユーザー名・表示名・プロフィールの URL) |
GET /categories | カテゴリの一覧 |
GET /posts | 自分の投稿と下書きの一覧。?status=draft のように絞れます(draft・published・held・hidden) |
POST /posts | 下書きを作る。title・body_markdown |
GET /posts/ID | 投稿を 1 つ取得する。本文は body_markdown |
PATCH /posts/ID | 下書きを書き換える。title・body_markdown(渡した項目だけ) |
DELETE /posts/ID | 投稿か下書きを削除する(元に戻せません) |
POST /posts/ID/publish | 公開する。category(必須)・tags・cover・confirm_findings。公開中の投稿は、title・body_markdown を付けて送ると更新できます |
POST /posts/ID/unpublish | 公開をやめて下書きに戻す |
POST /uploads | 画像をアップロードする。multipart の file、または JSON の data_base64。kind は post(本文)か cover(表紙)。PNG・JPEG・WebP・GIF。file は 10MB まで、data_base64 は 8MB まで |
投稿の status は、draft(下書き)・published(公開中)・held(自動チェックで確認中)・hidden(編集部が非表示)のどれかです。
本文の Markdown
本文は Markdown(body_markdown)で受け渡しします。画面のエディタで書いた投稿も、同じ形で取得できます。
- タイトルは
titleに書き、本文には書きません。見出しは##(見出し)と###(小見出し)です。#は##と同じ扱いになります。 - 段落は空行で区切ります。段落の中の改行は、そのまま改行になります。
- 装飾:
**太字**・*斜体*・~~打ち消し~~・`コード`・[リンク](https://example.com/)・:mark[蛍光ペン] - 箇条書き(
-)・番号つき(1.)・引用(>)・区切り線(---) - コードは
```で囲み、```bashのように言語を書きます。 - 囲み:
:::point(ポイント)・:::warn(注意)・:::info(補足)の行で始め、:::の行で閉じます。 - 画像:
。使えるのは、ご自身がアップロードした画像の URL だけです。ほかのサイトの画像は外されます。 - 表と HTML は使えません。表は、行ごとの段落になります。
- 本文は 30 文字以上、200,000 文字までです。
本文から外したものがあるときは、応答の warnings に理由が入ります。
## やったこと
やることリストの**残りの件数**が逆に数えられていました。
:::point
使った AI の名前とプラン、試した日付を書くと、読んだ人が試しやすくなります。
:::

```bash
claude "残りの件数の不具合を直して"
```カテゴリとタグ
category は次のどれかです。tags は 5 個までで、使った AI の名前(Claude Code・ChatGPT など)を入れます。
| category | 名前 |
|---|---|
coding | AIコーディング |
work | 仕事の効率化 |
life | 学び・暮らし |
creative | 画像・動画・音声 |
prompt | プロンプト |
story | 体験談 |
公開のときの自動チェック
API・MCP からの公開も、画面からの公開と同じチェックを通ります。
- API キー・パスワードや、メールアドレス・電話番号のような文字列が見つかると、公開の前に止まり、
409(needs_confirmation)と、見つかった文字列(findings)が返ります。本物の値は本文から消してください。ダミーの値など公開してよいものなら、confirm_findings: trueを付けてもう一度送ります。 - 公開と同時に、AI が内容を確かめます。投稿ガイドラインに反する可能性があるときは、
statusがheld(確認中)になり、編集部が確認してから公開します。
エラーと回数の上限
エラーのときは、HTTP の状態と、次の形の JSON が返ります。error は説明の文、code は種類を表す印です。
{ "error": "アクセストークンが正しくないか、期限が切れています。", "code": "invalid_token" }| 状態 | code | 意味 |
|---|---|---|
| 400 | invalid_request | 送った内容の形が正しくない(ほかに invalid_category・invalid_cover・invalid_image) |
| 401 | unauthorized・invalid_token | アクセストークンが無い、正しくない、期限が切れている |
| 403 | setup_required・forbidden | プロフィールの設定か規約の同意が済んでいない、編集部が非表示にした投稿 |
| 404 | not_found | 投稿が見つからない(ほかの人の投稿も同じ) |
| 409 | needs_confirmation・not_draft・not_published | 公開の前の確認が必要、下書きでない投稿を書き換えようとした、公開されていない投稿の公開を取り消そうとした |
| 413 | too_large | 本文や画像が大きすぎる |
| 429 | rate_limited・limit_reached | 回数の上限を超えた |
| 503 | posting_closed | 投稿の受け付けを停止している |
- リクエストは、トークンごとに 1 分 60 回まで(API と MCP を合わせて数えます)
- 公開は 1 日 10 本まで、画像のアップロードは 1 日 150 枚まで、下書きは 50 件まで(画面からの操作と合わせて数えます)
不具合や要望は、お問い合わせからお知らせください。