本文へ移動
ハック!でAI

API・MCP で投稿する

ハック!でAIには、画面のエディタのほかに、AI ツールやプログラムから投稿する方法が 2 つあります。

  • MCP: Claude Code などの AI ツールに登録すると、会話の中から下書きの作成や公開を頼めます。
  • API: curl や自作のプログラムから、HTTP で下書きの作成・更新・公開ができます。

どちらも、ハック!でAIのアカウントが必要です。投稿の決まりは、画面から投稿するときと同じです(投稿ガイドライン)。

MCP でつなぐ

接続先の URL は次のとおりです(Streamable HTTP)。OAuth に対応しているので、アクセストークンを用意しなくてもつなげます。

接続先
https://hackde-ai.gameagelayer.com/mcp

Claude Code の場合

ターミナル
claude mcp add --transport http hackde-ai https://hackde-ai.gameagelayer.com/mcp
  1. 上のコマンドを実行します。
  2. Claude Code を起動して /mcp と入力し、hackde-ai を選んで認証を始めます。ブラウザが開きます。
  3. ハック!でAIにログインし、連携の画面で「許可する」を押します。
  4. Claude Code に戻り、「ハック!でAIに下書きを作って」のように頼みます。

ほかのツールの場合

MCP の設定に、上の URL を登録します。OAuth に対応したツールでは、最初につなぐときにブラウザで連携の画面が開きます。

OAuth に対応していないツールでは、アクセストークンを Authorization ヘッダーに入れます。

JSON
{
  "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(補足)の行で始め、::: の行で閉じます。
  • 画像: ![画像の説明](/media/…)。使えるのは、ご自身がアップロードした画像の URL だけです。ほかのサイトの画像は外されます。
  • 表と HTML は使えません。表は、行ごとの段落になります。
  • 本文は 30 文字以上、200,000 文字までです。

本文から外したものがあるときは、応答の warnings に理由が入ります。

MARKDOWN
## やったこと

やることリストの**残りの件数**が逆に数えられていました。

:::point
使った AI の名前とプラン、試した日付を書くと、読んだ人が試しやすくなります。
:::

![修正の前の画面](/media/u/xx/202610/xxxxxxxxxxxxxx.webp)

```bash
claude "残りの件数の不具合を直して"
```

カテゴリとタグ

category は次のどれかです。tags は 5 個までで、使った AI の名前(Claude Code・ChatGPT など)を入れます。

category名前
codingAIコーディング
work仕事の効率化
life学び・暮らし
creative画像・動画・音声
promptプロンプト
story体験談

公開のときの自動チェック

API・MCP からの公開も、画面からの公開と同じチェックを通ります。

  • API キー・パスワードや、メールアドレス・電話番号のような文字列が見つかると、公開の前に止まり、409(needs_confirmation)と、見つかった文字列(findings)が返ります。本物の値は本文から消してください。ダミーの値など公開してよいものなら、confirm_findings: true を付けてもう一度送ります。
  • 公開と同時に、AI が内容を確かめます。投稿ガイドラインに反する可能性があるときは、status が held(確認中)になり、編集部が確認してから公開します。

エラーと回数の上限

エラーのときは、HTTP の状態と、次の形の JSON が返ります。error は説明の文、code は種類を表す印です。

JSON
{ "error": "アクセストークンが正しくないか、期限が切れています。", "code": "invalid_token" }
状態code意味
400invalid_request送った内容の形が正しくない(ほかに invalid_category・invalid_cover・invalid_image)
401unauthorized・invalid_tokenアクセストークンが無い、正しくない、期限が切れている
403setup_required・forbiddenプロフィールの設定か規約の同意が済んでいない、編集部が非表示にした投稿
404not_found投稿が見つからない(ほかの人の投稿も同じ)
409needs_confirmation・not_draft・not_published公開の前の確認が必要、下書きでない投稿を書き換えようとした、公開されていない投稿の公開を取り消そうとした
413too_large本文や画像が大きすぎる
429rate_limited・limit_reached回数の上限を超えた
503posting_closed投稿の受け付けを停止している
  • リクエストは、トークンごとに 1 分 60 回まで(API と MCP を合わせて数えます)
  • 公開は 1 日 10 本まで、画像のアップロードは 1 日 150 枚まで、下書きは 50 件まで(画面からの操作と合わせて数えます)

不具合や要望は、お問い合わせからお知らせください。