One paso. Every protocol.
Declare your API's capabilities once.
paso turns them into a live MCP server.
No protocol code to write.
From npm install to a running MCP server in under 5 minutes.
# That's it. Seriously.
$ usepaso init --name "Sentry"
Created usepaso.yaml
$ usepaso serve
usepaso serving "Sentry" (6 capabilities)
# Agents can now access your API via MCP Every new protocol is a bet on someone else's roadmap.
MCP today. A2A next quarter. Three more by the end of the year. Each one means new server code, new testing, new dependencies you didn't ask for. You're not building protocol adapters. You're building a product.
There's a simpler way to think about this.
Or you can keep writing protocol adapters. One for each new standard, forever.
Your service has value.
The protocol layer shouldn't extract it.
Declare what your API can do, once. One YAML file. paso turns that declaration into a live MCP server today, and whatever protocol the industry agrees on tomorrow. You write the declaration. We handle the rest.
The agent economy is coming. Every service will need to participate. We think the terms should be yours, not set by whoever controls the integration layer.
One declaration. Every protocol. Your terms.
Node.js and Python. Claude Desktop and Cursor ready.
Declare
Describe your API's capabilities in a single YAML file. Or generate from your OpenAPI spec.
Validate & Test
paso checks your declaration and lets you test capabilities before going live.
Serve
Start an MCP server. Agents connect. No protocol code to write.
# usepaso.yaml — Sentry example
name: "Sentry"
version: "1.0.0"
base_url: "https://sentry.io/api/0"
auth:
type: "bearer"
capabilities:
- name: "list_issues"
description: "List issues for a project"
method: "GET"
path: "/projects/{org}/{project}/issues/"
permission: "read" $ usepaso inspect
Service: Sentry
Tools: 6
Protocol: MCP
list_issues List issues for a project
get_issue Get issue details by ID
resolve_issue Resolve an issue
list_projects List organization projects
get_event Get event details
search_events Search events by query // Claude Desktop → Settings → MCP Servers
{
"mcpServers": {
"sentry": {
"command": "npx",
"args": ["usepaso", "serve"],
"env": {
"USEPASO_AUTH_TOKEN": "your-sentry-token"
}
}
}
} One Declaration, Working Server
You write YAML describing your API's capabilities. paso handles the MCP protocol, server setup, request routing, auth forwarding, and error handling. No MCP SDK knowledge required.
# Your entire integration
$ usepaso serve
usepaso serving "Stripe" (12 capabilities)
# That's it. No MCP code to write. You Set the Boundaries
Permission tiers: read, write, admin. Consent required for destructive actions. Rate limit constraints. A forbidden list to block what agents should never touch. You declare exactly what agents can and cannot do.
capabilities:
- name: "delete_project"
permission: "admin"
consent_required: true
constraints:
rate_limit: 100
max_items: 50
forbidden:
- "DELETE /org/{org}" OpenAPI to Agent-Ready in Minutes
Already have an OpenAPI spec? Generate your declaration from it. Edit to curate which endpoints agents can access. Serve. Done.
$ usepaso init --from-openapi ./openapi.json
Generated usepaso.yaml (23 capabilities)
# Edit to curate, then serve
$ usepaso serve
usepaso serving "MyAPI" (12 capabilities) What changes when your API is agent-ready.
You write an MCP server. Then an A2A adapter. Then maintain both.
You write a YAML file. paso handles the rest. New protocols require zero code changes.
Agents can call any endpoint. You hope nothing breaks.
Permission tiers, consent gates, and a forbidden list. You control exactly what agents can do.
Protocols come and go. Your declaration stays the same.
| Protocol | Status | What happens |
|---|---|---|
| MCP | Stable | usepaso serve starts a live MCP server |
| A2A | Planned | Coming next |
| More | Future | Declaration format is designed to be protocol-agnostic |
What protocols does paso support?
Do I need to run a server?
usepaso serve starts an MCP server that AI agents connect to. It proxies requests to your API based on the declaration. The server is the product.How is this different from writing an MCP server manually?
Can I use paso with my existing OpenAPI spec?
usepaso init --from-openapi ./openapi.json generates a declaration from your spec. Edit it to curate which endpoints agents can access and set permissions.Is paso free?
What MCP clients does it work with?
How do I control what agents can do?
consent_required for destructive actions, rate limit constraints, max item limits, and a forbidden list to block endpoints agents should never call.