From install to first tool call.

Install Controller, start the service group, connect a supported source, and run the first catalog tool through MCP.

Before you start

Use Bun 1.3 or newer. The monorepo starts the public site, web console, and API/MCP service together from the repository root.

  • * Run commands from the repository root.
  • * Keep ports 5173, 5174, and 4788 available.
  • * Loopback development starts without API authentication unless you explicitly enable it.

First call in four steps

01

Start Controller

Install the workspace and start the complete development group.

02

Connect a source

Add OpenAPI, GraphQL, or a remote MCP server in the console.

03

Name the connection

Select the upstream endpoint and credentials for an account or environment.

04

Point an agent at MCP

Connect the client to the workspace endpoint and search the resulting catalog.

bun install
bun run dev
Development surfaceAddress
Public sitehttp://localhost:5174
Web consolehttp://localhost:5173
API and MCPhttp://localhost:4788

Connect the client

Start with Streamable HTTP. Point the client directly at Controller's workspace endpoint.

{
  "mcpServers": {
    "controller": {
      "url": "http://localhost:4788/orgs/org_0123456789abcdef0123456789abcdef/mcp"
    }
  }
}

When authentication is enabled, use a scoped API key with execute permission. For stdio-only clients, the bundled CLI bridge provides the same gateway contract. The MCP guide covers both transports and approval resumption.

Search, describe, call

Use code mode to discover only the schema you need and invoke the selected tool through its catalog path.

const { items } = await tools.search({ query: "look up an issue" })
const path = items[0]?.path
const schema = await tools.describe.tool({ path })
const result = await tools[path]({ issue_number: 42 })
return { schema, result }
  • * Search the catalog before loading a complete schema.
  • * Describe the selected path before constructing its input.
  • * If policy pauses the call, approve it and resume the same checkpoint instead of starting the program again.