Productive Simple MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PRODUCTIVE_API_KEY | Yes | Your Productive API token | |
| PRODUCTIVE_TIMEOUT | No | Request timeout in seconds | 30 |
| PRODUCTIVE_BASE_URL | No | Base URL for Productive API | https://api.productive.io/api/v2 |
| PRODUCTIVE_ORGANIZATION | Yes | Your Productive organization ID |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| quick_searchA | Quick search across projects, tasks, pages, and actions. This tool provides fast, comprehensive search across all Productive content types including projects, tasks, pages, and actions. It's optimized for quick lookups and general search queries. Returns: Search results from Productive API including: - Matching projects, tasks, pages, and actions - Relevance scores and metadata - Full entity details for each match Examples: quick_search("red") # Search for "red" across all content types quick_search("project", search_types=["project"]) # Search only in projects quick_search("meeting", deep_search=False) # Quick search without deep scan |
| list_recent_activityA | Get a summarized feed of recent activities and updates. Returns recent changes, task updates, comments, new documents and activities in chronological order. Examples: list_recent_activity() # Last 24 hours, all activity list_recent_activity(hours=168) # Last week list_recent_activity(hours=48, project_id=343136) # Last 2 days on specific project list_recent_activity(hours=24, user_id=12345) # What a specific user did today list_recent_activity(hours=24, activity_type=1) # Only comments from last day list_recent_activity(hours=168, item_type='Task') # Task activities from last week list_recent_activity(hours=168, event_type='edit') # Task edits from last week list_tasks(extra_filters={'filter[status][eq]': 2}, sort='-updated_at', page_size=10) # Recently closed tasks |
| list_projectsA | List all projects with basic information. Returns project data including:
|
| list_foldersA | List folders in a project. Productive exposes folders through the Returns folder data including:
|
| get_folderA | Get folder details by folder ID. Productive exposes folders through the |
| list_workflow_statusesA | List workflow statuses from Productive. Useful for understanding valid task status values by workflow. |
| list_time_entriesA | List time entries with optional date and relationship filters. Returns logged work records and related references (person/service/task). |
| list_tasksA | List tasks with optional filtering and pagination. Supports filtering by project, assignee, status, and other criteria. All parameters are optional - omit to fetch all tasks. Example of extra_filters:
Returns: Dictionary of tasks matching the provided filters |
| get_taskA | Get detailed task information by its internal task ID (e.g., 14677418). Returns task details including:
|
| get_task_historyA | Get comprehensive history for a specific task. Returns aggregated task history including:
Examples: get_task_history(14677921) # Default 30-day history get_task_history(14677921, hours=168) # Last week only get_task_history(14677921, hours=24) # Last 24 hours |
| list_commentsA | List comments with optional filtering by project or task. Use this when: You need full comment metadata (text, author, timestamps, attachments, mentions) and want to filter by specific project, task, or discussion thread. Returns:
Use extra_filters with filter[discussion_id][eq] to target a specific thread. |
| list_todosA | List todo checklist items with optional filtering by task. Use this when: You need to browse or filter checklist items across tasks (e.g., find all open todos in a project, filter by assignee). Use get_todo when you need full details of a specific todo. Returns:
Filter by task_id to get all checklist items for a specific task. |
| get_todoA | Get a specific todo checklist item by ID. Use this when: You need full details of a specific todo (including project/client context, time estimates, related comments/attachments). Returns:
|
| list_pagesA | List pages/documents with optional filtering by project, creator, or parent hierarchy. Use this when: You need to browse or search for pages by project, creator, or to retrieve page metadata/titles without full content. Also use this to discover subpages/subfolders inside a folder page or root doc. Pages in Productive are documents that can contain rich text content, attachments, and are organized within projects and nested inside parent pages. Returns page titles, content, metadata, and project relationships. Examples: list_pages(project_id=1234) # All pages in a project list_pages(creator_id=567) # Pages created by a specific person list_pages(extra_filters={'filter[parent_page_id][eq]': 179857}) # Direct subpages of a folder page list_pages(extra_filters={'filter[root_page_id][eq]': 179857}) # All pages in a doc tree |
| get_pageA | Get a specific page/document by ID, including full content body. Use this when: You need the full content body of a specific page (not just metadata or titles). Returns the page body as readable HTML in |
| list_peopleA | List all team members with optional pagination. Returns:
|
| get_personA | Get detailed information about a specific team member by ID. Use this when: You need detailed information about a specific person (full name, email, role, title, activity timestamps, custom fields, avatar). Use list_people when you need to browse or search multiple people. Returns:
|
| list_attachmentsA | List attachment/file metadata with optional filtering. Use this when: You need to browse or search attachments (files associated with tasks, comments, expenses). Note: returns metadata only — actual file content is not included. Attachments are files (PDFs, images, documents) associated with tasks, comments, expenses, etc. Returns:
Note: returns metadata only — actual file content is not included. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 18 tools
Each tool targets a distinct resource or action: search, activity, projects, folders, workflow statuses, time entries, todos, tasks, task history, comments, pages, people, attachments. List/get pairs are clearly differentiated by singular vs plural and explicit descriptions, so an agent can reliably select the right tool.
All tools use a consistent verb_noun pattern: list_* for collections, get_* for single items, plus quick_search and list_recent_activity which follow the same style. Snake_case is used throughout with no mixing of conventions, making the API predictable.
18 tools is on the higher end but still reasonable for a project management server covering many entity types (projects, tasks, todos, pages, people, folders, comments, time entries, attachments, activity). Each tool serves a distinct purpose and none feel redundant, though the count slightly exceeds the typical 3-15 sweet spot.
The tool surface is heavily read-focused: every entity has list/get operations but no create, update, or delete methods exist for any resource. For a project management domain, this is a significant gap, as agents cannot create tasks, update statuses, add comments, or modify anything, limiting practical workflows.