01Why this interface
A product MCP can expose more decisions than an agent should make from a flat menu. Armature narrows the choice set: discover the API, compose a bounded TypeScript task, run it in a secure sandbox, and route approved calls back to your MCP.
The win is compositional. Pagination, retries, transforms, and cross-call checks can happen inside one task program instead of being streamed through chat after every tool call.
The agent gets a small interface for discovery and execution, not every product operation as a separate choice.
Lookups, filters, joins, and retries stay in code until the useful result is ready.
The runtime is designed for isolate-style execution: fast startup, low memory, and short-lived runs.
Product credentials stay in server-side bindings, not in the task program an agent writes.
Every operation becomes a decision. Intermediate state moves through context, and recovery happens one call at a time.
The agent composes a typed task program. Armature runs it in a secure sandbox and routes allowed calls.
One task program routes through Armature.
02Inputs
The lowest-friction path is the Armature GitHub App. Install it once, choose the repository and bundled OpenAPI path, and interface builds become automatic from pull request to production. Armature starts from feature parity with the API, then lets you remove capabilities from the agent-facing surface before they ship.
Bundled OpenAPI files work best. If a spec relies on external references, we ask for a bundled artifact so generation is deterministic in GitHub checks and in the hosted runtime.
03Generated surface
From the OpenAPI document, Armature generates an operation map, a typed virtual SDK, searchable documentation, and a runtime wrapper that can safely execute the agent's code against the allowed API surface. The generated interface can match the API at launch, then exclude operations, resources, or whole capability groups that should stay out of the agent path.
// Generated SDK shape
const account = await product.accounts.getAccount({ accountId });
const tickets = await product.support.listTickets({ accountId, status: "open" });
return { account, openTicketCount: tickets.length };
The generated docs explain namespaces, methods, arguments, response shapes, examples, timestamps, pagination, and auth assumptions. The runtime preserves the API's real errors, so agents learn from the behavior they will see in production.
04GitHub app flow
Install the Armature GitHub App, point it at a bundled OpenAPI file, and every PR gets an automated interface preview: parse checks, generation checks, and a surface diff before the hosted MCP updates.
05Why Armature builds it
Armature builds and hosts the interface so teams get a production-ready agent endpoint without owning the runtime work: fast execution, preview and production separation, GitHub automation, and Armature reporting from the start.
Task programs can complete multi-step work inside the secure sandbox, then return a concise result.
GitHub automation keeps interface changes reviewable before they reach the hosted MCP.