Needs
vio 1.0.0 or later. Check with vio --version.Browse the connector catalogue
.vio bundle can declare — no sign-in needed. term filters by
name; narrow further with --category <category>, --auth <dcr | pre-registered | none>
or --verified. --json prints the machine-readable form.
vio connectors <id> shows one connector’s detail, including the tool names it exposes —
the first place to look when you need a tool’s exact name (see below).
Declare a connector in agent.vio
A connector is a requires[] entry:
connector is the MCP server URL, auth is oauth or api_key, and tools is the
explicit list of tool names this dependency may call — never a wildcard.
The moment the agent has any skill, requires[].tools stops being what grants a tool.
Each skill’s own allowed-tools frontmatter becomes the only source of what that skill can
call — a space-separated line, not a YAML list:
requires[].tools still has to list every tool the bundle uses (it is what vio validate
checks connector reachability against), but for a 0-skill agent it is also the entire
grant; for an agent with one or more skills, a tool absent from a skill’s allowed-tools
is unavailable to it even if requires lists it. See Use vio with AI coding
agents and the Space’s own VIO-AGENTS.md (vio docs agents) for the
full worked example.
Where the real tool names come from
requires[].tools and allowed-tools both need a tool’s exact name — never a guess, and
never the connector’s id. Work through these in order:
vio connectors <id>— if it lists the connector’s tools, use them exactly as printed.- Your own coding agent’s MCP session, if you have the same service connected there —
it shows tools as
mcp__<server>__<tool>; the part after the server prefix is the exact name. - The provider’s own MCP server documentation.
- Ask a human. Never invent one.
vio connect, run the agent once and check its output or
vio logs to confirm the tool was actually called. allowed-tools also only ever takes
individual tool names: a connector-level reference like atlassian or atlassian__* does
not resolve.
vio connect
If the agent uses connectors that need sign-in (for example Notion or Google Workspace),
authorise them after deploying. vio connect is subcommand-only — there is no
/connect in the shell:
vio connect <deployment id> ./agent.vio. The id can be the full id, a unique prefix of at
least six characters, or the deployment’s exact name.
vio runs each connector’s consent in your browser, one at a time, then pushes all of the
agent’s credentials — connector tokens, the provider key or Tavily key, whichever apply —
to it in one write. Run the same command again to re-authorise. --no-browser prints each
authorisation URL instead of opening it.
vio connect needs something to push. On a bundle with no OAuth connector it refuses with
“This bundle declares no OAuth connectors, so there is nothing to authorise” — unless the
bundle uses web_search, in which case (vio 1.0.1 or later) it skips consent and
pushes the Tavily key on its own.Connectors that need your own OAuth app
Most connectors register themselves. Some — Google Workspace, GitHub, Slack, HubSpot and Asana among them — need an OAuth application you create with the provider. For those,vio connect:
-
Shows the redirect URI first, before it asks for anything:
Add it to your OAuth app, and save the app.
- Asks for the app’s client id and secret. The secret is not echoed. Leave it empty for a public client.
-
Offers to save them, once the authorisation has succeeded:
Save to .vio/.env.connectors? [Y/n]. Saved credentials are read from there on every later run, so you enter them once.
.vio/.env.connectors, named for the app:
.vio/.env.connectors
GOOGLE_ pair. The others use GITHUB_,
SLACK_, HUBSPOT_ or ASANA_, and any other host is named after the host itself —
mcp.example.com reads MCP_EXAMPLE_COM_OAUTH_CLIENT_ID. You can also write the lines
yourself before running vio connect.
Without a terminal to ask on, vio connect can’t prompt: it prints the redirect URI and
stops. Add the two lines to .vio/.env.connectors, then run it again.
Is the agent ready?
vio connect reports what the agent says after the push, not what it hopes:
✔ Connectors authorised — the agent is ready— the agent is serving with nothing pending.✔ Credentials pushed. The agent still reports <state>— the push worked and the agent hasn’t picked the credentials up yet. It lists what is still pending, and reloads them on its next run or within about a minute. Check withvio show <id>.
Before you run it
- For a BYOK agent, have the same provider key you deployed with — in the Space, or the
same
--env-file. The push replaces every credential the agent holds, including its provider key, and a key of the wrong kind is refused before any consent. - A credits agent needs no provider key for
vio connecteither, andvio connectnever pushes one to it — even if a key is set in the Space or the--env-file. - The bundle must be the one you deployed. If its digest differs, nothing happens.
- Cancelling any consent pushes nothing; the agent keeps what it had.
- Port
47219on127.0.0.1must be free while it runs.
Built-in tools on a deployed agent
Three tools need no connector — they need no external MCP server, so nothing goes inrequires[]. They’re granted the same way a connector tool is: by exact name, in a skill’s
allowed-tools.
Unlike a connector’s tools, these three names are fixed — there is nothing to look up in
vio connectors or an MCP session for them. Use web_fetch, current_time and
web_search exactly as written.
Tavily (web_search)
web_search is powered by Tavily, and it always needs your own
Tavily key — on Viorant credits too. Viorant credits pay for the model; they do not pay for
search.
1
Get a key
Sign up at tavily.com and copy your API key — it starts with
tvly-.2
Add it to the Space
Put it in
.vio/.env.connectors:.vio/.env.connectors
3
Deploy
vio deploy reads it and sends it to the agent as a sealed secret — it is never
written into the bundle, and no .vio file ever carries it.-
The agent also has an OAuth connector.
vio connect <deployment id>pushes the whole credentials document on every run, Tavily key included — update.vio/.env.connectorsand runvio connect <deployment id>again. -
Tavily is the agent’s only external dependency. With
vio1.0.1 or later, the same command works: update.vio/.env.connectorsand runvio connect <deployment id>. There is no consent step — it pushes the key and reports whether the agent is ready. If no key is set, it refuses and pushes nothing. Onvio1.0.0,vio connectrefuses a bundle with no OAuth connector, so the only way to add the key there is to stop the agent and deploy again (a new id, URL and run key) — or runvio updatefirst.
vio redeploy never sets or rotates a key: it replaces the running bundle only and does not
read .vio/.env.connectors.
Without a key, every call to web_search fails — the run itself still starts and the
agent still reports ready; only that one tool is unavailable. vio show does not flag the
missing key, so if a search-using agent’s answers show no web results, check
.vio/.env.connectors first.
Next
- Deploy an agent — credits vs BYOK, and calling the deployed agent.
- Manage deployments — list, runs, logs, redeploy and stop.