Skip to main content
An agent can use the tools of any MCP server. Declare the server with mcpServer() and put it in the agent’s tools, or in root tools for every agent. FrogBot connects on the agent’s first run and gives the model the server’s tools next to its own. To expose your app’s collections to other MCP clients instead, use the MCP plugin.

Add a server

A local server is a program FrogBot starts and talks to over stdin and stdout:
A remote server is a Streamable HTTP endpoint:
A server in root tools reaches every agent, as root tools do. An agent with inheritTools: false skips it, and an agent server with the same name replaces it.

Server options

Tool names

The model sees each tool as <name>_<tool>, with the server’s description and input schema: Sidekick’s navigate becomes sidekick_navigate. Characters outside [A-Za-z0-9_-] in a tool’s name become _. When an agent already has a tool with that name, its own tool wins and FrogBot logs one warning that the MCP tool is left out. Text results reach the model as text and images as images, so a screenshot is something the model sees. A result the server marks as an error reaches the model as its text. Stored results replay the same way when the chat continues, even if the server is down by then.

Lifecycle

  • First run: FrogBot connects when an agent’s run first needs the server, never at startup, so next build, type generation and jobs start nothing.
  • One connection per agent: each agent gets its own connection to each server and keeps it across runs. Two agents that list one local server start two processes.
  • Each run: FrogBot lists the server’s tools from the open connection, so tools the server adds or removes show up on the next run.
  • Stop: stopping a turn cancels the tool call in flight.
  • Shutdown: frogbot.destroy() and a config reload close every connection and end local processes. A local server still running 2 seconds after SIGTERM gets SIGKILL.
FrogBot sends the plain initialize handshake with the agent’s slug as the client name, and never probes with server/discover.

When a server fails

A server that fails to start, or to list its tools within its timeouts, is left out of that run. FrogBot logs one warning, [frogbot] MCP server '<name>' for agent '<slug>' is unavailable: <reason>, and the run goes on with the agent’s other tools. The next run tries again. A local server that exits while connected fails the call in flight, and FrogBot logs [frogbot] MCP server '<name>' for agent '<slug>' exited (<code or signal>); it starts again on the next run.

Who can use a server

FrogBot doesn’t ask before an MCP tool runs. Whoever may run the agent may use its servers, so list a server only on agents whose access you trust with it:

Sidekick

Sidekick is FrogBot’s Chrome extension. Its MCP server lets an agent drive your browser: open and switch tabs, navigate, read the page, click, fill and take screenshots. It runs where Chrome runs, so use it with a FrogBot running on the same computer.
  1. In Sidekick’s settings, open Connected agents, choose Other, name it, for example FrogBot, and add it.
  2. Sidekick shows the server’s command once. Copy the SIDEKICK_TOKEN from it into FrogBot’s .env.
  3. Add the server to each agent that should use the browser:
Each agent opens its own Sidekick tab group, titled with the pairing’s name and the agent’s slug, for example FrogBot · researcher. Stopping one group stops only that agent. Sidekick never asks before an agent’s action; blocked sites still apply. Restarting FrogBot doesn’t open Chrome: Sidekick’s helper answers the handshake and the tool list from its cache, and wakes Chrome on the first real call.