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
version: "1.0"
service:
name: Sentry
description: Error monitoring for software teams
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
Auth: bearer
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 |
How do I create an MCP server?
usepaso.yaml file, then run usepaso serve. paso generates a standards-compliant MCP server from the declaration. No protocol code to write. Works with any REST API.Can I generate an MCP server from an OpenAPI spec?
usepaso init --from-openapi ./openapi.json to generate a declaration from your spec. Edit it to curate which endpoints agents can access and set permissions. Then usepaso serve.What is the easiest way to make my API work with Claude?
npm install -g usepaso or pip install usepaso), run usepaso init --name "YourAPI", fill in the YAML, and add the MCP server to Claude Desktop's config. The docs have copy-paste snippets.Do I need to know the MCP protocol to use paso?
How is this different from writing an MCP server manually?
What MCP clients does it work with?
Does paso work with Python?
pip install usepaso.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 capabilities agents should never call.