MCP With No Credits and No Deploy: a Pre-Prod Checklist After Claude Code or Codex — Free Is Not Ship-Ready
A zero-credit MCP server connects and your Claude Code or Codex session runs clean. At that point it's easy to believe your Bubble MVP is ready. It isn't: a process on your laptop is not production infrastructure. Here are the 4 checks I run before letting live users in.
If you're a non-technical founder, Bubble plus an agent like Claude Code or Codex is the fastest way I know to get an MVP off the ground. You describe the product in plain language. The agent pulls in context and generates workflow logic or API connectors, and a working test build shows up in hours. MCP (Model Context Protocol) speeds this up even more. OpenAI's hosted Docs MCP (https://developers.openai.com/mcp) gives you up-to-date documentation. It is strictly read-only and explicitly does not call the OpenAI API on your behalf. Cursor doesn't bill MCP as a separate line item either. It draws from your normal model usage pools. Same topic: Bubble MCP: A First-Connection Checklist.
That's where the trap sits. The tool connected without burning extra credits and got through a local session without a hitch, so it feels ready to put in front of prospective clients or investors. It isn't. Free and frictionless local access is not production readiness. Deploying is still a separate architectural step.
Why a Local MCP Session Is Not Production
The Gap Between
stdioand Multi-User HTTP. In a local vibe session, MCP servers usually run overstdio. That's a single-user child process on your machine, running with your personal environment variables and operating system permissions. The MCP specification and the OWASP MCP Security Cheat Sheet both point out thatstdiogives you no sandbox isolation. Production, team workflows, and cloud runners need Streamable HTTP or SSE servers protected by OAuth or strict header authentication. You can't just copy a localstdiosetup into production.Accidental Credential Exposure in VCS. When you configure Claude Code via
.mcp.jsonor Codex via.codex/config.toml, it's tempting to paste environment variables and API keys straight into the config. Commit that file and the secrets are out right away. The Codex documentation explicitly warns that OAuth secrets and private configuration inconfig.tomlhave to stay out of shared repositories.Workspace Trust and Tool Approvals. In interactive terminal work, the agent leans on your confirmations and on trust gates. In untrusted workspaces, Claude Code ignores committed auto-approve settings and asks a human every time. Codex controls tool execution through
default_tools_approval_mode(auto,prompt,writes,approve). Move these workflows into a non-interactive cloud agent or an unattended deployment and they stall, waiting for approvals nobody gives. A closer look: Adalo Ada (11 Oct): Prompt-to-Screens.Model Token Consumption and External Side Effects. A documentation-only MCP server doesn't trigger downstream API spend, but running the agent still eats into your core model plan allocation. And if an MCP server with write permissions touched external services or a Bubble Data API endpoint during the session, it may have changed live records or left test artifacts in your database.
Pre-Prod Checklist After a Vibe-Coding Session
Before I push changes to the live Bubble environment or onboard the first real customers, I run through these four points:
- 1. Audit the Transport Layer (stdio vs. URL). Check which MCP tools were active in the session. If they ran as local
stdiosubprocesses, treat them as local-only aids. A team or a cloud runner needs a deployed HTTP/SSE endpoint. - 2. Scrub Secrets and Configuration Files. Go through your git diff and
.gitignore. Make sure.mcp.json,.codex/config.toml, and local.envfiles contain no exposed API keys, database credentials, or client secrets. - 3. Inspect External Side Effects Beyond Git. Code and template changes are only half of it. Check whether the tools wrote anything to external endpoints, third-party test sandboxes, or your Bubble database tables while you were debugging.
- 4. Separate Local Vibe from Production Architecture. For team collaboration or automated deployment, use the formal management options: Team MCP allowlists in Cursor or Managed MCP (
managed-mcp.json) in Claude Code. Don't run ad-hocclaude mcp addscripts on production infrastructure.
| Step | What it is for | What it is not for |
|---|---|---|
| 1. Audit the Transport Layer (stdio vs. URL) | Check which MCP tools were active; treat local stdio subprocesses as local-only aids |
Team or cloud runners without a deployed HTTP/SSE endpoint |
| 2. Scrub Secrets and Configuration Files | Review git diff and .gitignore; ensure .mcp.json, .codex/config.toml, and local .env contain no exposed API keys, database credentials, or client secrets |
Assuming config files are safe without inspection |
| 3. Inspect External Side Effects Beyond Git | Check whether tools wrote to external endpoints, third-party test sandboxes, or Bubble database tables while debugging | Treating code and template changes in git as the full scope of side effects |
| 4. Separate Local Vibe from Production Architecture | Use Team MCP allowlists in Cursor or Managed MCP (managed-mcp.json) in Claude Code for team collaboration or automated deployment |
Ad-hoc claude mcp add scripts on production infrastructure |
Vibe-coding gets you to validated customer demand faster than anything I've used. An investment-ready product needs the boring part too: transport, secrets, side effects, access control. The agent won't do that part for you.