Where tools come from
vendo sync reads your API. A connector reads someone else’s, at boot, and hands the result to the same registry.
Connector tools are ordinary tools. They collide-check against your own by name, they take corrections in .vendo/overrides.json, and every call goes through the guard.
For per-user OAuth into Gmail, Slack, or GitHub, use connected accounts instead. Connectors here carry one credential you control, not one per user.
Any REST API with a spec
openApiConnector takes the spec document, not a path or a URL — read it, bundle it, or fetch it yourself, then hand it over.
app/api/vendo/[...vendo]/route.ts
Each operation becomes one tool named
openapi_<name>_<operationId> — openapi_ledger_getAccount. Path parameters, query parameters, and the JSON request body come straight off the spec, so the model sees the API’s own declared shape.
Risk comes from the method, never the name: DELETE is destructive, everything else is ungraded until you grade it. An ungraded call is one the guard asks about.
.vendo/overrides.json
This is the same extractor
vendo sync runs over a spec in your repo, and the same HTTP dispatch your own tools execute through. A spec behaves identically whichever door it comes in.An MCP server
mcpConnector speaks streamable HTTP to any MCP server and lists its tools at boot.
app/api/vendo/[...vendo]/route.ts
mcp_<name>_<tool>. Risk is read off the server’s own annotations: destructiveHint is destructive, readOnlyHint is read, and anything else is write.
One credential per user
Pass a function instead of an object and it runs on every call, with the acting principal in hand. Both connectors take the same shape.principal, presence (present or away), and grant when the guard decided the call against a standing permission.
An MCP connector with a resolver also keeps one protocol session per subject, so a server that binds auth to the session can never mix two users up.
Which layer holds the credential
Three separate things can put a credential on a call, and two of them are this page.
The resolver is the per-user path for the connectors on this page:
openApiConnector and mcpConnector both take one, it runs on every call with the acting principal in hand, and what it returns is that call’s headers. So a host can send a different token for every user without a broker in the way.