toolify について
toolifyは、外部ツール、API、MCPサーバーをプロジェクトに接続するための対話型スキルです。Next.jsとRails向けに、認証、環境変数、使用例、スモークテストなどの統合基盤を用意します。
主な機能
- 01Next.jsまたはRails向けの統合を作成
- 02認証と環境変数の設定
- 03必要に応じたWebhook処理の追加
- 04.mcp.jsonによるMCPサーバー接続
- 05使用例と検証コマンドの生成
活用シーン
- 01Next.jsプロジェクトへのAPI統合
- 02認証付きRailsサービスクライアントの設定
- 03プロジェクトへのMCPサーバー登録
- 04リリース前の統合検証
MCP 対応
MCPサーバーを統合する場合、toolifyは.mcp.jsonのサーバー項目を追加または更新し、必要な環境変数を設定します。エージェントを再起動してサーバーを呼び出す検証手順も示します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ coreyhaines31/ makerskills --skill toolifyインストール後、Claude Code で/toolifyを入力して読み込まれたか確認します。
詳細
/toolify — インテグレーションまたは MCP サーバーを接続する
外部ツール/API/MCP をプロジェクトに追加するための対話型ウィザードです。動作するコード、設定済みの環境変数、検証手順を用意して完了します。
対象範囲
- 主なスタック:Next.js(App Router + TypeScript)と Rails です。理由:ユーザーが実際にリリースしているのはこの 2 つのスタックです。すべてのスタックに対応すると、ウィザードが肥大化します。
- toolify が扱うこと:認証パターン(API キー、OAuth、JWT、セッション Cookie)、環境変数の設定、公式 SDK と raw fetch の選択、クライアントラッパーの配置場所、使用例、Webhook の処理(該当する場合)、MCP
.mcp.jsonの設定(MCP サーバーの場合)。 - toolify が扱わないこと:インテグレーション上にビジネスロジックを書くこと(それは人間が担当します)。toolify が用意するのは接続部分であり、機能ではありません。
ステップ 0 — ツール名を確認する
入力されていない場合は質問します:"どのツールをインテグレーションしますか?"
名前からカテゴリを判定します:
| カテゴリ | 例 | 追加の手順 |
|---|---|---|
| 決済 | Stripe, LemonSqueezy, Paddle | Webhook 署名の検証、顧客モデル、イベントハンドラー |
| 認証 | NextAuth/Auth.js, Clerk, Supabase Auth, Devise | セッション管理、保護されたルート、コールバック |
| メール | Resend, Postmark, SendGrid, Kit | 送信元アドレス、テンプレート設定、配信停止の処理 |
| CMS/DB | Sanity, Prisma, Drizzle, Neon, Supabase | スキーマの場所、マイグレーション手順、クライアントシングルトンパターン |
| AI/LLM | Anthropic, OpenAI, Gemini, Vercel AI SDK | モデルの選択、ストリーミングと非ストリーミングの選択、レート制限 |
| 分析 | Fathom, PostHog, Plausible | スクリプトの配置、イベント追跡 API |
| スケジューリング/コミュニケーション | SavvyCal, Cal.com, Twilio, Riverside | Webhook イベント、埋め込みパターン |
| スクレイピング | ScrapeCreators, Apify, Playwright | レート制限、レスポンスのキャッシュ、リトライポリシー |
| アフィリエイト/紹介 | Rewardful, PartnerStack | Cookie の処理、Webhook イベント、ダッシュボードへのアクセス |
| ストレージ | Vercel Blob, S3, R2 | バケットの設定、署名付き URL パターン、署名付きアップロード |
| MCP サーバー | Sanity、Stripe、GitHub、Kit など、任意の MCP | .mcp.json エントリと環境変数。クライアントラッパーは不要 |
| カスタム/その他 | 内部 API、不明なツール | 追加の質問をする |
カテゴリを判定できない場合は、カテゴリを特定するために 2 つ質問します:"呼び出す API、Webhook の受信先、それとも両方ですか?" / "公式 SDK はありますか?"
ステップ 1 — 構成に関する聞き取り
以下を順に質問します(カテゴリに応じて該当しない質問は省略します)。
- どのプロジェクトですか?(パス — cwd から推測し、曖昧な場合は質問します)
- どのスタックですか?(Next.js / Rails —
package.jsonとGemfileから推測し、両方ある場合は質問します) - 認証パターンは何ですか?(API キー / OAuth / JWT / セッション Cookie / 署名付き Webhook — 通常は公式ドキュメントから判断できます)
- 公式 SDK はありますか?(ドキュメントを確認し、優れた SDK があれば優先します。肥大化している、またはメンテナンスが放棄されている場合は raw fetch に切り替えます)
- 環境変数名の規則は何ですか?(デフォルト:公式規則に合わせた
SCREAMING_SNAKE_CASE— 例:STRIPE_SECRET_KEY、RESEND_API_KEY) - 環境はいくつありますか?(開発/プレビュー/本番 — キーは環境ごとに異なりますか?)
- Webhook の受信先は必要ですか?(Stripe/Rewardful/ほとんどの決済・認証・CMS では YES。クライアント側だけで完結する API や読み取り専用 API では NO)
- 順守すべきレート制限はありますか?(公式ドキュメントを grep します)
- クライアントラッパーはどこに置きますか?(デフォルト:Next.js では
src/lib/<tool>.ts、Rails ではapp/services/<tool>_client.rb)
ファイルを生成する前に、回答を要約してユーザーに提示します。書き込み前に修正できる機会は 1 回です。
ステップ 2 — 公式のセットアップドキュメントを取得する
最新の公式クイックスタートを取得します。エージェントが context7 を利用できる場合は、トレーニングデータより新しいドキュメントを取得できるため、そちらを優先します。それ以外の場合は、エージェントの URL 取得ツール(Claude Code の WebFetch)または curl で公式クイックスタート URL を取得します。
一度だけ読み込み、その後はキャッシュした内容を使って作業します。スキャフォールディングの途中で再取得しないでください。package.json に適切なバージョンを固定できるよう、記載されている SDK のバージョンを控えます。
ステップ 3 — ファイルのスキャフォールディング
標準的な Next.js 統合では、以下を生成します。
src/lib/<tool>.ts # client singleton + typed wrappers
src/app/api/webhooks/<tool>/route.ts # webhook handler (if applicable)
src/app/api/<tool>/example/route.ts # one working example route
.env.local.example # env var template with placeholder values
Railsの場合:
config/initializers/<tool>.rb # SDK config
app/services/<tool>_client.rb # client wrapper
app/controllers/webhooks/<tool>_controller.rb # webhook handler if applicable
config/routes.rb # webhook route
.env.example # env vars
MCP サーバーの場合は、以下のみです。
.mcp.json # add or update with the new server entry
.env.local # add the env vars the MCP needs
スキャフォールディングした各ファイルの先頭には、次のようなコメントを記載してください。
// Scaffolded by /toolify on 2026-06-30. Official docs: <url>. SDK version: <version>.
// The client wrapper is scoped to plumbing only — business logic lives elsewhere.
ステップ 4 — 認証パターンの実装
ツールのカテゴリに適した認証パターンを適用してください。独自に考案せず、公式ドキュメントに記載されたパターンを使用します。一般的なパターンは次のとおりです。
- ヘッダー内の API キー:
Authorization: Bearer <key>またはX-<Vendor>-Key: <key>— ベンダーの正確な表記を確認してください - Webhook 署名:ベンダーの暗号化方式を使用します(Stripe は HMAC-SHA256 を使用し、Rewardful も同様の方式を使用します)。Webhook で署名検証を絶対に省略しないでください。スキャフォールディングした統合で最も多いセキュリティ上のバグです。
- OAuth:リダイレクト URL の設定、トークンの保存、更新処理を行います。Next.js では Auth.js/NextAuth を、Rails では Devise + omniauth を優先してください。
- 署名付き URL / 事前署名 URL:アップロードや一時的なアクセスに使用します。有効期限を明示的に設定し、無期限の URL は使用しないでください。
ステップ 5 — 環境変数の設定
適切なファイルに追加します。
- ローカル開発:
.env.local(Next.js) /.env(Rails)— 絶対にコミットしないでください - Vercel:機密性は変数によって異なります。次の 2 つのルールを適用してください。
- 公開変数 / バンドルに埋め込まれる変数(
NEXT_PUBLIC_*) — ビルド時にクライアントバンドルへインライン化され、すでに公開されています。後から監査できるように--no-sensitiveを使用します。vercel env add NEXT_PUBLIC_APP_URL production --value "<url>" --no-sensitive --yes - サーバー側のシークレット(API キー、Webhook シークレット、DB URL) — クライアントバンドルには入りません。Vercel のデフォルトの
--sensitive動作を使用し、値を CLI から書き込み専用にします(vercel env pullで読み戻すことはできません)。vercel env add STRIPE_SECRET_KEY production --value "<key>" --sensitive --yes vercel env add STRIPE_WEBHOOK_SECRET production --value "<secret>" --sensitive --yes - ルール:
--no-sensitiveを使うのはNEXT_PUBLIC_*のみです。それ以外はすべて--sensitiveを使用します。これを誤ると、サーバー側のシークレットが誰かのローカルターミナルでvercel env pullを実行するだけで読み取れる状態になります。コミットによる漏えいと同じ種類の問題です。 - ポリシーの詳細と、
vercel env pullおよび brackets-check による検証については、references/vercel-env-vars.mdを参照してください。
- 公開変数 / バンドルに埋め込まれる変数(
- Heroku:
heroku config:set <VAR>=<value> -a <app-name>
また、プレースホルダーを .env.example / .env.local.example に追加し、チームメイトがその変数が必要だとわかるようにしてください。
ステップ 6 — スモークテスト
ユーザーが実行できる、1 行の検証コマンドを生成します。
# Example for a REST API:
curl -H "Authorization: Bearer $STRIPE_SECRET_KEY" https://api.stripe.com/v1/customers?limit=1
# Example for an SDK:
node -e "const s = require('./src/lib/stripe.ts').default; s.customers.list({limit:1}).then(console.log)"
# For MCP: restart your agent so it reloads MCP config, run any command that touches the MCP server
想定される出力の形式を示してください。呼び出しに失敗した場合、本番環境のユーザーではなく、ウィザードが最初に検知する必要があります。
ステップ 7 — 報告とフォローアップ
次の内容を報告します。
- 作成したファイル(パス)
- 追加した環境変数(名前のみ。報告に値を含めないでください)
package.json/Gemfileに追加した SDK / 依存関係- 実行したスモークテストのコマンドと結果
- ユーザーが手動で対応する必要のある TODO(例:「 ダッシュボードに Webhook URL を追加する」)
次の内容を提案します。
- 「Webhook が毎日イベントを受信しているか確認する
loopifycron を設定しますか?」 - 「
skillify from-chatを使って、この統合レシピをスキルとして保存しますか?」 - 「今すぐこれらの変更をコミットしますか?」
リファレンス — 統合レシピ
一般的なツールの詳しいレシピは references/ にあります(使用に応じて追加してください)。
references/stripe-nextjs.md— 決済統合+Webhook+顧客ポータルreferences/kit-nextjs.md— Kit(ConvertKit)MCP+購読者 APIreferences/sanity-nextjs.md— Sanity CMS+MCP+Studio 埋め込みreferences/anthropic-nextjs.md— Claude API+ストリーミング+レート制限references/scrapecreators-nextjs.md— ソーシャルスクレイピング API+再試行ポリシーreferences/rewardful-nextjs.md— 紹介追跡+Webhook イベント
レシピがまだない場合、ウィザードは公式ドキュメントを取得して新たにひな形を作成し、再利用できるようレシピを ${MAKERSKILLS_CONFIG:-$HOME/.config/makerskills}/toolify/recipes/<tool>-<stack>.md に保存するかどうかを尋ねます(スキルフォルダー内には保存しません。アップグレード時に消去されるためです)。レシピを探すときは、references/(同梱)と設定ディレクトリ内のレシピの両方を確認してください。
連携先
skillify—-ify三部作の兄弟ツールです。統合ではなく新しい SKILL.md が目的の場合は、skillifyを使用してください。loopify— 兄弟ツールです。ツール化した統合の上に cron/エージェントループのパターンを設定する場合(例:Webhook のポーリング、毎日のデータ同期)は、loopifyを使用してください。compound-engineering:context7— 最新の SDK ドキュメントを取得します(トレーニングデータより新しい情報です)。makerskills:watch-video— ユーザーが統合手順を説明した Loom 動画を持っている場合、レシピを合成するために読み込ませてください。
品質に関する注意事項
- Webhook の署名検証を決して省略しないでください。 内部専用のエンドポイントであっても同様です。ベンダーが暗号化のパターンを提供しているのには理由があります。
- シークレットを決してコミットしないでください。
.env.localと.envは Git の追跡対象外です。完了前に確認してください。 - 認証パターンを決して捏造しないでください。 ベンダーの公式パターンをそのまま使用してください。ドキュメントが不明瞭な場合は、再度取得してください。
- SDK のバージョンは重要です。
package.json/Gemfile.lockで SDK のバージョンを固定してください。ファイルヘッダーのコメントにバージョンを記載してください。 - 1 回の実行につきツールは 1 つです。 Stripe+Kit+Sanity を 1 回の実行でひな形化しないでください。このウィザードは幅広さではなく、ツールごとの深さを重視して設計されています。
- 肥大化していたり、メンテナンスが放棄されていたりする場合を除き、公式 SDK を優先してください。 SDK に価値がない場合は、直接 fetch しても問題ありません。
- 繰り返し使うツールは、まずレシピを確認してください。 ユーザーが以前に使用したことのあるツールを統合する場合は、
references/または$MAKERSKILLS_CONFIG/toolify/recipes/からレシピを読み込み、応用してください。最初から導き出し直さないでください。