Automate 21risk tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Coordinate end-to-end deployments across Stripe, Supabase, and Vercel using the Composio CLI. Update pricing, apply database migrations, deploy frontend, verify changes, and announce releases from a single script.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Undeveloped: Manual steps across Stripe, Supabase, Vercel; no coordination; error-prone ordering.
Target: Composio CLI orchestration of Stripe → Supabase → Vercel in correct sequence with basic verification.
Optimized: Automated pipeline with rollback strategies, feature flags, comprehensive post-deploy checks, scheduled releases.
Order matters for full-stack releases. Stripe → Supabase → Vercel ensures billing changes precede database migrations, and migrations precede frontend deployment. One coordinated script prevents cascading failures.
Install Composio CLI:
curl -fsSL https://composio.dev/install | bash
composio login
Link all three services:
composio link stripe
composio link supabase
composio link vercel
composio link slack # For release announcements
Search available actions:
| Service | Discovery Command |
|---|---|
| Stripe | composio search "create price" --toolkits stripe |
| Supabase | composio search "apply migration" --toolkits supabase |
| Vercel | composio search "create deployment" --toolkits vercel |
Common action slugs:
STRIPE_CREATE_PRODUCT, STRIPE_CREATE_PRICE, STRIPE_UPDATE_PRODUCT
SUPABASE_LIST_PROJECTS, SUPABASE_RUN_SQL_QUERY, SUPABASE_APPLY_MIGRATION
VERCEL_CREATE_A_NEW_DEPLOYMENT, VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL, VERCEL_PROMOTE_DEPLOYMENT
Verify schemas:
composio tools get-schema STRIPE_CREATE_PRICE
composio tools get-schema SUPABASE_APPLY_MIGRATION
composio tools get-schema VERCEL_CREATE_A_NEW_DEPLOYMENT
Create new price:
composio execute STRIPE_CREATE_PRICE -d '{
"product": "prod_abc123",
"unit_amount": 2900,
"currency": "usd",
"recurring": { "interval": "month" },
"lookup_key": "team-plan-v2"
}'
Update product metadata:
composio execute STRIPE_UPDATE_PRODUCT -d '{
"id": "prod_abc123",
"name": "Team Plan v2",
"description": "Enhanced team collaboration features"
}'
List and verify prices:
composio execute STRIPE_LIST_PRICES -d '{
"product": "prod_abc123",
"limit": 10
}' | jq '.data[] | {id, lookup_key, unit_amount}'
Apply database migration:
composio execute SUPABASE_APPLY_MIGRATION -d '{
"project_id": "abcxyz",
"name": "add_team_tier_column",
"query": "ALTER TABLE teams ADD COLUMN tier TEXT DEFAULT '"'"'free'"'"';"
}'
Verify schema changes:
composio execute SUPABASE_RUN_SQL_QUERY -d '{
"project_id": "abcxyz",
"query": "SELECT column_name FROM information_schema.columns WHERE table_name='"'"'teams'"'"' AND column_name='"'"'tier'"'"';"
}'
Check for data issues:
composio execute SUPABASE_RUN_SQL_QUERY -d '{
"project_id": "abcxyz",
"query": "SELECT COUNT(*) FROM teams WHERE tier IS NULL;"
}'
Create production deployment:
composio execute VERCEL_CREATE_A_NEW_DEPLOYMENT -d '{
"name": "web",
"target": "production",
"gitSource": {
"type": "github",
"ref": "main",
"repoId": 123456
}
}'
Poll deployment status:
composio execute VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL -d '{
"idOrUrl": "dpl_xxx"
}' | jq '.readyState'
Wait for ready state (shell loop):
DEPLOYMENT_ID="dpl_xxx"
while true; do
STATE=$(composio execute VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL -d "{\"idOrUrl\":\"$DEPLOYMENT_ID\"}" | jq -r '.readyState')
[ "$STATE" = "READY" ] && break
[ "$STATE" = "ERROR" ] && exit 1
sleep 4
done
Health check:
curl -fsS https://app.acme.com/api/health || exit 1
Database verification:
composio execute SUPABASE_RUN_SQL_QUERY -d '{
"project_id": "abcxyz",
"query": "SELECT COUNT(*) as total, COUNT(CASE WHEN tier IS NOT NULL THEN 1 END) as migrated FROM teams;"
}'
Stripe verification:
composio execute STRIPE_LIST_PRICES -d '{
"product": "prod_abc123",
"active": true
}' | jq '.data[].lookup_key'
Create scripts/ship.ts:
const ref = process.argv[process.argv.indexOf("--ref") + 1] ?? "main";
const channel = process.argv[process.argv.indexOf("--channel") + 1] ?? "releases";
try {
// Step 1: Stripe - Create price
const price = await execute("STRIPE_CREATE_PRICE", {
product: "prod_abc123",
unit_amount: 2900,
currency: "usd",
recurring: { interval: "month" },
lookup_key: "team-plan-v2"
});
console.log(`✓ Stripe price created: ${price.id}`);
// Step 2: Supabase - Apply migration
await execute("SUPABASE_APPLY_MIGRATION", {
project_id: "abcxyz",
name: "add_team_tier_column",
query: "ALTER TABLE teams ADD COLUMN tier TEXT DEFAULT 'free';"
});
console.log(`✓ Supabase migration applied`);
// Step 3: Vercel - Create deployment
const dep = await execute("VERCEL_CREATE_A_NEW_DEPLOYMENT", {
name: "web",
target: "production",
gitSource: { type: "github", ref, repoId: 123456 }
});
console.log(`✓ Vercel deployment created: ${dep.id}`);
// Step 4: Wait for Vercel ready
let state = "QUEUED";
let attempts = 0;
while (state !== "READY" && state !== "ERROR" && attempts < 60) {
await new Promise(r => setTimeout(r, 4000));
const d = await execute("VERCEL_GET_A_DEPLOYMENT_BY_ID_OR_URL", { idOrUrl: dep.id });
state = d.readyState;
attempts++;
}
if (state !== "READY") throw new Error(`Vercel deploy failed: ${state}`);
console.log(`✓ Vercel deployment ready`);
// Step 5: Announce
await execute("SLACK_SEND_MESSAGE", {
channel,
text: `✅ *Production Release* — Ref: \`${ref}\`\nStripe: ${price.id}\nVercel: ${dep.url}`
});
console.log(`✓ Release announced on #${channel}`);
} catch (error) {
console.error(`✗ Pipeline failed: ${error.message}`);
await execute("SLACK_SEND_MESSAGE", {
channel,
text: `❌ *Release Failed* — ${error.message}`
});
throw error;
}
Run the workflow:
composio run --file scripts/ship.ts -- --ref main --channel releases
If verification fails, undo in reverse order:
Vercel: Promote previous deployment
composio execute VERCEL_PROMOTE_DEPLOYMENT -d '{
"deploymentId": "dpl_previous"
}'
Supabase: Apply down migration
composio execute SUPABASE_APPLY_MIGRATION -d '{
"project_id": "abcxyz",
"name": "rollback_add_team_tier_column",
"query": "ALTER TABLE teams DROP COLUMN tier;"
}'
Stripe: Hide new price (don't delete)
composio execute STRIPE_UPDATE_PRODUCT -d '{
"id": "prod_abc123",
"metadata": { "rollback": "true" }
}'
Announce rollback
composio execute SLACK_SEND_MESSAGE -d '{
"channel": "releases",
"text": "⚠️ Release rolled back due to verification failure"
}'
| Issue | Solution |
|---|---|
| Stripe price visible but old price in checkout | Cache issue on app side; verify lookup_key matches what checkout fetches |
| Supabase migration hangs | Another connection holds a lock; check: SELECT pid, state FROM pg_stat_activity WHERE state <> 'idle'; |
| Vercel deployment stuck in QUEUED | Check build logs; verify git ref exists and permissions are set |
| Frontend reads column before migration applies | Never parallelize; always serialize Stripe → Supabase → Vercel |
| Rollback partially failed | Check Slack history for last successful state; manually verify each service |
Deliver:
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Automate 21risk tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate 2chat tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate Ably tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate Abstract tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate Abuselpdb tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。
Automate Abyssale tasks via Rube MCP (Composio). Always search tools first for current schemas.
日本語の概要は準備中です。原文の説明を表示しています。