Skip to the page
← All docs

Your AI client

The agent is an MCP server that Claude Desktop, Claude Code and Cursor start on your machine.

  • slate mcp --install claude-desktop (or claude-code, or cursor) adds the one entry that client needs. It shows the file and the entry first and asks; the entry holds no secret. Restart the client afterwards.
  • The client is offered the tools you have a connection for and your role may use. Each call is decided on the agent with your role and the workspace's rules, before it runs.
  • A result goes from the agent to the client on the same machine and nowhere else. It arrives fenced, naming the tool and the connection it came from, so the model reads it as data and never as instructions, and secrets in it are masked first.
  • A denial is an answer too: the reason, in a sentence, which the model can tell you.
  • Every call leaves a row in the agent's own audit: slate audit lists today's.

Through your workspace instead. An AI client that is not on the agent's machine reaches it through the service's gateway, the workspace's address followed by /mcp:

1. Run slate serve on a machine in your network that holds the connections (Agents shows it online). 2. For claude.ai or Claude Desktop, sign in instead of making a token: Connect claude.ai says how. For Claude Code, make an API token in Settings. The dialog that shows it once also shows the line for Claude Code, address and token filled in: claude mcp add --transport http <name> <address>/mcp --header "Authorization: Bearer osl_…". 3. Ask as you would ask the agent's own server.

The gateway offers the tools your workspace has a connection for and your role may use (a tool that writes also needs a token made with May also write, or an app let in with Let it act), and each description names the connections it can be called with, their tiers, and the rules that give a namespace or database a tier of its own. Name one in connection or source when there are several. Every call is decided twice with your role: at the gateway, so a denial costs nothing and is answered at once, and again on the agent, which never does more than the member who paired it may. The result comes back fenced and masked by the agent, passes through the service on its way to the client, and is never kept there. Each call leaves one row in the workspace's audit: who asked, the tool, the connection, the tier, the decision and how it went, with the arguments masked, never the result. An agent that is not connected, a call past its deadline and a denial are each an answer the model can read.

Ask it what you would ask a colleague at the terminal: why a deployment is not ready, what changed in the last rollout, the last lines a crashing pod printed.