About vibe-provision
vibe-provision provisions external SaaS resources from YAML and writes environment variables to configured targets. It is for application teams and AI agents setting up services such as Clerk, Stripe and Resend.
Key features
- 01Generate configuration templates
- 02Provision supported SaaS resources
- 03Write variables to .env and other targets
- 04Merge environment-specific configuration
- 05Track resources to avoid repeated creation
- 06Authenticate providers locally
Use cases
- 01Set up SaaS services for a new application
- 02Create separate development and production configurations
- 03Let an AI agent provision services from project configuration
MCP support
Its MCP server provides tools to check provider status, provision resources and update the service list in `vibe.yaml`.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
3Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| env | string | No | Environment name (dev, staging, prod) |
Details
From the project READMEvibe-provision
Provision external SaaS services from YAML. One command to set up Clerk, Stripe, Resend and inject .env.
"AI can write code, but it can't click dashboards." — vibe-provision solves that.
Quick Start
# 1. Generate a config template
npx vibe-provision init
# 2. Authenticate with providers (one-time)
npx vibe-provision auth
# 3. Provision resources and generate .env
npx vibe-provision up
That's it. Your .env is ready — run your dev server.
vp is a short alias: npx vp up works too.
vibe.yaml
project: my-saas-app
output:
- .env
- vercel # auto-inject env vars to Vercel
- terraform # generate terraform.tfvars.json
services:
auth:
provider: clerk
config:
app_name: "My SaaS App"
redirect_urls:
- http://localhost:3000/callback
payments:
provider: stripe
config:
products:
- name: "Pro Plan"
prices:
- amount: 1900
currency: usd
interval: month
webhooks:
events:
- checkout.session.completed
- customer.subscription.updated
email:
provider: resend
config:
domain: my-app.com
database:
provider: neon
config:
region: aws-ap-northeast-1
cache:
provider: upstash
config:
region: ap-northeast-1
AI (Cursor, Claude Code, etc.) can generate this file alongside your app code.
Supported Providers
| Provider | Category | What it creates | Auth method |
|---|---|---|---|
| Clerk | Auth | Redirect URL config + env vars | API key paste |
| Stripe | Payments | Products, Prices, Webhook Endpoints | API key paste |
| Resend | Domain registration | API key paste | |
| Supabase | DB + Auth | Project + API keys | Access token |
| Neon | Postgres | Project + database | API key |
| Upstash | Redis | Database | Email + API key |
Output Targets
Control where env vars are written via the output section:
| Target | Description |
|---|---|
.env | Local .env file (default) |
vercel | Vercel environment variables via CLI |
terraform | .vibe-provision/terraform.tfvars.json with merge semantics |
Environment-Specific Config
Use --env to manage multiple environments:
npx vp up --env dev # merges vibe.yaml + vibe.dev.yaml → .env.dev
npx vp up --env staging # merges vibe.yaml + vibe.staging.yaml → .env.staging
npx vp up --env prod # merges vibe.yaml + vibe.prod.yaml → .env.prod
npx vp up # uses vibe.yaml only → .env
Base config (vibe.yaml) holds shared settings. Override files (vibe.{env}.yaml) deep-merge on top:
# vibe.dev.yaml — only override what differs
services:
payments:
provider: stripe
config:
webhooks:
url: https://dev.example.com/api/webhooks/stripe
MCP Server (AI Agent Integration)
vibe-provision includes an MCP server so AI agents (Claude Code, Cursor) can provision services directly.
Setup
Add to your .mcp.json (global or per-project):
{
"mcpServers": {
"vibe-provision": {
"command": "npx",
"args": ["vibe-provision", "mcp"]
}
}
}
Available Tools
| Tool | Description |
|---|---|
vibe_provision_status | Check auth and provisioning state for all providers |
vibe_provision_up | Provision resources and generate .env (requires prior auth) |
vibe_provision_add | Add a new service to vibe.yaml |
Example Flow
User: "Add Stripe payments to my app"
→ AI generates vibe.yaml with stripe config
→ AI calls vibe_provision_status → "stripe: NOT authenticated"
→ AI: "Run npx vp auth in your terminal"
→ User authenticates (one-time)
→ AI calls vibe_provision_up → Products, Prices, Webhooks created
→ .env updated, app ready to run
Idempotency
vibe-provision up is safe to run multiple times. It tracks created resources in .vibe-provision/state.json and skips anything that already exists.
How It Works
init— generates avibe.yamltemplateauth— walks you through authenticating each provider, stores credentials locally in~/.vibe-provision/auth/up— readsvibe.yaml, calls provider APIs to create resources, writes to configured output targets
Credentials never leave your machine.
Examples
- saas-starter-simple — Next.js + Clerk + Stripe + Resend, direct webhook handling
- saas-starter — Same stack + qhook for production webhook processing
Development
npm install
npm run lint # type check
npm test # run tests (47 tests)
npm run dev -- init # run CLI in dev mode
License
FSL-1.1-Apache-2.0 — Free to use for any purpose except competing hosted services. Converts to Apache 2.0 on 2028-03-26.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.