Atrix MCP
Your workspace, inside the assistant you already use
One URL connects Atrix to Claude, ChatGPT, Codex, Cursor and anything else that speaks MCP. 85 tools, six ready-made prompts and live resources across your products, work, ideas, pages, calendar and customers — and a credential that can never do more than the person who made it.
Setup
Pick your client. It takes about a minute.
Every one of these signs you in through your browser, so no key is ever pasted into a config file. If you would rather hold a token yourself, each tab says how.
The terminal client. One command adds the server; the first tool call walks you through sign-in in a browser.
What you need: Nothing to paste. Step 2 signs you in and stores a scoped token for you — a bearer token is only for CI, and the note below says how.
- 1
Add the server. No credential goes in this command.
bashclaude mcp add --transport http atrix https://atrix.dev/api/mcp - 2
Run /mcp inside Claude Code and choose Authenticate. A browser opens, you pick the workspace and the scopes, and the token is stored for you.
text/mcp - 3
Check it took.
bashclaude mcp list
A first connection asks only to read (customers, products, work, ideas). Tools that change things are listed as needing additional approval; the first time one is called, Claude Code is told which scope is missing and re-opens the browser to approve exactly that. To widen or change a connection yourself, run /mcp, choose atrix, and Authenticate again. Prefer a token you control? Skip the browser entirely with --header "Authorization: Bearer atx_pat_…".
Add Atrix as a custom connector. There is nothing to install and nothing to paste but the URL — the sign-in happens in the app.
What you need: Nothing to paste but the URL. Claude signs you in and registers itself.
- 1
Open Settings → Connectors → Add custom connector.
- 2
Paste the endpoint and save.
texthttps://atrix.dev/api/mcp - 3
Click Connect. You will be asked which workspace, and which of the scopes below to grant. Approve, and the tools appear in the composer.
Claude registers itself automatically — there is no client ID to create and no secret to store.
Atrix ships the search and fetch tools ChatGPT's connectors and Deep Research require, so your workspace is searchable the same way the web is.
What you need: Nothing to paste but the URL. ChatGPT signs you in when you connect.
- 1
Open Settings → Connectors → Create, and choose an MCP server.
- 2
Paste the endpoint.
texthttps://atrix.dev/api/mcp - 3
Sign in when prompted, and pick the scopes. Deep Research will then search pages, products, ideas and work items, and fetch any result in full.
search matches page bodies, not just titles — which is what you want, given how many pages are called Untitled.
Two commands: one to add the server, one to sign in.
What you need: Nothing in the config file. The second command signs you in; a bearer token is only for CI, as below.
- 1
Add it. No credential goes in this command.
bashcodex mcp add atrix --url https://atrix.dev/api/mcp - 2
Sign in.
bashcodex mcp login atrix - 3
Confirm.
bashcodex mcp list
For CI, where no browser exists: codex mcp add atrix --url … --bearer-token-env-var ATRIX_TOKEN.
Any client that speaks Streamable HTTP works. Most of them take the same JSON.
What you need: Either — OAuth if the client can open a browser, a token if it cannot. Both shapes are below.
- 1
Add Atrix to the client's MCP config — .cursor/mcp.json for Cursor, and the same shape almost everywhere else.
json{ "mcpServers": { "atrix": { "url": "https://atrix.dev/api/mcp" } } } - 2
If the client cannot do OAuth, hand it a token instead.
json{ "mcpServers": { "atrix": { "url": "https://atrix.dev/api/mcp", "headers": { "Authorization": "Bearer atx_pat_…" } } } }
It is an HTTP endpoint speaking JSON-RPC. No SDK required, though the official MCP SDKs work unchanged.
What you need: This is the one that needs a token. Create one in settings, and export it as ATRIX_TOKEN.
- 1
List what your token may call.
bashcurl -s https://atrix.dev/api/mcp \ -H "Authorization: Bearer $ATRIX_TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' - 2
Call one.
bashcurl -s https://atrix.dev/api/mcp \ -H "Authorization: Bearer $ATRIX_TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call", "params":{"name":"search","arguments":{"query":"pricing"}}}'
The transport is stateless, so there is no session to keep alive and no ordering to preserve. Every request stands alone.
Two ways in, for two different situations
Sign in — for anything with a browser
Full OAuth 2.1: dynamic registration so there is no app to create, PKCE on every exchange, refresh tokens, and a consent screen that names the workspace and every scope before you approve it. Revoke it later without changing your password or disturbing anyone else.
RFC 6749 · 7591 · 7636 · 8252 · 8414 · 8707 · 9728 · 7009
An Atrix Token — for scripts, CI and servers
Mint one in settings, tick the scopes, choose 30 days, 90 days, a year or no expiry. It is shown once. It begins atx_pat_ so a leaked one is recognisable in a log or a gist at a glance, and it is stored hashed — we cannot show it to you again, only replace it.
Scopes
Nineteen things you can grant, and nothing implied
No scope quietly includes another. Reading customers does not let you see what a deal is worth; managing the team does not let you read employment records. If it is not ticked, it is not granted.
Read
projects.readRead productswork.readRead workideas.readRead ideasprototypes.readRead prototypespages.readRead pagesfeed.readRead the feedmessages.readRead messagespeople.readRead the teamcrm.readRead customerstime.readRead your own timegoals.readRead goalsroadmap.readRead the roadmap and changelogpulse.readRead Pulse reports and automationsexpenses.readRead your own expensesleave.readRead your own leavepolicies.readRead your policiesask.readAsk questions of the workspaceentities.readRead legal entitiesonboarding.readRead your onboarding checklist
Write
A write scope never implies its read scope, and no scope implies another.
ideas.writeChange ideaswork.writeChange workpages.writeChange pagescrm.writeChange customerstime.writeTrack your own timegoals.writeCheck in on goalsexpenses.writeFile your own expensesleave.writeRequest your own leavepolicies.writeAcknowledge your policiesonboarding.writeTick your own onboarding steps (REST only, the phone app)
Asked for by name
These are never bundled and never implied. Each one is a separate decision on the consent screen, because each reaches something a colleague would mind.
crm.valueSee deal valuesalso needs the “See deal values” permissionpeople.recordsSee employment recordsalso needs the “See employment records” permissionagreements.statusSee who has signedalso needs the “See employment records” permissionagreements.signSign your own documentsfeed.postPost updateshiring.readRead hiringalso needs the “Run hiring” permissionintegrations.readRead integrationsalso needs the “Manage integrations” permissionbilling.readRead billingalso needs the “Manage billing” permissioninvoices.readSee invoices and quotesalso needs the “Manage invoices and quotes” permissioninvoices.writeDraft invoices and quotesalso needs the “Manage invoices and quotes” permissionletters.readRead your own letters and certificates (REST only, the phone app)letters.writeRequest your own letters and certificates (REST only, the phone app)agent.useUse the Atrix Agent (the Atrix app's own sign-in only; it cannot be minted or consented to here)leave.approveDecide your team's leave (the Atrix app's own sign-in only; it cannot be minted or consented to here, and no agent holds it)expenses.approveDecide your team's expenses (the Atrix app's own sign-in only; never marks as paid)letters.manageDecide letter requests and sign them for the company (the Atrix app's own sign-in only; letters that state pay stay on the web)also needs the “Edit employment records” permission
What a token cannot do
The interesting half of an integration like this is not the tool list. It is what happens when the model is wrong, the id is somebody else’s, or the person who minted the key has since changed jobs.
A token can never do more than you can
Scopes narrow; they never widen. The permissions you hold in the workspace are intersected with the scopes on the token, and the result is what the tools see. Grant crm.write to somebody who cannot edit customers and it grants nothing at all — there is no combination of scopes that adds an ability you do not already have.
One workspace, fixed at the token
The workspace is closed over by the credential, not passed as an argument. No tool accepts an organisation id, and every query is scoped in the same statement that fetches — so an id from another workspace matches zero rows rather than matching and being caught afterwards.
Every call is written down
Each call records the tool, the outcome, and what it acted on as a kind and an id — never the contents, and never the caller's IP. You can read the trail, and revoke any token, from workspace settings.
Refusals are sentences
A tool your token cannot call is not offered, and calling it by name anyway returns why in a line a model can act on — not an opaque error it will retry forever.
The surface
85 tools, plus prompts and resources
Your client only ever sees the ones your token can call, so a model is not tempted by a tool it will be refused. Anywhere a tool takes a product, person or issue, a name works as well as an id; list tools page with a cursor; and atrix_whoami tells a model exactly which scope would unlock what it is missing.
Start here
3 toolsatrix_whoami · attention_today · workspace_brief
Find things
2 toolssearch · fetch
Products & work
12 toolsprojects_list · projects_get · project_status · work_list_issues · work_get_issue · work_create_issue · work_update_issue · work_set_issue_status · work_schedule_issue · work_assign_issue · work_comment_issue · work_bulk_update
Ideas
7 toolsideas_list · ideas_create · ideas_update · ideas_set_brief · ideas_set_status · ideas_add_signal · ideas_promote
Pages
5 toolspages_list · pages_get · pages_create · pages_append · pages_replace
Customers
7 toolscrm_list_deals · crm_create_company · crm_create_contact · crm_create_deal · crm_update_deal · crm_move_deal · crm_add_deal_note
Invoices & quotes
3 toolsinvoices_list · invoices_get · invoices_create_draft
The feed
3 toolsfeed_list · feed_post_update · feed_comment
Calendar
9 toolscalendar_list · calendar_event · calendar_people · calendar_find_time · calendar_create · calendar_update · calendar_cancel · calendar_respond · calendar_notes
Your time
4 toolstime_list_mine · time_start_timer · time_stop_timer · time_log
Your leave
4 toolsleave_balances_mine · leave_out_today · leave_request · leave_cancel_mine
Your policies
2 toolspolicies_list_mine · policies_acknowledge
Your expenses
3 toolsexpenses_list_mine · expenses_submit · expenses_delete_draft_mine
Goals, roadmap & changelog
5 toolsgoals_list · goals_get · goals_check_in · roadmap_list · changelog_list
Entities & onboarding
2 toolslegal_entities_list · onboarding_checklist_mine
Pulse & automations
3 toolspulse_reports_list · pulse_report_latest · automations_list
Ask Atrix
1 toolask_workspace
People & the workspace
10 toolsworkspace_overview · people_list · people_find · people_get_record · prototypes_list · messages_list_conversations · hiring_list_roles · integrations_list · billing_overview · agreements_status
Prompts
6 promptsplan_my_day · weekly_review · triage_inbox · project_status_report · prep_for_meeting · draft_update_post
Resources
3 resourcesatrix://workspace/overview · atrix://me/attention · atrix://project/{slug}
Questions people actually ask
Do I need to create an OAuth app or client ID?+
No. Atrix supports dynamic client registration, so Claude, ChatGPT and Codex register themselves the first time they connect. There is nothing to create in advance and no client secret to store anywhere.
When should I use an Atrix Token instead of signing in?+
Use OAuth for anything with a browser — it is the safer path, and the token is scoped, refreshable and revocable without touching your password. Use an Atrix Token for scripts, CI and servers, where nobody is present to approve a consent screen. Tokens start with atx_pat_ so a leaked one is recognisable on sight, and you choose 30 days, 90 days, a year, or no expiry.
Can a token read salaries?+
No. Pay is deliberately outside what any token can be granted: it is not in the list of grantable scopes, and no tool selects a compensation record. Employment records are reachable only with the people.records scope, only by somebody whose own permissions allow it, and only for people they outrank.
What happens if somebody's permissions change after I mint a token?+
The token follows them. Permissions are resolved per call rather than frozen at mint time, so revoking somebody's access to customers immediately stops every token they created from reading customers — you do not have to hunt the tokens down.
Does an agent editing a page interrupt someone typing in it?+
No. Pages are collaborative documents, and an appended block merges into the live document the way another person's typing would. Their cursor does not move, their undo history survives, and nothing either of you wrote is lost.
Which MCP clients are supported?+
Any client that speaks Streamable HTTP, which is all of the current ones. Atrix implements the discovery documents defined by RFC 9728 and RFC 8414, so a well-behaved client finds the authorization server on its own from a single URL.
Point your assistant at it
Start read-only if you like — grant the reads, see what your assistant does with them, and widen it later. Scopes are changed by minting a new token, and revoking is instant.