mcpField
T
toolify

toolify

github.com/coreyhaines31開発875336 回インストール6 日前に更新
リポジトリ

toolify について

toolifyは、外部ツール、API、MCPサーバーをプロジェクトに接続するための対話型スキルです。Next.jsとRails向けに、認証、環境変数、使用例、スモークテストなどの統合基盤を用意します。

主な機能

  1. 01Next.jsまたはRails向けの統合を作成
  2. 02認証と環境変数の設定
  3. 03必要に応じたWebhook処理の追加
  4. 04.mcp.jsonによるMCPサーバー接続
  5. 05使用例と検証コマンドの生成

活用シーン

  1. 01Next.jsプロジェクトへのAPI統合
  2. 02認証付きRailsサービスクライアントの設定
  3. 03プロジェクトへのMCPサーバー登録
  4. 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, PaddleWebhook 署名の検証、顧客モデル、イベントハンドラー
認証NextAuth/Auth.js, Clerk, Supabase Auth, Deviseセッション管理、保護されたルート、コールバック
メールResend, Postmark, SendGrid, Kit送信元アドレス、テンプレート設定、配信停止の処理
CMS/DBSanity, Prisma, Drizzle, Neon, Supabaseスキーマの場所、マイグレーション手順、クライアントシングルトンパターン
AI/LLMAnthropic, OpenAI, Gemini, Vercel AI SDKモデルの選択、ストリーミングと非ストリーミングの選択、レート制限
分析Fathom, PostHog, Plausibleスクリプトの配置、イベント追跡 API
スケジューリング/コミュニケーションSavvyCal, Cal.com, Twilio, RiversideWebhook イベント、埋め込みパターン
スクレイピングScrapeCreators, Apify, Playwrightレート制限、レスポンスのキャッシュ、リトライポリシー
アフィリエイト/紹介Rewardful, PartnerStackCookie の処理、Webhook イベント、ダッシュボードへのアクセス
ストレージVercel Blob, S3, R2バケットの設定、署名付き URL パターン、署名付きアップロード
MCP サーバーSanity、Stripe、GitHub、Kit など、任意の MCP.mcp.json エントリと環境変数。クライアントラッパーは不要
カスタム/その他内部 API、不明なツール追加の質問をする

カテゴリを判定できない場合は、カテゴリを特定するために 2 つ質問します:"呼び出す API、Webhook の受信先、それとも両方ですか?" / "公式 SDK はありますか?"

ステップ 1 — 構成に関する聞き取り

以下を順に質問します(カテゴリに応じて該当しない質問は省略します)。

  1. どのプロジェクトですか?(パス — cwd から推測し、曖昧な場合は質問します)
  2. どのスタックですか?(Next.js / Rails — package.json と Gemfile から推測し、両方ある場合は質問します)
  3. 認証パターンは何ですか?(API キー / OAuth / JWT / セッション Cookie / 署名付き Webhook — 通常は公式ドキュメントから判断できます)
  4. 公式 SDK はありますか?(ドキュメントを確認し、優れた SDK があれば優先します。肥大化している、またはメンテナンスが放棄されている場合は raw fetch に切り替えます)
  5. 環境変数名の規則は何ですか?(デフォルト:公式規則に合わせた SCREAMING_SNAKE_CASE — 例:STRIPE_SECRET_KEY、RESEND_API_KEY)
  6. 環境はいくつありますか?(開発/プレビュー/本番 — キーは環境ごとに異なりますか?)
  7. Webhook の受信先は必要ですか?(Stripe/Rewardful/ほとんどの決済・認証・CMS では YES。クライアント側だけで完結する API や読み取り専用 API では NO)
  8. 順守すべきレート制限はありますか?(公式ドキュメントを grep します)
  9. クライアントラッパーはどこに置きますか?(デフォルト: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 が毎日イベントを受信しているか確認する loopify cron を設定しますか?」
  • 「skillify from-chat を使って、この統合レシピをスキルとして保存しますか?」
  • 「今すぐこれらの変更をコミットしますか?」

リファレンス — 統合レシピ

一般的なツールの詳しいレシピは references/ にあります(使用に応じて追加してください)。

  • references/stripe-nextjs.md — 決済統合+Webhook+顧客ポータル
  • references/kit-nextjs.md — Kit(ConvertKit)MCP+購読者 API
  • references/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/ からレシピを読み込み、応用してください。最初から導き出し直さないでください。

コメント