Skip to main content

Where tools come from

A connector is an outside API your deployment brings, under one credential you hold. vendo sync reads your own 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.

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 — openapi_ledger_getAccount. Path, query, and body parameters 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, and the guard asks about every ungraded call. Grade them by name:
.vendo/overrides.json

An MCP server

mcpConnector speaks streamable HTTP to any MCP server and lists its tools at boot.
app/api/vendo/[...vendo]/route.ts
Tools are named mcp_<name>_<tool>. Risk comes off the server’s own annotations: destructiveHint is destructive, readOnlyHint is read, 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.
The resolver receives principal, presence (present or away), and grant when the guard decided the call against a standing permission.
Hand back a service-level credential when principal is undefined, never a specific user’s. mcpConnector also resolves headers when it lists a server’s tools, and that listing is a system operation with no principal.
An MCP connector with a resolver keeps one protocol session per subject, so a server that binds auth to the session can never mix two users up.

Which credential runs the call