productive-mcp-rb2
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PRODUCTIVE_ORG_ID | Yes | Your organisation ID | |
| PRODUCTIVE_USER_ID | No | Your user ID — enables my_tasks, me shorthand in all tools, and the productive://me/* resources | |
| PRODUCTIVE_API_TOKEN | Yes | Your Productive.io API token |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| whoamiA | Get the current user context. Shows which user ID is configured as "me" for all operations. |
| list_companiesA | List companies (clients) in your Productive organisation. Filter by active or archived status. |
| list_projectsA | List projects in your Productive organisation. Filter by status or company. |
| list_boardsB | Get a list of boards from Productive.io |
| create_boardB | Create a new board in a Productive.io project |
| list_task_listsA | Get a list of task lists from Productive.io. Task lists organize tasks within boards. |
| create_task_listA | Create a new task list in a Productive.io board. Task lists help organize tasks within boards. |
| get_task_listA | Get details of a specific task list by its ID. |
| update_task_listA | Rename an existing task list. |
| archive_task_listA | Archive a task list. This is reversible — use restore_task_list to undo. |
| restore_task_listA | Restore a previously archived task list. |
| reposition_task_listA | Reposition a task list within its board. Optionally move it before another task list. |
| list_tasksB | Get a list of tasks from Productive.io |
| get_project_tasksA | Get all tasks for a specific project. ALSO used as STEP 4 in timesheet workflow to find task_id for linking time entries to specific tasks. Workflow: list_projects → list_project_deals → list_deal_services → get_project_tasks → create_time_entry. |
| get_taskA | Get detailed information about a specific task by ID |
| create_taskB | Create a new task in Productive.io. If PRODUCTIVE_USER_ID is configured, you can use "me" to refer to the configured user when assigning. |
| update_task_assignmentA | Update the assignee of an existing task. If PRODUCTIVE_USER_ID is configured, you can use "me" to refer to the configured user. To unassign, use "null" as a string. |
| update_task_detailsA | Update the title (name) and/or description of an existing task. At least one field must be provided. |
| delete_taskA | Permanently delete a task in Productive.io. This action is destructive and irreversible. |
| add_task_commentB | Add a comment to a task in Productive.io. |
| list_commentsB | List comments on a task in Productive.io. |
| get_commentA | Get a single comment by ID, including its body and metadata. |
| update_commentB | Edit the body of an existing comment. |
| delete_commentB | Delete a comment from Productive.io. This action is destructive. |
| pin_commentA | Pin a comment so it stays at the top of the task discussion. |
| unpin_commentC | Unpin a previously pinned comment. |
| add_comment_reactionA | Add a reaction emoji (e.g. "like") to a comment. |
| update_task_statusA | Update the status of a task. Provide either workflow_status_id directly, or status_name (case-insensitive, partial match) to resolve it from list_workflow_statuses. |
| list_workflow_statusesA | List workflow statuses available in Productive.io. These are used to set task status (Not Started=1, Started=2, Closed=3). |
| my_tasksB | Get tasks assigned to the configured user. Requires PRODUCTIVE_USER_ID to be set. |
| list_activitiesA | List activities (changes/updates) from Productive.io with filtering options for tracking recent work |
| get_recent_updatesA | Get a summary of recent updates and changes in the last N days, with detailed breakdown by item type |
| list_time_entriesA | View existing time entries from Productive.io with detailed information including service and budget relationships. Use this to see what time has been logged and to which projects/services. If PRODUCTIVE_USER_ID is configured, you can use "me" to refer to the configured user for person_id. |
| create_time_entryA | STEP 5 (FINAL) of timesheet workflow: Create a time entry with detailed work description. COMPLETE WORKFLOW: 1) list_projects → 2) list_project_deals → 3) list_deal_services → 4) list_project_tasks (recommended) → 5) create_time_entry. You MUST provide: valid service_id from the hierarchy, detailed work notes (minimum 10 chars), and optionally link to a specific task_id. This tool requires confirmation before creating. If PRODUCTIVE_USER_ID is configured, use "me" for person_id. |
| get_dealA | Get details of a specific deal or budget by its ID. |
| list_project_dealsA | STEP 2 of timesheet workflow: Get deals/budgets for a specific project. COMPLETE WORKFLOW: 1) list_projects → 2) list_project_deals → 3) list_deal_services → 4) list_project_tasks (recommended) → 5) create_time_entry. This follows: Project → Deal/Budget → Service → Task → Time Entry. |
| list_deal_servicesA | STEP 3 of timesheet workflow: Get services for a specific deal/budget. COMPLETE WORKFLOW: 1) list_projects → 2) list_project_deals → 3) list_deal_services → 4) list_project_tasks (recommended) → 5) create_time_entry. After this, optionally use list_project_tasks to find specific tasks to link your time entry to. |
| list_servicesA | List all services in the organization. NOTE: For timesheet entries, use the proper workflow instead: list_projects → list_project_deals → list_deal_services → create_time_entry. This tool shows all services but does not indicate which project/budget they belong to. |
| get_project_servicesA | Get all services for a project by traversing its deals/budgets. Returns services grouped by deal/budget. Prefer using list_project_deals + list_deal_services for more control. |
| update_task_sprintA | Update the sprint(s) assigned to a task. Sprints are tracked using a custom field. |
| move_task_to_listA | Move a task to a different task list within the same project |
| add_to_backlogB | Add a task to the project backlog. Creates a Backlog task list if it doesn't exist. |
| reposition_taskA | Reposition a task in a task list |
| list_peopleA | List people (team members) in your Productive.io organization. Use to find person IDs for task assignment, time entries, and filtering. Supports filtering by company, project membership, active status, and email. |
| get_personA | Get detailed information about a specific person by their Productive ID. |
| update_time_entryA | Update an existing time entry in Productive.io. Only provide the fields you want to change. |
| delete_time_entryA | Delete a time entry from Productive.io. This action is irreversible. |
| list_invoicesA | List invoices in Productive.io. Filter by company, project, or status (1=draft, 2=sent, 3=paid, 4=canceled) and date range. |
| get_invoiceA | Get detailed information about a specific invoice by its Productive ID. |
| list_expensesA | List expenses in Productive.io. Filter by person, project, or date range. Use "me" for person_id if PRODUCTIVE_USER_ID is configured. |
| create_expenseA | Create a new expense record in Productive.io. Use get_project_services to find a valid service_id first. |
| list_membershipsA | List project memberships in Productive.io. Use to see which people are members of a project, or which projects a person belongs to. |
| list_bookingsA | List resource bookings/capacity planning entries in Productive.io. Bookings show planned work allocation for people on projects over date ranges. Use to check availability and planned capacity. Use "me" for person_id if PRODUCTIVE_USER_ID is configured. |
| get_budget_burnA | Analyse budget burn for rb2 projects. Returns budget value, amount spent, burn %, remaining, and RAG status per budget deal. RAG: 🟢 <70% / 🟡 70-90% / 🔴 >90%. Use min_burn_pct=70 to show only at-risk projects. |
| get_resource_planA | Get the rb2 resource plan for a date range. Shows bookings with person, project, hours/day, and utilisation %. Use person_name and project_id for focused planning views. |
| get_overbooked_peopleB | Detect people with overlapping bookings above a utilisation threshold in a date range. Calculates daily load and highlights over-capacity dates. |
| get_org_overviewA | Get an rb2 org-level overview: headcount per subsidiary (NL, SCAPE, Code Blue, CN, PT, NG) plus total active projects. Shows who works where across the organisation. |
| list_subtasksA | List all subtasks (child tasks) of a given parent task in Productive.io. |
| create_subtaskA | Create a new subtask under a parent task. If PRODUCTIVE_USER_ID is configured, "me" can be used for assignee_id. |
| list_todosB | List all todo/checklist items for a specific task in Productive.io. |
| create_todoA | Create a new todo/checklist item on a task in Productive.io. |
| update_todoA | Update a todo/checklist item — rename it or mark it as completed/incomplete. |
| delete_todoA | Delete a todo/checklist item from a task in Productive.io. |
| get_todoA | Get a single todo/checklist item by its ID. |
| list_task_dependenciesA | List all dependencies for a task in Productive.io (blocking, waiting_on, related). |
| add_task_dependencyB | Add a dependency relationship between two tasks in Productive.io. |
| remove_task_dependencyA | Remove a task dependency by its dependency ID. Use list_task_dependencies first to find the dependency ID. |
| get_task_dependencyA | Get a single task dependency by its ID. |
| create_tasks_batchA | Create multiple tasks at once in Productive.io. Each task is created independently — failures on individual tasks do not abort the others. Shared project/board/task_list can be set at the top level and overridden per task. |
| list_pagesA | List knowledge base pages in Productive.io. Filter by project to see project-specific docs. |
| get_pageA | Get the full content of a specific knowledge base page in Productive.io. |
| create_pageA | Create a new knowledge base page in a project. Optionally nest under a parent page. |
| update_pageA | Update the title and/or body of an existing page. At least one field must be provided. |
| delete_pageA | Delete a knowledge base page. This action is destructive. |
| move_pageB | Move a page so that it becomes a child of another page (a new parent). |
| copy_pageA | Copy a page to create a new page from a template. Optionally specify a destination project. |
| list_foldersA | List folders that group boards within projects. Filter by project and active/archived status. |
| get_folderA | Get details of a specific folder by its ID. |
| create_folderB | Create a new folder inside a project to group boards. |
| update_folderB | Rename an existing folder. |
| archive_folderA | Archive a folder. This is reversible — use restore_folder to undo. |
| restore_folderA | Restore a previously archived folder. |
| list_attachmentsA | List file attachments on a task or comment in Productive.io. Returns filenames, types, sizes, and download URLs. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| timesheet_entry | Guided workflow for creating timesheet entries in Productive.io. Walks you through project → budget → service → task → time entry selection with proper validation. |
| timesheet_step | Step-by-step guidance for timesheet workflow. Use this to get specific help for each step: project, budget, service, task, or create. |
| weekly_report | Generate a structured weekly status report — time logged, tasks completed, in-progress work |
| project_health | Full project health check: budget burn, open tasks, team capacity, and recent activity — produces a RAG-rated summary |
| sprint_planning | Walk through sprint planning: review backlog, check capacity, select tasks, create new ones, and assign the team |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Active Projects | All active projects in Productive.io |
| Org Overview | rb2 headcount per subsidiary and total active projects |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rubenlangeweg/productive-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server