Quickstart

From nothing to a first tool call in a few minutes.

1. Create an access token

Sign in to Atriam, open Settings, Access tokens, and choose New token. Give it a label, pick read or read + write, and optionally set an expiry. Copy the token now: Atriam shows it once and stores only a hash. Any member can create their own tokens, up to 10 active at a time.

export ATRIAM_TOKEN=atr_pat_...

2. Call the HTTP API

Every route takes Authorization: Bearer $ATRIAM_TOKEN and answers JSON. Errors look like {"error":{"code","message"}}.

# What can this token do? Returns { workspace, scopes, tools }.
curl -s https://atriam.ai/api/v1/tools \
  -H "Authorization: Bearer $ATRIAM_TOKEN"

# Call a tool. The body is the tool's arguments; {} when it takes none.
# Returns { result }.
curl -s -X POST https://atriam.ai/api/v1/tools/list_projects \
  -H "Authorization: Bearer $ATRIAM_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}'

curl -s -X POST https://atriam.ai/api/v1/tools/get_project_status \
  -H "Authorization: Bearer $ATRIAM_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"projectId": 42}'

# Proposals waiting for a person. status: pending (default), approved,
# rejected, executed or failed. Returns { actions }.
curl -s "https://atriam.ai/api/v1/actions?status=pending" \
  -H "Authorization: Bearer $ATRIAM_TOKEN"

# Reject a pending proposal. Approving happens inside Atriam.
curl -s -X DELETE https://atriam.ai/api/v1/actions/<id> \
  -H "Authorization: Bearer $ATRIAM_TOKEN"

A tool result is either {"kind":"data", ...} or, for a change that needs a person, {"kind":"proposal", ...} with a proposalId, the actionType and a summary. The proposal waits in Atriam until someone approves or rejects it.

3. Connect an MCP client

The MCP server is https://atriam.ai/api/mcp (streamable HTTP). With Claude Code:

# Sign in with OAuth (run /mcp inside Claude Code to authorize)
claude mcp add --transport http atriam https://atriam.ai/api/mcp

# Or use the access token
claude mcp add --transport http atriam https://atriam.ai/api/mcp \
  --header "Authorization: Bearer $ATRIAM_TOKEN"

For Claude.ai and ChatGPT, add the URL as a custom connector. For Claude Desktop and Cursor, atriam mcp-config prints the JSON to paste.

4. Use the CLI

curl -fsSL https://atriam.ai/cli/atriam.mjs -o ~/.local/bin/atriam && chmod +x ~/.local/bin/atriam

atriam login                 # paste the token; it is checked, then stored at 0600
atriam whoami
atriam tools                 # every tool, with its scope
atriam describe get_project_status
atriam run list_projects
atriam run get_project_status projectId=42
atriam run add_timeline_note --json '{"projectId":42,"body":"Site walk done"}'
atriam actions               # pending proposals
atriam reject <id>

ATRIAM_TOKEN and ATRIAM_ORIGIN override the stored login, which suits CI. The file is plain JavaScript you can read before you run it, and it sends nothing except requests to your Atriam origin.

Errors

CodeHTTPMeaning
unauthorized401Missing, invalid, expired or revoked token
insufficient_scope403A read-only token called a write tool or tried to reject a proposal
forbidden403The token's user may not do this
tool_not_found404No tool with that name
invalid_arguments400The arguments do not match the tool's schema
action_not_found404No such proposal in this business
conflict409The proposal is no longer pending
rate_limited429Too many requests; see the Retry-After header
tool_failed500The tool raised an error
server_error500Unexpected failure; safe to retry

Next: the tool reference, or the overview for proposals, scopes and revoking.