The agent that deploys your app from chat should not be coupled to any single vendor's CLI — and as of 2026, it does not have to be. When the Linux Foundation announced the Agentic AI Foundation on December 9, 2025, co-founded by OpenAI, Anthropic, and Block, the three founding donations told the whole story in one line: Anthropic contributed the Model Context Protocol, OpenAI contributed AGENTS.md, and Block contributed Goose, its open-source AI agent. The protocol, the instruction file, and a full working agent — all under neutral governance, all in one place.
For a team building deploy-from-chat on a self-hosted PaaS, that third donation is the one that changes the build plan. Goose is a local-first, model-agnostic agent whose extensions are MCP servers: there is no privileged built-in tool API, just a thin orchestrator over the same protocol your platform's deploy, rollback, and log tools already speak. This post makes the case for Goose as the neutral reference client for a PaaS tool surface — the client you build against, test against, and document first — and then wires it up concretely: a PaaS MCP extension plus a versioned deploy recipe you can adapt today.
The neutral stack, in one table
Three donations and one earlier handoff now define the vendor-neutral agent stack. Worth stating plainly, because each layer answers a different "what do we standardize on" question:
| Layer | Project | Donor | Neutral home |
|---|---|---|---|
| Agent-to-tool protocol | Model Context Protocol (MCP) | Anthropic | Agentic AI Foundation |
| Agent instruction files | AGENTS.md | OpenAI | Agentic AI Foundation |
| Reference agent | Goose (Apache-2.0) | Block | Agentic AI Foundation |
| Agent-to-agent protocol | A2A | Google (April 2025, donated to the LF in June 2025) | Linux Foundation, alongside MCP under AAIF |
The governance detail matters more than the logos. The AAIF operates as a Linux Foundation directed fund where technical steering committees, not funders, set roadmaps — and as MCP co-creator David Soria Parra told TechCrunch at launch, the goal is plain: enough adoption that the open stack becomes the de facto standard. Google's A2A took the same path months earlier, with more than a hundred companies behind it. The pattern is now three-for-three: build the thing, prove it in production, hand it to a foundation before adoption calcifies around one vendor's roadmap.
What Goose actually is (and why its architecture fits a PaaS)
Goose is Block's general-purpose AI agent: a Rust core with a CLI, a desktop app, and an HTTP/ACP serve mode (goose serve), connecting to 15-plus model providers — Anthropic, OpenAI, Google, Ollama for fully local runs, OpenRouter, Bedrock, Databricks — on a bring-your-own-key basis. Four properties make it interesting as platform infrastructure rather than just another coding assistant:
Extensions are MCP servers, full stop. Goose ships more than 70 bundled extensions, and every one of them speaks MCP; community servers bring the reachable ecosystem into the thousands. Tools are not compiled into the binary behind a privileged API. When your PaaS exposes deploy, rollback, app.status, and logs.tail as MCP tools, Goose consumes them through exactly the same path as its own file editor — no adapter, no plugin SDK, no fork.
Recipes are runbooks. A recipe is a shareable YAML file packaging instructions, extensions, and parameters ({{app_name}}-style templating), with sub-recipe composition and scheduling (goose schedule add). A deploy procedure becomes a repo artifact with diff, blame, and review — the same "runbook as code" argument this site made for Agent Skills, in a format Goose executes directly.
It is already proven at scale. Inside Block, 60% of the company's 12,000 employees use Goose weekly, with reported time savings of 50–75% on covered workflows. Stripe's Minions — fully unattended coding agents merging over a thousand PRs a week — are built on a customized Goose fork. And a Grant Program plus white-label custom distributions mean teams can ship a branded Goose with preconfigured providers and extensions.
The repo now lives under the foundation. Stewardship moved from block/goose to an AAIF home in 2026, which is what converts "open source, backed by Block" into "open source, governed like Linux itself." A platform betting its docs and test matrix on Goose is betting on a steering committee, not a corporate roadmap.
That last point deserves a concrete anchor before we move on, because "MCP-native" is doing a lot of work in this post. Adding a PaaS tool server to Goose is extension configuration, not integration engineering — roughly:
extensions:
paas-deploy:
enabled: true
type: stdio
cmd: paas-mcp-server
args: ["--fleet", "prod"]
timeout: 300One entry, whether through goose configure or the config file directly, and every recipe on the machine can call your deploy tools. The rest of this post is about making that call worth making.
Why neutral governance changes the reference-client bet
Every deploy-from-chat project answers one question early, usually without noticing: which agent do we build against? The default answer — the vendor CLI your team already uses — carries three costs that only show up later. First, roadmap capture: a breaking change in one vendor's tool-call format becomes your incident. Second, a test matrix of one: "works in our CLI" tells you nothing about the next harness. Third, documentation coupling: every runbook example embeds vendor-specific UX, so switching clients means rewriting docs.
A foundation-governed reference client inverts all three. The roadmap is set by a steering committee with multi-vendor membership, so no single company's quarter can strand your tool surface. The test matrix becomes the spec: if your MCP server behaves against Goose, it behaves against any spec-compliant client, because Goose has no proprietary tool path to accidentally depend on. And the docs travel: a recipe written against MCP tools runs on every client that speaks them.
| Couple to one vendor CLI | Build against Goose + the MCP spec | |
|---|---|---|
| Tool contract | Vendor's format, versioned by the vendor | MCP tools; Goose adds no proprietary surface |
| Test signal | Works-here-today | Works-against-the-spec |
| Docs lifespan | Rewrite on every client switch | Recipes travel across clients |
| Failure mode | Vendor ships a breaking change; you scramble | Spec evolves in the open with a conformance trail |
| When it wins | Prototype this week, one team, one harness | Anything you plan to support for years |
The honest caveat: for a weekend prototype, the vendor CLI still wins on minutes-to-first-deploy. The reference-client bet pays off the moment a second team, a second model, or a second year enters the picture. And nothing here is exclusive — certify against Goose, then keep thin notes for vendor CLIs as adapters, the way a database documents the SQL standard first and dialect quirks second.
The worked artifact: deploy tools as a Goose recipe
Here is the payoff: a deploy runbook as a Goose recipe, calling generic PaaS MCP tools. Four tools are all it assumes — app.status, app.deploy, logs.tail, app.rollback — which is deliberately the smallest surface any deploy-from-chat MCP server needs. Save it as .goose/recipes/fleet-deploy.yaml so it travels with the repo:
title: fleet-deploy
description: Deploy a service on the fleet. Use when asked to ship, release,
roll out, or promote any app. Verifies health before and after; rolls back
on any gate failure instead of retrying.
parameters:
- key: app_name
input_type: string
requirement: required
description: Service name as registered on the fleet.
- key: ref
input_type: string
requirement: required
description: Pinned commit SHA or image digest. Never "latest".
- key: environment
input_type: string
requirement: optional
description: Target environment. Defaults to staging.
instructions: >
You are the fleet deploy operator. You may only act through the paas-deploy
extension tools. Never run shell commands against the fleet, never retry a
failed batch, and never deploy the ref you were not given.
prompt: >
Deploy {{app_name}} at {{ref}} to {{environment}}:
1. Call app.status for {{app_name}} and record the currently live ref.
If the fleet reports degraded health, stop and report — do not deploy
onto a sick environment.
2. Call app.deploy with the pinned {{ref}}. Record the deployment id.
3. Poll app.status until the rollout reports healthy or 10 minutes pass.
On timeout or any unhealthy gate, call app.rollback to the ref from
step 1, then stop. Do not retry the deploy.
4. Call logs.tail scoped to the deployment id and confirm the new ref is
serving traffic without error spikes.
5. Report: live ref before/after, deployment id, verification evidence.Run it headless with goose run, or schedule the staging variant nightly with goose schedule add so drift gets caught by a machine, not a human. Three things to notice. First, the recipe carries knowledge — the ordered gates, the no-retry rule, the rollback trigger — while the MCP tools carry authority: it is the server that validates the ref, scopes the credentials, and refuses a deploy onto a degraded environment. Second, every step is verifiable: status before and after, a deployment id, log evidence in the report. An agent that cannot show its work cannot be trusted at 2 a.m. Third, validate the recipe against your installed Goose version's schema before relying on it — the format is stable, but a runbook deserves the same CI check as the code it ships.
What your MCP surface must expose first
Goose can only be as reliable as the tools it calls. Before any agent — Goose, vendor CLI, or otherwise — deploys through your MCP server, the surface needs six properties. Treat this as the readiness checklist:
- Structured deploy status.
app.statusreturns machine-readable rollout state (live ref, desired ref, per-node health), not a prose blob. The agent branches on it; prose is for humans. - Idempotent deploy and rollback. Replaying
app.deploywith the same ref and idempotency key converges instead of duplicating. Agents retry; the server must make retries safe. - Pageable logs.
logs.tailtakes a deployment id plus cursor/limit so the agent pages through evidence instead of drowning in one unbounded dump. - Scoped credentials per action. The token behind
app.statuscannot callapp.deploy. Least privilege is what lets you hand the read tools to every agent and the write tools to a gated few. - Errors the agent can branch on. Typed error codes (
ENV_DEGRADED,REF_UNKNOWN,ROLLOUT_TIMEOUT) beat free-text messages. The recipe's gates are only as good as the signals they read. - A dry-run path. A
planmode (or a staging environment with identical gates) lets teams rehearse the recipe — and lets CI execute it against staging on every recipe change — before production ever sees it.
Items 1–3 are what "operate from chat" concretely requires of the build system; 4–6 are what keep it safe once it works. If your MCP server has the first three but not the last three, you have a demo, not a deployment path.
The platform play
Zoom out, and the AAIF donations sketch a division of labor for the next few years of agent infrastructure. The foundations own the protocols and the reference agent; vendors compete on models, harnesses, and managed surfaces; platforms like yours own the governed tools in the middle — the deploy, rollback, and status endpoints where "the agent asked" becomes "the fleet did." That middle layer is the only one that cannot be commoditized away, because it is where your fleet's actual authority lives.
So the concrete playbook: ship a spec-first MCP surface that satisfies the six-item checklist, certify it against Goose as the neutral reference client with versioned recipes in the repo, and treat every vendor CLI as an adapter to that surface rather than the surface itself. When the next harness launches — and there will be a next one — your deploy path keeps working, because it was never about the harness. It was about the tools.
Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. A spec-first MCP surface for deploy and rollback is exactly the kind of governed tool layer agents need, and it is the direction bex is heading. Star the repo on GitHub or deploy your first app today.



