Skip to content
Guides

Connect a client

Claude Code, claude.ai or any MCP client, at app.aeria.dev/mcp.

aeria’s MCP server is at:

https://app.aeria.dev/mcp

Your client connects by OAuth: aeria asks you to sign in, then asks your consent for one workspace. The client then acts in that workspace only.

  1. Sign in on app.aeria.dev with your email: a code is sent to it. A new address ticks the terms and gets its own workspace.
  2. Add a passkey if you want one: it signs you in in one step next time.
claude mcp add --transport http aeria https://app.aeria.dev/mcp

Claude Code opens your browser for the sign-in and the consent. Then ask it something that calls aeria, for example “who am I on aeria?”: user_whoami answers your email and your workspaces.

Claude Code answers a held call itself: a tool at ask shows its question in Claude Code, and you allow or deny it there.

Add a custom connector with the URL https://app.aeria.dev/mcp, then connect it: the sign-in and the consent open in your browser.

These clients cannot answer a held call themselves: a tool at ask waits on app.aeria.dev/held/<call>, where you allow or deny it. The call stays open meanwhile; when the client stops waiting first, the call stays held and its outcome is an event (event_search).

Any client that speaks MCP over HTTP and OAuth 2.1 connects the same way. aeria knows how long each client waits and whether it can answer a held call; a client it does not know gets the shortest wait and no question of its own.

  • aeria’s instructions, sent when the client connects: what aeria is, the flow, that every code tool names its app and branch, that an ask waits for you.
  • Each tool’s description: what it does, what it refuses, what to call next.
  • Each app’s and artifact’s CLAUDE.md, read like any file: how to change that code.

A long exec (a build, a test run) answers when it is done, within the time your client waits. Past it, the call answers {exec, status: running} with its steps so far and goes on; your agent then calls exec_wait {exec}, which answers when the exec ends.

Each client you allowed is a grant, for one workspace. grant_search lists them. You end one on app.aeria.dev/w/<workspace>/grants: its tokens end with it, and its next call is refused.