Connector
Axis connector documentation
Catalog 1.6.0 · MCP protocol 2025-06-18 · Generated from the public tool catalog
What Axis is
Axis is a personal life-management app. You keep your tasks, projects, notes, calendar, habits, goals, journal, health and fitness logs, and personal finances in one account at axisproductivityapp.com.
The Axis connector is a remote Model Context Protocol (MCP) server. It lets an AI assistant such as Claude, ChatGPT or Grok Bot read and update your own Axis account, but only in the areas you approve when you connect. Anything the assistant creates or changes shows up in Axis right away, just as if you had done it yourself in the app.
| |
| Server URL | https://axisproductivityapp.com/mcp |
| Transport | Streamable HTTP |
| MCP protocol version | 2025-06-18 |
| Authentication | OAuth 2.1: authorization code + PKCE (S256), with dynamic client registration |
| Tools | 147 (47 read-only, 100 write, 58 of the writes marked destructive) |
| Catalog version | 1.6.0 |
Before you start: you need an Axis account. You can sign up at axisproductivityapp.com with email, Google, or Apple. The connector only ever acts on the account you sign in with.
What the connector cannot do, by design:
- It cannot open your password vault. The vault is encrypted on your device, and no connector scope covers it.
- It cannot see, message or nudge habit partners, and it cannot reach any other person’s account.
- It cannot move money, make payments or transfers, or touch your bank login. Bank connections stay with Plaid, and finance tools only read and edit the records saved in Axis.
- It cannot rename or delete your life domains (
list_domains is read-only), and it does not run Axis’s internal payroll, accounting or scheduled jobs.
- It cannot create repeating calendar events. Make the event once, then set up the repeat in the app.
- It cannot edit Google Calendar events. Those come back marked read-only, with a link to open them in Google.
How to connect
Claude
- From the directory (once Axis is listed): open Settings → Connectors, find Axis, and choose Connect.
- As a custom connector (works today): open Settings → Connectors → Add custom connector, name it
Axis, and enter https://axisproductivityapp.com/mcp as the URL. Then choose Connect.
Claude opens Axis in your browser. Sign in, pick your scopes on the consent screen, and approve. Claude asks before it runs any tool marked destructive.
ChatGPT
- From the directory (once Axis is listed): open the plugin/app directory, search for Axis, and choose Connect.
- Before listing: with developer mode enabled, add a custom MCP connector that uses the URL
https://axisproductivityapp.com/mcp and OAuth authentication.
ChatGPT registers itself with Axis automatically, so you don’t need a client ID or secret. Then it sends you to the Axis sign-in and consent screen. Each connector id has its own callback address; registration stores that exact address.
Grok Bot
Install the Axis plugin from the Grok Bot marketplace and connect the axis server. Grok Bot opens Axis so you can sign in and choose your scopes.
Any other MCP client
Point the client at https://axisproductivityapp.com/mcp using streamable HTTP. Any client that supports MCP authorization (protected-resource metadata, dynamic client registration, PKCE) can connect without extra setup. Here is a typical config:
{
"mcpServers": {
"axis": { "type": "http", "url": "https://axisproductivityapp.com/mcp" }
}
}
How sign-in works (OAuth)
- Discovery. A call without a token returns
401 with a WWW-Authenticate challenge. The challenge points to the protected-resource metadata at https://axisproductivityapp.com/.well-known/oauth-protected-resource/mcp, which names https://axisproductivityapp.com as the authorization server. Its metadata lives at /.well-known/oauth-authorization-server.
- Client registration. The assistant registers itself at
POST /oauth/register (RFC 7591 dynamic client registration). It registers as a public client (token_endpoint_auth_method: none), so no client secret is ever issued or stored in a package.
- Authorization. The assistant opens
/oauth/authorize with PKCE (S256 is the only method accepted). You sign in to Axis, review the scopes it asked for, untick any you don’t want, and approve.
- Tokens. The assistant trades the code at
/oauth/token. It gets an access token (prefix axis_ct_) and a refresh token (prefix axis_rt_). Supported grants: authorization_code and refresh_token.
- Calls. Every MCP request carries
Authorization: Bearer axis_ct_…. These tokens work only at /mcp. They aren’t a login to the Axis app or the rest of the Axis API.
- Revoking access. Open Settings → Agent access in Axis and revoke the connection. Both the access and refresh tokens stop working immediately. You can also delete your whole account from Settings → Account.
Data access and scopes
Read and write are separate for every area. If a tool needs a scope you didn’t grant, it returns an “insufficient scope” error rather than any data. To change what you granted, disconnect and reconnect, then choose again on the consent screen.
| Scope | Lets the assistant |
tasks:read | List and find tasks. Also unlocks the account-wide search and changes_since (both return only the areas you granted) |
tasks:write | Create, edit, complete and trash tasks |
projects:read / projects:write | Read / change projects, project board cards and milestones |
notes:read / notes:write | Read / change Library pages, databases, attachments (read only), comments, revisions and Workspace pages |
calendar:read / calendar:write | Read Axis events, selected Google Calendar events and classes / change Axis events and classes (Google events stay read-only) |
routines:read / routines:write | Read / change and check off habits |
goals:read / goals:write | Read / change goals |
checkin:read / checkin:write | Read / add “Where I’m At” check-ins |
journal:read / journal:write | Read / write daily journal entries |
people:read / people:write | Read / change your people list and log interactions |
dates:read / dates:write | Read / change your date log and date wishlist |
health:read / health:write | Read / log workouts, body and health metrics (weight, sleep, resting heart rate and so on), activities and run routes |
finance:read / finance:write | Read balances, transactions, saved finance records, spend bonuses and card benefits / edit saved finance records. Never moves money. Not pre-selected |
library:read / library:write | Read / change books, movies and the content pipeline. This is separate from Library notes, which use notes:* |
brainstorm:read / brainstorm:write | Read / change mind maps |
ops:read / ops:write | Read / change areas of responsibility, retainers and their checklists, inventory, reminders and saved filters |
domains:read | Read your life domains (there is no write scope for domains) |
webhooks:read | List webhooks registered for this connection |
webhooks:write | Register and remove webhooks that send account changes to a URL you choose. A connection that already has write can still list |
If the assistant doesn’t ask for specific scopes, the consent screen pre-selects tasks:read, tasks:write, projects:read and notes:read. Finance and health are never pre-selected.
Where your data goes. Tool results go only to the assistant you connected. Axis doesn’t use your data to train models and doesn’t sell it. What the assistant does with your conversation is covered by that product’s own terms. Axis keeps an audit log of every connector call, whether it was allowed, denied or failed. For full details, see the Privacy Policy, section 5a.
Tool overview
Every tool has a title and explicit readOnlyHint, destructiveHint and openWorldHint annotations. The tables below are generated from catalog 1.6.0.
- Read tools never change anything.
- Write tools add something new (create, log, append, comment).
- Write, destructive tools edit, overwrite, complete, cancel or delete. Claude and ChatGPT ask you to confirm these.
- Most Axis deletes are soft deletes: the item moves to Settings → Trash and can be restored. The exceptions are noted in the tables.
register_webhook is the only open-world tool, because it sends data to a URL you supply.
Conventions for every tool:
- IDs. Results tag records as
[task:id], [library:id], [routine:id] and so on. Use those IDs on the next call. Tasks also have a permanent short number (#123), which find_task_by_number resolves.
- Structured output. Every tool declares an
outputSchema and returns structuredContent.
- Safe retries. Every write accepts an optional
idempotency_key (64 characters or fewer). Repeating a call with the same key within 24 hours returns the original result instead of acting twice.
- Concurrency. Some edits, such as finance records, spend bonuses, card benefits and workspace blocks, need the
updated_at or revision you last read. They’re refused if the record changed since then.
- Time zones. Tools that work with dates take an optional
tz (an IANA name such as America/Chicago). Without it they use the time zone saved in Axis Settings, or America/New_York if none is saved.
Tasks
| Tool | What it does | Type | Scope |
list_tasks | List tasks | Read | tasks:read |
find_task_by_number | Find task by number | Read | tasks:read |
create_task | Create task | Write | tasks:write |
update_task | Update task | Write, destructive | tasks:write |
complete_task | Complete task | Write, destructive | tasks:write |
delete_task | Delete task | Write, destructive | tasks:write |
list_domains | List domains | Read | domains:read |
list_saved_filters | List saved filters | Read | ops:read |
Projects, boards and milestones
| Tool | What it does | Type | Scope |
list_projects | List projects | Read | projects:read |
create_project | Create project | Write | projects:write |
update_project | Update project | Write, destructive | projects:write |
delete_project | Delete project | Write, destructive | projects:write |
list_project_tasks | List project tasks | Read | projects:read |
create_project_task | Create project task | Write | projects:write |
update_project_task | Update project task | Write, destructive | projects:write |
list_milestones | List milestones | Read | projects:read |
create_milestone | Create milestone | Write | projects:write |
update_milestone | Update milestone | Write, destructive | projects:write |
Notes, Library databases and comments
| Tool | What it does | Type | Scope |
search_notes | Search notes | Read | notes:read |
list_notes | List notes | Read | notes:read |
get_note | Get note | Read | notes:read |
read_attachment | Read attachment | Read | notes:read |
list_note_revisions | List note revisions | Read | notes:read |
create_note | Create note | Write | notes:write |
update_note | Update note | Write, destructive (body replaces the whole page) | notes:write |
add_chart | Add chart | Write | notes:write |
add_map | Add map | Write | notes:write |
duplicate_note | Duplicate note | Write | notes:write |
delete_note | Delete note | Write, destructive | notes:write |
query_database | Query database | Read | notes:read |
create_database | Create database | Write | notes:write |
update_database | Update database | Write, destructive | notes:write |
list_comments | List comments | Read | notes:read |
add_comment | Add comment | Write | notes:write |
resolve_comment | Resolve comment | Write, destructive | notes:write |
Workspace pages
| Tool | What it does | Type | Scope |
list_workspace_pages | List workspace pages | Read | notes:read |
list_workspace_blocks | List workspace blocks | Read | notes:read |
create_workspace_block | Create workspace block | Write | notes:write |
update_workspace_block | Update workspace block | Write, destructive | notes:write |
Calendar and classes
| Tool | What it does | Type | Scope |
list_events | List events | Read | calendar:read |
create_event | Create event | Write | calendar:write |
update_event | Update event | Write, destructive | calendar:write |
delete_event | Delete event | Write, destructive | calendar:write |
list_classes | List classes | Read | calendar:read |
create_class | Create class | Write | calendar:write |
update_class | Update class | Write, destructive | calendar:write |
delete_class | Delete class | Write, destructive | calendar:write |
Reminders
| Tool | What it does | Type | Scope |
list_reminders | List reminders | Read | ops:read |
create_reminder | Create reminder | Write | ops:write |
cancel_reminder | Cancel reminder | Write, destructive (removes the reminder outright (no Trash)) | ops:write |
Habits (routines)
| Tool | What it does | Type | Scope |
list_routines | List routines | Read | routines:read |
create_routine | Create routine | Write | routines:write |
update_routine | Update routine | Write, destructive | routines:write |
complete_routine | Complete routine | Write, destructive | routines:write |
delete_routine | Delete routine | Write, destructive | routines:write |
Goals and check-ins
| Tool | What it does | Type | Scope |
list_goals | List goals | Read | goals:read |
create_goal | Create goal | Write | goals:write |
update_goal | Update goal | Write, destructive | goals:write |
delete_goal | Delete goal | Write, destructive | goals:write |
list_checkins | List checkins | Read | checkin:read |
log_checkin | Log checkin | Write | checkin:write |
Journal
| Tool | What it does | Type | Scope |
get_journal | Get journal | Read | journal:read |
write_journal | Write journal | Write, destructive (mode "replace" overwrites the day’s entry) | journal:write |
People and dates
| Tool | What it does | Type | Scope |
list_people | List people | Read | people:read |
create_person | Create person | Write | people:write |
update_person | Update person | Write, destructive | people:write |
delete_person | Delete person | Write, destructive | people:write |
log_interaction | Log interaction | Write | people:write |
list_dates | List dates | Read | dates:read |
create_date | Create date | Write | dates:write |
update_date | Update date | Write, destructive | dates:write |
delete_date | Delete date | Write, destructive | dates:write |
Health and fitness
| Tool | What it does | Type | Scope |
list_workouts | List workouts | Read | health:read |
log_workout | Log workout | Write | health:write |
list_metrics | List metrics | Read | health:read |
log_metric | Log metric | Write | health:write |
list_activities | List activities | Read | health:read |
log_activity | Log activity | Write | health:write |
list_run_routes | List run routes | Read | health:read |
update_run_route | Update run route | Write, destructive | health:write |
Finance
Each saved finance record has its own tool. These tools edit records stored in Axis. They do not move money.
| Tool | What it does | Type | Scope |
list_accounts | List accounts | Read | finance:read |
list_transactions | List transactions | Read | finance:read |
list_finance_records | List finance records | Read | finance:read |
create_manual_account | Create manual account | Write | finance:write |
update_manual_account | Update manual account | Write, destructive | finance:write |
create_manual_transaction | Create manual transaction | Write | finance:write |
update_manual_transaction | Update manual transaction | Write, destructive | finance:write |
update_bank_transaction | Update bank transaction | Write, destructive | finance:write |
create_budget | Create budget | Write | finance:write |
update_budget | Update budget | Write, destructive | finance:write |
create_savings_goal | Create savings goal | Write | finance:write |
update_savings_goal | Update savings goal | Write, destructive | finance:write |
create_finance_category | Create finance category | Write | finance:write |
update_finance_category | Update finance category | Write, destructive | finance:write |
create_finance_rule | Create finance rule | Write | finance:write |
update_finance_rule | Update finance rule | Write, destructive | finance:write |
create_credit_card | Create credit card | Write | finance:write |
update_credit_card | Update credit card | Write, destructive | finance:write |
create_card_benefit | Create card benefit | Write | finance:write |
update_card_benefit | Update card benefit | Write, destructive | finance:write |
create_card_reward | Create card reward | Write | finance:write |
update_card_reward | Update card reward | Write, destructive | finance:write |
create_recurring_override | Create recurring override | Write | finance:write |
update_recurring_override | Update recurring override | Write, destructive | finance:write |
list_spend_bonuses | List spend bonuses | Read | finance:read |
get_spend_bonus_progress | Get spend bonus progress | Read | finance:read |
create_spend_bonus | Create spend bonus | Write | finance:write |
update_spend_bonus | Update spend bonus | Write, destructive | finance:write |
delete_spend_bonus | Delete spend bonus | Write, destructive (permanent delete) | finance:write |
list_card_benefits | List card benefits | Read | finance:read |
set_card_benefit_usage | Set card benefit usage | Write, destructive | finance:write |
Books, movies and content
| Tool | What it does | Type | Scope |
list_books | List books | Read | library:read |
create_book | Create book | Write | library:write |
update_book | Update book | Write, destructive | library:write |
delete_book | Delete book | Write, destructive | library:write |
list_movies | List movies | Read | library:read |
create_movie | Create movie | Write | library:write |
update_movie | Update movie | Write, destructive | library:write |
delete_movie | Delete movie | Write, destructive | library:write |
list_content_items | List content items | Read | library:read |
create_content_item | Create content item | Write | library:write |
update_content_item | Update content item | Write, destructive | library:write |
delete_content_item | Delete content item | Write, destructive | library:write |
Brainstorms (mind maps)
| Tool | What it does | Type | Scope |
list_brainstorms | List brainstorms | Read | brainstorm:read |
get_brainstorm | Get brainstorm | Read | brainstorm:read |
create_brainstorm | Create brainstorm | Write | brainstorm:write |
update_brainstorm | Update brainstorm | Write, destructive | brainstorm:write |
delete_brainstorm | Delete brainstorm | Write, destructive | brainstorm:write |
Areas, retainers and inventory
| Tool | What it does | Type | Scope |
list_areas | List areas | Read | ops:read |
create_area | Create area | Write | ops:write |
update_area | Update area | Write, destructive | ops:write |
delete_area | Delete area | Write, destructive | ops:write |
list_retainers | List retainers | Read | ops:read |
create_retainer | Create retainer | Write | ops:write |
update_retainer | Update retainer | Write, destructive | ops:write |
delete_retainer | Delete retainer | Write, destructive | ops:write |
list_retainer_tasks | List retainer tasks | Read | ops:read |
complete_retainer_task | Complete retainer task | Write, destructive | ops:write |
list_inventory_items | List inventory items | Read | ops:read |
create_inventory_item | Create inventory item | Write | ops:write |
update_inventory_item | Update inventory item | Write, destructive | ops:write |
delete_inventory_item | Delete inventory item | Write, destructive | ops:write |
Account-wide search, sync and webhooks
| Tool | What it does | Type | Scope |
search | Search | Read | tasks:read |
changes_since | Changes since | Read | tasks:read |
register_webhook | Register webhook | Write, open-world | webhooks:write |
list_webhooks | List webhooks | Read | webhooks:read |
delete_webhook | Delete webhook | Write, destructive (removes the webhook; deliveries stop) | webhooks:write |
Example prompts
- “What’s on my plate today? Include overdue tasks and today’s calendar.”
- “Add a task to renew my passport next Friday, high priority, in my Personal domain.”
- “Find my notes about the kitchen remodel and summarize the budget.”
- “Move ‘Order countertops’ to Done on the Kitchen Remodel board.”
- “Check off my ‘Read 20 pages’ habit for today and tell me my streak.”
- “How has my weight changed over the last 30 days?”
- “Log today’s workout: bench press 3×8 at 135 lb, pull-ups 3×10.”
- “Draft a journal entry for today from what I got done.” (appends; it won’t overwrite unless you ask)
- “Who haven’t I followed up with in a while?”
- “Am I on track to hit the spend bonus on my travel card?” (needs
finance:read)
- “Make a Library page comparing the three gyms I’m considering, with a table.”
Limits
| Limit | Value |
| Tool calls | 1,000 per token per day |
| Write calls | 200 per token per day |
| Daily reset | Midnight UTC (8 PM Eastern during daylight time, 7 PM in winter) |
New OAuth client registrations (/oauth/register) | 20 per hour per IP address, with a 20,000-per-day ceiling across all clients. Known Claude and ChatGPT egress addresses get a higher allowance, so directory installs aren’t blocked |
| Over a limit | 429 Too Many Requests with a Retry-After header |
| Result sizes | List tools default to 50 rows. Caps vary by tool (for example, 200 tasks or 500 database rows), and each tool’s input schema states its cap |
changes_since | Up to 100 changes per area per call. Pass the returned cursor to continue |
Troubleshooting
| Symptom | What to do |
401 Unauthorized / “Send a connector access token” | The assistant isn’t signed in, or its token expired and couldn’t be refreshed. Reconnect Axis in the assistant. Tokens look like axis_ct_… (access) and axis_rt_… (refresh) |
| A tool says the scope isn’t granted | You left that area unticked on the consent screen. Disconnect, reconnect, and tick it |
| Connecting fails right after you approve | Make sure you approved in the same browser where you started. Retry once. If you see 429, wait for the Retry-After time |
| “Token refused” after using Axis elsewhere | Connector tokens work only at https://axisproductivityapp.com/mcp. They aren’t accepted by other Axis endpoints, and app logins aren’t accepted here |
| A connection stopped working | Check Settings → Agent access. If it was revoked there, connect again |
| A write was refused as stale or conflicting | The record changed since the assistant last read it. Ask the assistant to read it again and retry |
| Calendar looks incomplete | list_events reports google_status. If it says unavailable, not_connected or partial, reconnect Google Calendar from Settings → Integration health in Axis |
| Something was deleted by mistake | Most deletes are soft. Restore the item from Settings → Trash in Axis |
| Daily limit reached | Limits reset at midnight UTC |
Still stuck? Email the address on the Support page. Tell us which assistant you used, what you asked, and roughly when (with your time zone).
Links