Bring Your Own AI
Connect ChatGPT, OpenAI Codex, Claude, Cursor, LM Studio, Claude Desktop, and any MCP-compatible AI agent to your PrimeTask workspace - locally, on your terms.
PrimeTask doesn't subscribe you to an AI model. It doesn't lock you into one vendor. Instead, it speaks MCP - the Model Context Protocol - so the AI tool you already use can read and interact with your workspace directly. ChatGPT desktop, OpenAI Codex, Claude Code, Cursor, LM Studio, Claude Desktop, and any other MCP-compatible client can connect.
The server runs on your computer. Your data stays on your computer. You choose what the agent can see, what it can change, which Spaces it can touch, and which tools it can call. Every command is written to an audit log you can review.
For the Integrations category hub, see Integrations Overview. For what the agent can do specifically on PrimeFlow canvases, see PrimeFlow and MCP.
Local only
The MCP server runs on your machine. PrimeTask never sends your data to any server. The AI agent you connect may send data to its own cloud provider (Anthropic, OpenAI, and so on) - only connect agents you trust.
Agents work on the active Space
Tools operate on the currently active Space. Tell the agent to switch Spaces first, or switch in the UI. Space Access settings control which Spaces the agent is allowed to touch.
What you can do
Connect any MCP-compatible AI tool
to PrimeTask.
Let the agent read your workspace
tasks, projects, notes, CRM, canvases, focus sessions, time entries, and more.
Let the agent make changes
create tasks, build projects, run focus sessions, update CRM, build canvases - or keep it read-only.
Scope access per Space
the agent sees only the Spaces you allow.
Choose which tools are exposed
with preset profiles or per-category toggles, so small models aren't overwhelmed.
Review everything
in the audit log.
Disconnect at any time
by toggling the server off.
Quick Start
1. Enable the server
Step 1
Open Settings → External Integrations.
Step 2
Enable the MCP Server.
Step 3
A consent explainer appears. Enable the server after reading it.
Step 4
PrimeTask generates your API key automatically.
2. Connect Your AI Tool
ChatGPT desktop and OpenAI Codex
One setup connects PrimeTask to both normal ChatGPT and Codex conversations in the ChatGPT desktop app.
Step 1
Keep PrimeTask open with the MCP Server enabled.
Step 2
Choose the Read, Write, Space Access, and Tool Catalog permissions you want ChatGPT and Codex to use.
Step 3
Under Quick Setup, click ChatGPT + Codex.
Step 4
In the setup window, copy and run the secure key command. PrimeTask provides Terminal instructions on macOS and PowerShell instructions on Windows.
Step 5
Copy the PrimeTask API key, paste it into the terminal prompt, and confirm it. The key stays hidden while you paste it.
Step 6
Copy and run the Codex registration command.
Step 7
Fully quit and reopen the ChatGPT desktop app.
Step 8
Start a new ChatGPT or Codex conversation and ask it to list the available PrimeTask tools.
Keep the key private
Never paste your PrimeTask MCP API key into a chat message. Use only the secure prompt provided by the Codex setup window.
Desktop app only
This local connection works in both normal ChatGPT and Codex conversations in the ChatGPT desktop app. It does not carry over to other ChatGPT installations.
No Mac restart required
Setup works immediately after you reopen the ChatGPT desktop app. If you restart your Mac later and PrimeTask tools are unavailable, reopen Quick Setup → ChatGPT + Codex and repeat the secure key step before reopening ChatGPT.
Other MCP clients
Streamable HTTP (recommended):
Use the Streamable HTTP option in Quick Setup to copy the config:
{
"primetask": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:24842/mcp",
"--header",
"Authorization:${PRIMETASK_MCP_AUTH}"
],
"env": {
"PRIMETASK_MCP_AUTH": "Bearer pt_mcp_your_key_here"
}
}
}Your key goes in the env section, never in args. Everything in args is visible to other programs running on your computer, so a key placed there is on show; the env section keeps it out of sight. Copy the setup from Quick Setup rather than typing it by hand and this is handled for you.
Merge, don't replace
Your AI tool may already keep its own settings in that same file. Add the PrimeTask entry alongside what is there rather than pasting over the file, or the file will no longer be readable and your tool will not start. If the file is empty, paste the whole thing.
Paste into your AI tool's MCP config file:
- Claude Code:
~/.claude.jsonunderprojects → your-project → mcpServers - Cursor:
~/.cursor/mcp.json - LM Studio: MCP server settings (JSON config)
- Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.jsonundermcpServers
mcp-remote is installed automatically via npx on first use. Requires Node.js.
Stdio (alternative):
Use the Stdio option to copy the config. The AI tool launches PrimeTask as a separate process:
{
"primetask": {
"type": "stdio",
"command": "/Applications/PrimeTask.app/Contents/MacOS/PrimeTask",
"args": ["--mcp-server"]
}
}3. Start Using
Once connected, your AI tool can access your tasks, projects, CRM, and more. Try asking:
- "What are my overdue tasks?"
- "Create a task called Review proposal with high priority"
- "Start a 30-minute focus session on Write documentation"
- "Show me the status of the Website Redesign project"
Security & Permissions
Authentication
Every HTTP request requires a Bearer token. The token is auto-generated when you first enable MCP and shown in Settings - copy it along with the config.
Regenerate the token from Settings when you want to rotate it. Update your AI tool's config with the new token afterwards.
Read / Write Permissions
- Read (on by default) - list, search, and view tasks, projects, CRM data
- Write (off by default) - create, update, delete, complete tasks and other data
Enable write permissions in Settings → MCP Server → Write toggle.
Space Access
Control which spaces AI agents can access:
- All spaces - agent can access any space
- Selected only - choose specific spaces from the checkbox list
Requests targeting a space not in the allowed list are rejected with a clear error.
Audit Logging
Every MCP tool call is logged. View the audit log in Settings → External Integrations → Audit Log. Each entry shows the tool name, parameters, timestamp, and whether it succeeded or was blocked.
Sensitive Field Filtering
PrimeTask automatically strips sensitive fields from all MCP responses: PIN hashes, encryption keys, passwords, secrets, and tokens are never exposed.
The PrimeTask Lock Screen
If you lock PrimeTask, your agent stops with it. Locking the app covers your agent as well as your screen, so a connected AI tool can't keep reading and changing your work while you're away from your desk. It doesn't disconnect while it waits, and it tells you PrimeTask is locked instead of reporting a fault. Unlock and it carries on from where it stopped.
If you'd rather it kept working while you're away, open Settings → Security and turn on the switch for letting AI agents work while locked. It's off unless you turn it on, and PrimeTask explains what it means before it takes effect. See Security Settings.
Feature Gating
Some tools require a Pro licence.
Tool Catalog & Profiles
PrimeTask exposes more than 100 tools, which can be a lot for AI clients with limited context windows. The Tool Catalog in Settings lets you control which tools are available, using either preset profiles or per-category toggles.
Why profiles exist
Some AI tools (like LM Studio or smaller local models) perform better with a focused set of tools rather than the full catalog. Profiles let you expose only the tools relevant to your workflow, reducing noise and improving tool selection accuracy.
Preset Profiles
Select a profile card to instantly configure the tool catalog:
| Profile | What's included | Best for |
|---|---|---|
| Full | Every tool available on your plan | ChatGPT, OpenAI Codex, Claude Code, Cursor, Claude Desktop - clients that handle large tool sets well |
| Core Tasks | Tasks, projects, notes, goals, time, focus, quick notes, reminders, comments, utility | General productivity - no CRM, no canvas, no dependencies |
| Projects | Tasks, projects, notes, goals, milestones, dependencies, team, time, reminders, comments, utility | Project planning workflows |
| PrimeFlow | Tasks, projects, PrimeFlow canvas tools, utility | Canvas-focused work with minimal surrounding context |
| CRM | Projects, CRM (contacts, companies, activities, tasks), team, reminders, utility | Sales and relationship management (Pro) |
| Custom Fields | Tasks, projects, custom field tools, utility | Field management workflows (Pro) |
| Minimal | Tasks, checklist, utility | Lightest catalog for constrained clients |
Profiles marked (Pro) are part of the Pro tier - see License Settings to upgrade.
Per-Category Customisation
Click "Customise categories" below the profiles to expand individual category toggles. Each toggle enables or disables a group of related tools (e.g. "Notes", "Focus", "Time"). Toggling any category manually switches the profile to Full (custom configuration).
Some categories (CRM, Custom Fields, Dependencies, Team) are part of the Pro tier.
Naming your assistant
Below the categories you can set the name your assistant writes under when it comments on a task. It defaults to Agent. A thread that mixes people and an assistant is much easier to read a month later when it says which was which, so pick something you will recognise.
See Task Comments for what it can do in a thread, and what it cannot.
Applying changes
- Streamable HTTP: Profile changes take effect on the next client reconnect - no app restart needed.
- Stdio: The tool list is set at process launch. Changing profiles requires the AI tool to reconnect.
Tools Reference (more than 100 tools)
Changes made through MCP appear in the relevant open PrimeTask views automatically. After a PrimeTask update adds or changes tools, fully quit and reopen PrimeTask, then reconnect your AI tool so it receives the current catalog.
Spaces (4 tools)
| Tool | Description |
|---|---|
list_spaces | List all spaces |
get_active_space | Get the currently active space |
switch_space | Switch the active space |
list_space_members | List members of the active space (for collaborative assignment) |
Tasks (9 tools)
| Tool | Description | Key Parameters |
|---|---|---|
list_tasks | List and filter tasks | project_id, status_id, priority_id, due_before, due_after, tags[], search, limit |
get_task | Get task with subtasks and checklist | task_id |
get_today | Today's tasks and overdue | - |
search_tasks | Full-text search | query, limit |
create_task | Create a new task | name*, project_id, status_id, priority_id, due_date, start_date, duration, tags[], description, assignees[], checklist[], sync_to_calendar, sync_to_reminders |
update_task | Update task fields | task_id*, name, status_id, priority_id, due_date, start_date, duration, description, tags[], assignees[], completion_percentage, project_id, milestone_id, sync_to_calendar, sync_to_reminders |
set_task_recurrence | Set or remove recurring schedule | task_id*, frequency (daily/weekly/monthly/yearly/custom), interval, unit, days_of_week[], end_date |
complete_task | Mark task as complete | task_id* |
delete_task | Delete a task. For recurring tasks, the optional intent parameter controls whether only this occurrence is deleted or the entire recurring series is ended. | task_id*, intent (occurrence_only or this_and_all_following) |
Name resolution: project_id accepts a project name or UUID. assignees accepts display names or member IDs.
Apple Calendar and Reminders (macOS): Ask your agent to add a task to your reminders or your calendar and it can, using sync_to_reminders and sync_to_calendar. Both integrations are set up in Settings and each syncs one space, so your agent checks get_system_info first and tells you if an integration is switched off, or if the task belongs to a different space than the one you sync. Reading a task back afterwards shows whether the reminder or event was actually created. See Apple Reminders and Calendar.
Subtasks & Dependencies (4 tools)
| Tool | Description |
|---|---|
create_subtask | Create a subtask under a parent task |
list_subtasks | List subtasks for a task |
add_dependency | Add a prerequisite dependency (accepts task name or ID) |
remove_dependency | Remove a prerequisite dependency (accepts task name or ID) |
Checklist (3 tools)
| Tool | Description | Key Parameters |
|---|---|---|
update_checklist_item | Complete, uncomplete, or rename a checklist item | task_id* (name or ID), item* (text or index), completed, text |
add_checklist_item | Add a new item to a task's checklist | task_id* (name or ID), text* |
remove_checklist_item | Remove an item from a task's checklist | task_id* (name or ID), item* (text or index) |
Projects (8 tools)
| Tool | Description | Key Parameters |
|---|---|---|
list_projects | List projects (filter by status) | status |
get_project | Get project details with task count, progress, and health | project_id* |
create_project | Create a new project | name*, color, description, status, deadline, start_date, crm_enabled, crm_mode |
update_project | Update project fields | project_id* (name or ID), name, description, color, status, deadline, start_date, crm_enabled, crm_mode |
archive_project | Archive a project | project_id* (name or ID) |
unarchive_project | Unarchive a project | project_id* (name or ID) |
get_project_stats | Comprehensive progress breakdown with weighted metrics | project_id* (name or ID) |
get_project_health | Health status, trend, recommendations, overdue count, next milestone | project_id* (name or ID) |
get_project_stats returns: weighted progress across tasks/milestones/goals/CRM, per-bucket breakdown (progress, count, completed), overdue count, status/priority distribution, and project timeline.
get_project_health returns: health status (on_track/at_risk/behind/critical), progress vs expected, trend (improving/stable/declining), overdue task count, next milestone with progress, and up to 5 actionable recommendations. Same calculation as the in-app Health Assistant.
Notes (6 tools)
| Tool | Description | Key Parameters |
|---|---|---|
list_notes | List notes for a project | project_id* |
get_note | Get full note content | note_id* |
create_note | Create a project note (HTML supported) | project_id*, content*, status |
update_note | Update note content/status | note_id*, content, status, pinned |
convert_project_note_to_task | Convert a note to a task - uses content as description, links to same project | note_id*, task_name, priority, delete_note (default: true) |
delete_note | Delete a note | note_id* |
Goals & Milestones (6 tools)
| Tool | Description | Key Parameters |
|---|---|---|
list_goals | List goals for a project | project_id* |
create_goal | Create a goal with key results | project_id* (name or ID), name*, description, type (outcome/output/process), priority (low/medium/high/critical), linked_milestone_ids[], key_results[] (name, metric, start_value, target) |
update_goal | Update goal fields | goal_id*, name, description, type, priority, status (not_started/on_track/at_risk/behind/completed), progress, linked_milestone_ids[] |
list_milestones | List milestones for a project | project_id* |
create_milestone | Create a milestone | project_id* (name or ID), name*, description, type (phase/deliverable/decision/external/release), priority, due_date, linked_goal_ids[] |
update_milestone | Update milestone fields | milestone_id*, name, description, type, priority, due_date, completed, linked_goal_ids[] |
Linking tasks to milestones: Use update_task with milestone_id to link a task to a milestone (or null to unlink).
Project Team (3 tools)
| Tool | Description | Key Parameters |
|---|---|---|
list_team_members | List team members | project_id* (name or ID) |
add_team_member | Add a member to the team | project_id*, name*, email, role (owner/admin/member/viewer), contact_id, company_id |
remove_team_member | Remove a member | project_id*, member_id* (name or ID) |
Note: Linking CRM contacts/companies as team members requires Pro. Manual members work on Standard.
CRM - Contacts (7 tools) - Pro
| Tool | Description | Key Parameters |
|---|---|---|
list_contacts | List or search contacts in shared CRM, one project's isolated CRM, or every CRM source | search, company_id, project_id, include_isolated, limit |
get_contact | Get complete contact details with linked work | contact_id*, project_id |
create_contact | Create a contact with the same editable details available in PrimeTask | Contact details, companies, projects, links, tags, notes, custom_fields, project_id |
update_contact | Update a contact without replacing omitted details | contact_id*, editable contact details, project_id |
delete_contact | Delete a contact | contact_id* |
create_contacts | Create several contacts in one request, each taking the same details as create_contact | contacts* |
update_contacts | Update several contacts in one request, each taking the same details as update_contact | contacts* |
CRM - Companies (10 tools) - Pro
| Tool | Description | Key Parameters |
|---|---|---|
list_companies | List or search companies in shared CRM, one project's isolated CRM, or every CRM source | search, status, project_id, include_isolated, limit |
get_company | Get complete company details with contacts and linked work | company_id*, project_id |
create_company | Create a company with the same editable details available in PrimeTask | Company details, address, links, tags, projects, custom_fields, project_id |
update_company | Update a company without replacing omitted details | company_id*, editable company details, project_id |
delete_company | Delete a company | company_id* |
add_company_relationship | Add a relationship between two companies and keep the reverse relationship in step | company_id*, related_company_id*, relationship_type*, notes, project_id |
update_company_relationship | Change an existing company relationship on both companies | company_id*, related_company_id*, relationship_type*, notes, project_id |
remove_company_relationship | Remove a company relationship from both companies | company_id*, related_company_id*, project_id |
create_companies | Create several companies in one request, each taking the same details as create_company | companies* |
update_companies | Update several companies in one request, each taking the same details as update_company | companies* |
Several records at once: The plural tools take a list and apply each entry on its own, so one bad entry does not stop the rest. You get back how many were requested, how many worked, and what was wrong with any that did not, so your agent can fix those and try again. Useful when you hand over a spreadsheet of contacts. Up to 100 records per request.
Shared and isolated CRM: Leave project_id out to work with shared CRM. Provide a project name or ID to work inside that project's isolated CRM. For a complete search across shared and isolated CRM, use include_isolated when listing contacts or companies.
Name resolution: Contact, company, and project references accept a name or ID. Use an ID when more than one record has the same name.
CRM - Tasks (4 tools) - Pro
| Tool | Description |
|---|---|
list_crm_tasks | List CRM tasks |
create_crm_task | Create a CRM task with contacts, companies, project links, milestone, assignees, checklist, tags, dates, reminders, and custom fields |
update_crm_task | Update the complete CRM task record without replacing omitted details |
complete_crm_task | Complete a CRM task |
CRM - Activities (4 tools) - Pro
| Tool | Description | Key Parameters |
|---|---|---|
list_activities | List or filter CRM activities, including activities in isolated CRM | contact_id, company_id, type, project_id, limit |
log_activity | Log calls, emails, meetings, notes, demos, proposals, completed work, or LinkedIn activity with the relevant details | type*, contact/company, outcome, date, type-specific details, project_id |
update_activity | Correct or enrich an existing activity without recreating it | activity_id*, changed details, project_id |
delete_activity | Delete an activity | activity_id*, project_id |
CRM - Message Templates (7 tools) - Pro
Reusable LinkedIn outreach templates with placeholders ({first_name}, {company}, fallbacks like {first_name|there}, namespaced like {company.industry}). The agent can build your library, personalise messages for any contact, and optionally log the activity on the contact's timeline so success rates stay accurate.
| Tool | Description |
|---|---|
list_crm_templates | List or search templates, filter by type or by project's isolated CRM |
get_crm_template | Read one template's full content and usage stats |
create_crm_template | Create a new template (supports isolated CRM via project_id) |
update_crm_template | Edit name, type, content, or tags |
delete_crm_template | Remove a template |
render_crm_template | Preview a template against a contact, no recording (returns rendered text + which placeholders are missing) |
copy_crm_personalised_template | Render against a contact, record the usage, and optionally log the activity on the contact's timeline |
Try these prompts
"Write me three follow-up templates for SaaS founders, using the contact's first name and company. Save them in my library." "Show me a personalised version of my 'Quick check in' template for Sarah Lee at Acme. Don't send it, just show me what it would look like." "Send my 'Connection request - value-led' template to Sarah Lee, log it on her timeline, and include 'their recent funding round' as the specific opening line." "Which of my follow-up templates has the highest reply rate? Suggest two improvements to the lowest-performing one."
Tags, Statuses, Priorities (3 tools)
| Tool | Description |
|---|---|
list_tags | All tags in the active space |
list_statuses | All status configurations |
list_priorities | All priority configurations |
Time Tracking (4 tools)
| Tool | Description |
|---|---|
start_timer | Start a timer on a task |
stop_timer | Stop the active timer (optional note) |
get_active_timer | Get the currently running timer |
list_time_entries | List time entries (filter by task, project, date range) |
Focus Mode (4 tools)
| Tool | Description |
|---|---|
start_focus | Start a focus session on a task (name or ID, default 25 min) |
stop_focus | End the current focus session |
take_break | Toggle break - if active, starts a break; if on break, resumes focus |
get_focus_status | Get current session: task, elapsed time, breaks, status |
PrimeFlow (11 tools)
| Tool | Description | Key Parameters |
|---|---|---|
list_canvases | List all canvases | include_archived |
get_canvas | Get canvas with all nodes and edges | canvas_id* |
create_canvas | Create an empty canvas | name* |
rename_canvas | Rename a canvas | canvas_id*, name* |
add_node | Add a node to a canvas | canvas_id*, type*, position* {x,y}, data* |
update_node | Update a node's data or position | canvas_id*, node_id*, position, data (partial merge) |
remove_node | Remove a node | canvas_id*, node_id* |
add_edge | Connect two nodes | canvas_id*, source_node_id*, target_node_id*, label |
remove_edge | Remove a connection | canvas_id*, edge_id* |
bulk_canvas_update | Add/remove multiple nodes and edges in one atomic operation | canvas_id*, nodes[], edges[], remove_nodes[], remove_edges[] |
delete_canvas | Delete a canvas | canvas_id* |
bulk_canvas_update is the recommended way to build complex canvases. Use ref on nodes and "ref:<refName>" in edge source/target to reference nodes created in the same batch - no need to know IDs ahead of time. Mind map nodes get default colors automatically.
27 supported node types:
| Category | Types |
|---|---|
| Mind Map | centralTopic, mainTopic, subTopic, floatingTopic |
| Project | project, projectGoal, projectMilestone, projectNote |
| Tasks/CRM | task, checklist, contact, company, activity |
| Stickers | emojiSticker, textSticker, stickyNote |
| Media | youtube, twitter, image, link, pdf, file, folder |
| Structure | group, quickNotes, portal, crossSpacePortal |
| Advanced | documentation, thirdPartyApp, mermaid |
Node data examples:
Documentation node:
{"type": "documentation", "data": {"title": "API Docs", "content": "<h2>Auth</h2><p>Use Bearer tokens</p>", "nodeType": "documentation"}}Mermaid diagram from text:
{"type": "mermaid", "data": {"label": "User Flow", "code": "graph TD\n A[Login] --> B{Auth?}\n B -->|Yes| C[Dashboard]", "nodeType": "mermaid"}}Portal (link to another canvas):
{"type": "portal", "data": {"label": "Backend Design", "targetCanvasId": "canvas-id", "targetCanvasName": "Backend", "nodeType": "portal"}}Mind map node:
{"type": "centralTopic", "data": {"label": "Project Overview"}}The agent can build interconnected canvas systems - create multiple canvases, add mind maps, documentation, diagrams, and link them with portal nodes and edges.
Custom Fields (11 tools) - Pro
Field Values:
| Tool | Description | Key Parameters |
|---|---|---|
list_custom_fields | List field definitions for the space | - |
get_field_values | Get custom field values for an entity | entity_type* (task/project/contact/company), entity_id* |
set_field_value | Set a custom field value | entity_type*, entity_id*, field_id*, value* |
clear_field_value | Clear a custom field value | entity_type*, entity_id*, field_id* |
Field Definitions:
| Tool | Description | Key Parameters |
|---|---|---|
create_custom_field | Create a field definition | name*, type* (14 types), description, required, entity_scope[], options[], currency_code, currency_role, relationship config with rollup |
update_custom_field | Update a field's complete configuration, including its scope, choices, ranges, currency, and relationship settings | field_id*, display settings, entity_scope[], options[], min_value, max_value, relationship |
delete_custom_field | Delete a field and all its values | field_id* |
Field Tabs (per-project):
| Tool | Description | Key Parameters |
|---|---|---|
list_field_tabs | List tabs and their Show As mode for a project | project_id* (name or ID) |
create_field_tab | Create a tab and choose whether its rows show the project, contacts, companies, tasks, or linked projects | project_id*, name*, color, field_ids[], row_source |
update_field_tab | Rename a tab, change its Show As mode, or safely add and remove columns | tab_id*, project_id, name, color, row_source, add_field_ids[], remove_field_ids[] |
delete_field_tab | Remove a tab | tab_id* |
Supported field types: text, textarea, number, currency, date, datetime, dropdown, multi_select, checkbox, rating, progress, url, email, phone, relationship.
Automatic tab updates: When an agent creates a field, PrimeTask adds it to existing Project Fields tabs whose Show As mode matches the field's scope. Changing a field's scope also updates the matching tabs. The agent does not need to know every project or tab name.
Relationship fields support bidirectional links and rollup aggregations (sum, average, minimum, maximum, count) across linked entities. Setting or clearing a bidirectional value keeps both sides of the relationship in step.
Adding and replacing columns
Use add_field_ids or remove_field_ids to change selected columns without affecting the others. Supplying field_ids replaces the tab's complete column selection.
Financial setup example:
Step 1
create_custom_field with type: "currency", currency_code: "USD", currency_role: "budget"
Step 2
create_custom_field with type: "currency", currency_role: "expense"
Step 3
create_field_tab on the project with name "Finance" containing both fields
Step 4
set_field_value to set budget amount on the project
Quick Notes (4 tools)
| Tool | Description | Key Parameters |
|---|---|---|
list_quick_notes | List quick notes in the active space | - |
add_quick_note | Add a quick note - appears in dashboard widget | text* |
convert_note_to_task | Convert a quick note to a task (tagged "QuickNote") | note_id* (ID or text) |
delete_quick_note | Delete a quick note | note_id* (ID or text) |
Reminders (6 tools)
| Tool | Description | Key Parameters |
|---|---|---|
set_reminder | Add a reminder to a task. Resolves the right kind (before-due, at-time-on-due-day, or absolute) from the spec and the task's due date automatically. | task_id* (name or ID), spec* |
list_reminders | List reminders on a task with their computed fire time and a fired/not-fired indicator | task_id* (name or ID) |
update_reminder | Re-anchor an existing reminder to a new spec. Preserves the reminder's id and original author. | task_id*, reminder_id*, spec* |
delete_reminder | Remove a reminder from a task | task_id*, reminder_id* |
snooze_reminder | Push a reminder forward. Replaces the original with a fresh absolute reminder. Defaults to 15 minutes if spec is omitted. | task_id*, reminder_id*, spec |
list_upcoming_reminders | Scan all tasks for reminders firing in a time window. Returns task name, fire time, and a plain-language label. Sorted by fire time. | window (today / this-week / next-24h), space_id |
spec formats: relative offsets (5m, 30m, 1h, 2h, 1d, 1w), clock times (9am, 9:30am, 14:30, 5pm), or full ISO timestamps (2026-05-20T14:30:00.000Z). The agent doesn't need to know whether the task has a due date. The handler picks the right anchoring automatically. On a task with no due date, a relative offset like 30m means "30 minutes from now".
Reminders in shared spaces are personal. When the agent sets a reminder on your behalf, it's stamped with your identity, so only your devices fire. Teammates in the same space won't be paged.
Comments (4 tools)
| Tool | Description | Key Parameters |
|---|---|---|
list_comments | Read the discussion on a task: decisions, blockers, progress notes and replies. Filter by words, type, status, pinned or bookmarked. | task_id* (name or ID), query, type, status, pinned, bookmarked, limit, space_id |
create_comment | Add a comment to a task. Written in Markdown, with replies, mentions, a type and a status. | task_id*, content*, type, status, is_pinned, is_bookmarked, reply_to, mentions |
update_comment | Edit a comment the assistant wrote earlier | comment_id*, content, type, status, is_pinned, is_bookmarked, mentions |
delete_comment | Delete a comment the assistant wrote earlier | comment_id* |
Comments your assistant writes are labelled as its own. They carry the agent name you choose in Settings → External Integrations, so a thread always makes clear which entries were written by a person and which by an assistant.
Your assistant can only change its own comments. It can read everything on a task, but editing and deleting are limited to comments it wrote itself, so your own words are never rewritten. You can edit or delete anything in the thread, including your assistant's comments.
Everything written here behaves like a comment you typed. Markdown renders, links to videos, posts and images turn into previews, mentioning another task links the two together, and the comment appears in search and in the comment count on your task list.
Utility (4 tools)
| Tool | Description |
|---|---|
get_dashboard_stats | Overview stats: total, completed, overdue, in progress |
get_system_info | App version, tier, active space, available features, which Apple Calendar and Reminders integrations are set up and the space each one syncs, and how you prefer dates and times displayed |
search_docs | Search PrimeTask documentation - returns matching articles with summaries |
get_doc | Get a specific documentation article by slug |
Documentation search lets AI agents answer questions about PrimeTask features using the built-in docs. Ask your agent "How do I use Quick Add?" or "Show me the docs for recurring tasks" - it searches PrimeDocs and returns the relevant article.
Getting the best results
Your agent works well from plain instructions. These few habits make a noticeable difference.
Use everyday names, not IDs
Say "link Sarah Chen to Quantum Ventures" rather than hunting for identifiers. Contacts, companies, projects, statuses, tags and assignees are all matched by name. Reach for an ID only when two records share a name and you need to be specific.
Name the project when you work inside one
A project can keep its own separate CRM. Those contacts and companies do not appear in your main lists, so tell your agent which project you mean: "add a note to Sarah Chen in the Zenith project". To count or search everything at once, ask for shared and project records together.
Ask for many at once
Handing over a list of twenty contacts works better as one request than twenty. Your agent reports what went in and what did not, so you can fix a few rows rather than starting over.
Dates can be written your way
Type dates however you normally would. Your agent reads them the way you have set PrimeTask to display them, so a day-first date is not mistaken for a month-first one. Writing the year first, as in 1985-04-23, is always understood and never ambiguous.
Say what should happen next
Requests like "add this to my reminders" or "put it on my calendar" work on macOS once those integrations are set up. If one is switched off, or the task belongs to a different space than the one you sync, your agent tells you rather than quietly skipping it.
Ask it to check its work
Your agent can read records back, so ask it to confirm. "Add the contact, then show me what you saved" catches a misunderstanding immediately rather than later.
Start read-only
Leave writing switched off while you get a feel for how your agent behaves. Ask it to summarise, search, and report first. Turn writing on when you are comfortable, and check the audit log to see exactly what it did.
Prompts (5 templates)
MCP prompts are pre-built templates that give AI agents structured context from your workspace. The agent calls prompts/get and PrimeTask gathers the relevant data automatically.
| Prompt | Description | Parameters |
|---|---|---|
daily_standup | Yesterday's completed, today's planned, blockers | - |
weekly_review | Progress by project, completed tasks, upcoming deadlines | - |
project_status | Project health, milestones, goals, blockers | project (name or ID) |
crm_summary | Recent activities, follow-ups, pipeline (Pro) | - |
overdue_triage | Overdue tasks with suggested actions | - |
Example Usage
Ask your AI agent:
- "Use the daily_standup prompt to generate my standup"
- "Run project_status for Website Redesign"
- "Help me triage overdue tasks"
You can also browse prompts in the Command Explorer (Settings → External Integrations → Commands → Prompts tab).
Transport Options
Streamable HTTP (recommended)
- Runs inside the PrimeTask app - no separate process needed
- Multiple AI tools connect simultaneously
- Auto-starts when MCP is enabled
- Port:
24842(fixed, localhost only) - Bearer token authentication via
mcp-remotebridge - Uses
npx mcp-remoteto bridge between AI tools and the HTTP server
Stdio
- AI tool launches PrimeTask as a separate process (
--mcp-server) - One client per process
- No authentication needed (local pipe)
- Good for CLI-based tools
Examples
Create a task with a checklist
AI: "Create a task called 'Sprint Planning' with high priority in the API project,
with a checklist: review backlog, assign stories, estimate points"The agent calls create_task with:
{
"name": "Sprint Planning",
"priority_id": "high",
"project_id": "API Project",
"checklist": [
{"text": "Review backlog"},
{"text": "Assign stories"},
{"text": "Estimate points"}
]
}Start a focus session
AI: "Start a 45-minute focus session on the Design Review task"The agent calls start_focus with:
{
"task_id": "Design Review",
"duration": 45
}Add a task dependency
AI: "Make 'Write tests' depend on 'Implement API'"The agent calls add_dependency with:
{
"task_id": "Write tests",
"prerequisite_id": "Implement API"
}Set a reminder
AI: "Remind me about the John Doe call in 30 minutes"The agent calls set_reminder with:
{
"task_id": "John Doe call",
"spec": "30m"
}Log a CRM activity Pro
AI: "Log a 30-minute call with John Smith about the Q2 proposal"The agent calls log_activity with:
{
"type": "call",
"contact_id": "John Smith",
"subject": "Q2 proposal discussion",
"duration": 30
}Troubleshooting
"MCP server disabled"
Enable the MCP Server in Settings → External Integrations.
"Invalid API key"
Copy the current API key from Settings → External Integrations → MCP Server and paste it into your AI tool's config as the Bearer token.
"Write operations not allowed"
Turn on the Write permission in Settings → External Integrations → MCP Server.
"PrimeTask is locked"
PrimeTask is sitting on its lock screen, so your agent is waiting. Unlock the app and it carries on from where it stopped, with nothing to restart. To let agents keep working while it's locked, turn that on in Settings → Security. See The PrimeTask Lock Screen above.
"Space access denied"
The active Space isn't in your allowed list. Open Settings → External Integrations → MCP Server → Space Access and add the Space.
"Feature requires PrimeTask Pro"
CRM and Custom Fields tools require Pro. Tasks, projects, focus mode, and time tracking work on every license.
"Needs authentication" error in Claude Code
Use the Streamable HTTP config with mcp-remote - it handles auth correctly. The direct type: "http" format triggers OAuth, which PrimeTask doesn't use.
Connection fails in Claude Code
Step 1
Make sure PrimeTask is running with MCP enabled.
Step 2
Verify mcp-remote is available: npx mcp-remote --help.
Step 3
Check the API key in the env section of your config matches the one in PrimeTask Settings.
Step 4
Confirm PrimeTask is the source of truth. If you regenerated the key, update the client config.
Tools not showing up
Restart your AI tool after adding or changing the MCP config. Tools are discovered at session start.
Claude Desktop won't connect
If Claude Desktop (or another MCP client) can't reach PrimeTask, work through this once, in order:
Step 1
In PrimeTask, open Settings → External Integrations and confirm the MCP Server is on.
Step 2
If you want the agent to create or change things, not just read, turn on the Write permission in the same place. See Read / Write Permissions above.
Step 3
Make sure the Space you want the agent to work in is allowed under Space Access, and switch to it - the agent works on the active Space.
Step 4
Pick a Tool Catalog profile if you haven't, so the agent sees the tools you expect.
Step 5
Copy the current API key from Settings → External Integrations → MCP Server.
Step 6
In your AI tool's config (for Claude Desktop, claude_desktop_config.json under mcpServers), put the key in the env section exactly as shown in Connect Your AI Tool above. If that file already has other settings in it, add the PrimeTask entry alongside them rather than replacing the file. The connection uses port 24842.
Step 7
Save the config and fully quit and reopen your AI tool. Most clients only read their MCP config at startup.
Step 8
Confirm it connected: PrimeTask shows the MCP Server as on, and your AI tool lists the PrimeTask connector as connected. Some tools show this under a developer or connectors view.
Smaller tool set for fussy clients
If your AI tool connects but behaves erratically, switch to a smaller Tool Catalog profile such as Core Tasks, Projects, or Minimal. See Tool Catalog & Profiles above.
It worked before, and stopped after an update
Updating your AI tool can drop the PrimeTask connection or reset where it looks for its config. If task creation suddenly stops after you update Claude Desktop or another client:
Step 1
Restart the AI tool first. That alone often restores the connection.
Step 2
If it's still failing, reopen the AI tool's config and confirm the PrimeTask entry and the API key are still there and unchanged.
Step 3
As a reset, toggle the MCP Server off and back on in PrimeTask, then restart the AI tool.
After you regenerate the API key
Regenerating your key replaces it immediately, and the old key stops working right away. Any AI tool still using the old key will fail until you update it:
Step 1
Copy the new key from Settings → External Integrations → MCP Server.
Step 2
Paste it into your AI tool's config in place of the old one.
Step 3
Fully restart the AI tool so it picks up the new key.
Regenerating can't be undone
A new key replaces the old one for good, and every connected tool using the old key stops working until you update each one. PrimeTask asks you to confirm first, so you won't trigger it by accident.
First request fails, then a retry works
If the first thing you ask fails but the same request works on a second try - or the connection seems to drop part-way through a session - that's usually the AI tool re-establishing its link to PrimeTask, most often right at the start of a session. Nothing in PrimeTask is lost. If it keeps happening:
Step 1
Restart the AI tool so it connects fresh.
Step 2
Make sure PrimeTask is open and the MCP Server is on before you start the session.
Step 3
For a scheduled or automated run, give the connection a moment to settle before the first request.
Things worth knowing
Your data stays on your computer
PrimeTask's MCP server runs locally and never sends data to any server. When you connect an AI agent, that agent's cloud model may receive whatever it sends to its provider - that's the agent's business, not PrimeTask's. Read-only mode is the safe default if you're not sure.
Start Read-only, upgrade when ready
Out of the box the server is read-only. Most useful patterns - standups, reviews, triage, research - work in read-only. Turn Write on when you want the agent to actually make changes.
Try the built-in prompts first
The five prompt templates (daily_standup, weekly_review, project_status, crm_summary, overdue_triage) are the fastest way to get useful output from a new agent connection. They gather the right data automatically.
Profiles help small models
A smaller local model doesn't need to see more than 100 tools. Pick a focused profile such as Core Tasks, Projects, or Minimal to improve tool selection. Full is best suited to clients that handle large tool catalogs well.
Audit log is your friend
Every tool call is logged. Review the audit log when you want to know exactly what the agent did, when, and with what parameters.
Disconnect any time
Toggle the server off in Settings and the agent can't reach PrimeTask. No other cleanup needed.
Common questions
"Which AI models can use this?"
Any MCP-compatible client. Today that includes ChatGPT desktop, OpenAI Codex, Claude Code, Claude Desktop, Cursor, LM Studio, and more. Support for MCP is spreading quickly - if your AI tool adds MCP, it can connect.
"Do I have to use Codex after setup?"
No. The same local connection works in both normal ChatGPT and Codex conversations in the ChatGPT desktop app. Fully quit and reopen the desktop app after setup, then start a new conversation in either mode.
"Do I need Pro?"
No for the server itself. Some tools require Pro because they touch Pro features (CRM, Custom Fields, Dependencies). Everything else works on every PrimeTask license.
"Can I use this with a local model?"
Yes - LM Studio is an example. Local models keep your data entirely on your machine; no cloud involved. Pair a local model with a smaller profile (Core Tasks or Minimal) for best results.
"Can I connect more than one agent at once?"
Yes - with Streamable HTTP, multiple AI tools connect simultaneously. Stdio is one client per process.
"How do I know what the agent did?"
Open the audit log in Settings → External Integrations → Audit Log. Every tool call is there with timestamp, parameters, and outcome.
"Does connecting an agent count against my tier?"
No. The MCP server itself doesn't consume anything. Your AI provider may charge for its own usage - that's between you and them.
Where to go next
| If you want to… | Read this |
|---|---|
| See what AI can do with PrimeFlow canvases | PrimeFlow and MCP |
| Configure MCP toggles and audit log | External Integrations Settings |
| Use deep links (without an AI agent) | External Integrations |
| Understand every integration PrimeTask offers | Integrations Overview |
| Upgrade for CRM and Custom Fields tools | License Settings |
