AbilitiesConnections (MCP)

Connections (MCP)

Harness remembers what you have seen, said and saved. A connection lets another AI tool ask that memory questions, and work on your task board: Claude Code, Codex, OpenCode, Pi, or anything else that speaks MCP.

The memory itself does not move. Your screen history, conversations and saved memories live in your browser, so a memory question is a relay: the request travels to your open Harness session, is answered on your device, and comes back. There is no copy of your screen history on a server to hand over, and memory questions stop working the moment Harness is closed. The task board and files Harness made on its server keep working without it.

If the tool is one of your coding agents, Harness Relay sets all of this up for you.

Setting one up

External-agent connections are a Resident capability.

  1. In Harness, open Settings → Tools & connections → Agents and find apps that call harness. Give the app a name you will recognize later, pick what it may read, and optionally limit how many hours back it can look.
  2. Choose your tool (Claude Code, OpenCode, Pi, Codex or Muse) and copy what Harness shows you. It has the token inside. The token is shown once, and only a hash of it is kept.
  3. Paste it where Harness says. For Claude Code, that is one line in a terminal:
claude mcp add --scope user --transport http harness https://tryharness.ai/api/mcp --header "Authorization: Bearer <token>"

Any tool that supports remote MCP servers can connect to https://tryharness.ai/api/mcp with the token as a bearer header. Agents that sign in with OAuth instead get board access only; see The agents.

What it can ask

Each connection gets only the scopes you tick:

  • Screen history: search it by meaning, by look, or by exact text; pull up what was on screen at a particular moment and the frames themselves; run a query over screen-history metadata for counting and grouping questions.
  • Tab-audio transcript: what was said in a shared tab.
  • Past chats: summaries and full transcripts of your conversations.
  • Memory: the saved memories about you.
  • Files Harness created: images, videos and documents.
  • Task board: post work for your agents and take work posted for it. Runs on your computer still need your go-ahead.

Live-screen tools stay out. A connection reads history; it cannot look at your screen right now or start watches.

Two consents, not one

Creating a token decides what a connection is allowed to read. Approving it decides that it may reach in at all.

The first time a connection tries to read anything, Harness refuses and shows a chip in the chat window naming it. Nothing is read until you tap Allow there. From that chip you can see what it has been reading, pause it, or cut it off. Revoking the token in Settings ends its access everywhere, immediately.

If a tool reports that Harness is not open, that is exactly the situation: open Harness, keep the tab running, and try again.

The other direction: giving Harness tools

Connections above let other tools read Harness memory. Connected servers are the reverse: you give Harness tools from a remote MCP server (Linear, Notion, your own), and deep turns can call them while answering. Results come back into the chat, screenshots and images included. Connected servers are a Resident feature.

Set one up in Settings → Tools & connections → Skills, under connected servers (MCP). Pick a preset (Linear, Notion, Sentry, GitHub, Gmail, Slack, Stripe, Zapier or Composio) to start from a known server, or enter any streamable HTTP endpoint. There are three ways in, depending on the server:

  • Sign in with OAuth. Works as-is for servers that support automatic client registration (Linear, Notion, Sentry). Leave the token empty, click the button, and approve on the consent page that opens. The row then shows who you are signed in as and what scope was granted.
  • Your own OAuth app. Some providers (Slack) refuse automatic registration. Create an app with the provider, add the callback URL shown under “Advanced: sign in with your own OAuth app” as a redirect URL, and paste the app’s client ID there before signing in.
  • A bearer token or API key. Paste it in the token field and connect. It is kept on this device and never shown again.

For apps whose own MCP servers demand developer setup (Gmail, Slack), the easy route is an aggregator: connect your accounts on Zapier or Composio’s site, then connect that one server here with the preset. No consoles, no app registration. Be clear-eyed about the trade: the aggregator’s servers sit between Harness and your apps, see the requests, and hold those connections on their side. Connecting a provider directly keeps the path to just your device, this server, and them.

Per server, you can limit which of its tools Harness may use. Tools that change data on the server always pause for your approval before running; read-only tools do not. Results from a server are treated as data, never as instructions, and Harness will not send your screen, memory, or conversation content to a server unless you ask for exactly that.

User access and refresh tokens rest in this browser. At the start of a turn Harness borrows a short-lived access credential over the live session and keeps only an in-memory lease until it expires. User-supplied OAuth client secrets may be stored encrypted on the server because the server must complete the OAuth exchange. Work you start can continue on an existing lease after you close the tab; new work waits when no Harness session can supply credentials.

If a sign-in expires or a provider revokes access, the server is parked instead of failing quietly: its row reads “(sign-in required)” and a single Sign in again puts it back.