Concepts

Connections

Sign in to a tool or MCP server once, then name it on any run. Skills and resources come in by URL the same way.

View .md

A connection is a tool the agent can use as you: an MCP server, or a built-in connector such as Google or Slack. You sign in once. After that a run names the connection in connections and the agent gets it, and nothing you did not name.

Connections are personal. They belong to the person who signed in, and a run started with an API key uses the connections of the admin who created the key.

04The agent calls it while it works

You sign inSettings → IntegrationsCONNECTIONan MCP serverid: 6f1c2a9e-…THE RUN"connections": ["6f1c2a9e-…"]POST /o/{org}/sessionsevent: tool_use · the MCP server's tool
Scene. A connection is made once by the person who signs in, then named on the runs that should use it.

Sign in once

In the console, open Settings → Integrations. Or, from the API, POST /me/connections:

{"type": "mcp", "name": "deepwiki", "url": "https://mcp.deepwiki.com/mcp", "auth": {"mode": "none"}}

auth takes one of three modes:

auth.mode For
bearer A server that takes a token: {"mode": "bearer", "token": "…"}.
none A server with no auth. Refused 422 token_rejected if it asks for one.
oauth A server that signs in. The answer is 202 with an authorize_url.

Leave auth out and Rush probes the server: no auth if it answers, sign-in otherwise.

A sign-in finishes in a browser. Open authorize_url while signed in to the console as the same person; a browser with no session, or someone else's, cannot finish it, so a leaked link connects nothing. Until then the connection reads pending; poll GET /me/connections/{id} for connected. A sign-in not finished within 10 minutes fails with connection_expired.

Every connection reads back as {id, type, name, url?, auth: {mode}, status, tools}. A token never comes back. status is connected, pending or needs_reauth (sign in again).

Built-in connectors

  • GitHub is a GitHub App you install in Settings → Integrations → GitHub. It is how a run clones a repository and opens a pull request. GET /o/{org}/github lists the repositories it can reach.
  • Google, Microsoft and Slack connect with {"type": "app", "name": "google"} and the same sign-in. A run can name them. Slack reaches the agent as the slack CLI signed in as you.
  • Linear connects the same way. Rush uses it to read a Linear issue you pass in resources, and to run Linear triggers.

GET /o/{org}/agents/available lists the remote MCP servers in mcp_servers, each with the url to connect.

Name a connection on a run

Each entry in connections takes one of three forms:

{"harness": "claude", "input": "Research the bug and propose a fix.",
 "connections": [
   "6f1c2a9e-3b7d-4e0a-9c55-2d8e1f4a7b30",
   "deepwiki",
   {"url": "https://mcp.exa.ai/mcp", "auth": {"mode": "bearer", "token": "<exa key>"}}
 ]}
  1. An id from GET /me/connections.
  2. A name: what you named an MCP server, or a built-in connector's provider ("google"). Only your own connections match. A name two of them share is 422 CONNECTION_AMBIGUOUS, which lists their ids; send one instead.
  3. An inline MCP server {url, name?, auth?}, for this run and its follow-ups only. It is never saved to /me/connections. The host must resolve to public addresses (422 MCP_SERVER_URL_INVALID), and the token is stored encrypted and never returned.

An id or name that is unknown or still connecting is 422 CONNECTION_NOT_READY. Follow-ups keep all three. A run can name up to 20.

Secrets are not connections. They belong to a Project and reach every session in it; see Projects and secrets.

Skills by URL

skills loads up to 10 skills into the agent, each a public URL: a GitHub tree URL to a directory with SKILL.md, a SKILL.md file, a GitHub repository archive, or a .zip. Rush fetches each when the run is created and pins a GitHub source to its commit. A URL that cannot be fetched is 422 SKILL_FETCH_FAILED; no SKILL.md, or skills past 96 KiB, is 422 SKILL_INVALID.

Resources by URL

resources puts work in front of the agent before it starts, up to 10 entries:

  • https://github.com/<owner>/<repo> clones the repository; …/tree/<branch> at a branch; …/pull/<n> on an open pull request's branch. One repository per run.
  • https://linear.app/<workspace>/issue/<ID> puts the issue in the prompt, read through your Linear connection.

Any other URL is 422 RESOURCE_UNSUPPORTED. A repository no installation of yours covers, or an issue with no Linear connection, is 422 RESOURCE_NOT_ACCESSIBLE.