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
| Code | HTTP | Meaning |
|---|---|---|
| unauthorized | 401 | Missing, invalid, expired or revoked token |
| insufficient_scope | 403 | A read-only token called a write tool or tried to reject a proposal |
| forbidden | 403 | The token's user may not do this |
| tool_not_found | 404 | No tool with that name |
| invalid_arguments | 400 | The arguments do not match the tool's schema |
| action_not_found | 404 | No such proposal in this business |
| conflict | 409 | The proposal is no longer pending |
| rate_limited | 429 | Too many requests; see the Retry-After header |
| tool_failed | 500 | The tool raised an error |
| server_error | 500 | Unexpected failure; safe to retry |
Next: the tool reference, or the overview for proposals, scopes and revoking.