Productive Simple MCP
This MCP server provides read-only access to Productive.io data for AI workflows, with LLM-optimized output that reduces token consumption by 30-60%.
Project Management: Retrieve all active projects with budgets, hourly rates, deadlines, team assignments, and client information
Task Operations: List tasks with advanced filtering (by project, user, status, custom API filters), pagination, and sorting; get detailed task information including time tracking metrics (estimated, worked, billable, remaining time); access full task history with status changes, assignment history, milestones, and activity summaries
Comments & Discussions: Retrieve comments across projects and tasks with filtering and pagination; get specific comment details with full context, discussion threads, and mentions
Todo Checklists: Access todo checklist items with filtering by task; get detailed todo information with completion status and task context
Content Access: Retrieve pages/documents with filtering by project or creator and pagination; get specific pages by ID; access attachments/files
Activity Monitoring: Get summarized activity feeds filterable by time range, user, project, activity type, event type, and task ID
Comprehensive Search: Perform quick searches across projects, tasks, pages, and actions with customizable search types, deep search options, and pagination
LLM-Optimized Output: All responses use TOON format with HTML stripped, empty values removed, noise filtered, and direct web app URLs included for each resource
Security: Secure API token handling via environment variables with HTTPS and comprehensive error management for authentication, rate limiting, and API issues
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Productive Simple MCPget tasks for project 12345"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Productive.io MCP Server
A Model Context Protocol (MCP) server for integrating Productive.io into AI workflows. This server allows AI assistants and tools to access projects, folders, workflow statuses, time entries, tasks, comments, pages, attachments, todos, and people. Built with FastMCP.
This implementation is optimized for read-focused operations, with optional guarded write capabilities (for example, task creation) and LLM-friendly output options (Hybrid, JSON, and TOON). It is optimized for efficiency and simplicity, exposing only the necessary information. For a more comprehensive solution, consider BerwickGeek's implementation: Productive MCP by BerwickGeek.
Features
Read Tools
List Projects: Retrieve all projects with basic information
List Folders: Retrieve folders within a project
Get Folder: Retrieve a specific folder by ID
List Workflow Statuses: Retrieve workflow statuses with optional filters
List Time Entries: Retrieve time entries with optional date and relationship filters
List Tasks: Retrieve tasks with filtering and pagination
Get Task: Retrieve a specific task by internal ID
Get Task History: Retrieve task status changes, assignments, milestones, and activity summaries
List Comments: Retrieve comments with filtering
List Pages: Retrieve pages/documents with filtering
Get Page: Retrieve a specific page/document by ID
List Attachments: Retrieve attachments/files with filtering
List Todos: Retrieve todo checklist items with filtering
Get Todo: Retrieve a specific todo by ID
List People: Retrieve people/team members with pagination
Get Person: Retrieve a specific person by ID
List Recent Activity: Summarized activity feed for status updates
Quick Search: Fast, comprehensive search across projects, tasks, pages, and actions
Write Tools (blocked when READ_ONLY=true)
Create Task: Create a new task in a project
Update Task: Update task fields — title, description, assignee, due date, status, board, task list
Delete Task: Permanently delete a task by ID (irreversible)
Create Comment: Create a new comment on a task or project
Update Comment: Update a comment body
Delete Comment: Permanently delete a comment by ID (irreversible)
Create Time Entry: Log time spent on tasks or services
Update Time Entry: Modify existing time entries
Delete Time Entry: Remove time entries (irreversible)
Create Page: Create new documents/pages in projects
Update Page: Edit page content and titles
Delete Page: Remove pages/documents (irreversible)
Create Todo: Add checklist items to tasks
Update Todo: Modify todo items and completion status
Delete Todo: Remove todo items (irreversible)
Additional Features
LLM-Optimized Responses: Filtered output removes noise, strips HTML, and reduces token consumption
Related MCP server: MCP Todoist
Requirements
Python 3.10+
Productive API token
FastMCP 3.x
Installation
Clone or download this repository
Install dependencies:
pip install -r requirements.txtor
uv venv && uv syncConfiguration
The server uses environment variables for configuration:
PRODUCTIVE_API_KEY: Your Productive API token (required)PRODUCTIVE_ORGANIZATION: Your Productive organization ID (required)PRODUCTIVE_BASE_URL: Base URL for Productive API (default: https://api.productive.io/api/v2)PRODUCTIVE_TIMEOUT: Request timeout in seconds (default: 30)OUTPUT_FORMAT: Output format for tool responses ("hybrid","toon", or"json", default:"hybrid")READ_ONLY: Global write-protection toggle for write tools — create_task, update_task, delete_task, create_comment, update_comment, delete_comment, create_time_entry, update_time_entry, delete_time_entry, create_page, update_page, append_page_content, delete_page, create_todo, update_todo, delete_todo ("true" or "false", default: "true")
Usage
Using uvx from GitHub (Recommended for MCP clients)
"productive": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/druellan/Productive-Simple-MCP",
"productive-mcp"
],
"env": {
"PRODUCTIVE_API_KEY": "<api-key>",
"PRODUCTIVE_ORGANIZATION": "<organization-id>"
}
}Using uvx from GitHub with TOON output enabled
"productive": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/druellan/Productive-Simple-MCP",
"productive-mcp"
],
"env": {
"PRODUCTIVE_API_KEY": "<api-key>",
"PRODUCTIVE_ORGANIZATION": "<organization-id>",
"OUTPUT_FORMAT": "toon"
}
}Local Development (Direct Python Execution)
"productive": {
"command": "python",
"args": [
"server.py"
],
"env": {
"PRODUCTIVE_API_KEY": "<api-key>",
"PRODUCTIVE_ORGANIZATION": "<organization-id>"
}
}Local Development Using UV
"productive": {
"command": "uv",
"args": [
"--directory", "<path-to-productive-mcp>",
"run", "server.py"
],
"env": {
"PRODUCTIVE_API_KEY": "<api-key>",
"PRODUCTIVE_ORGANIZATION": "<organization-id>"
}
}Available Tools
Read Tools
list_projects
Retrieve all projects with basic information.
Properties:
No parameters (returns all projects)
list_folders
Retrieve folders within a specific project.
Productive's API exposes these resources through the /folders endpoint.
Properties:
project_id(int, required): Filter folders by Productive project IDstatus(int, optional): Folder status filter (1active,2archived). Defaults to1limit(int, optional): Maximum number of folders to return (default: 50, max: 200)
get_folder
Retrieve a specific folder by its ID.
Productive's API exposes this resource through the /folders endpoint.
Properties:
folder_id(int): The unique Productive folder identifier
list_workflow_statuses
Retrieve workflow statuses with optional filters.
Properties:
workflow_id(int, optional): Filter statuses by workflow IDcategory_id(int, optional): Filter by category (1Not Started,2Started,3Closed)limit(int, optional): Maximum number of statuses to return (default: 50, max: 200)
list_time_entries
Retrieve time entries with optional date and relationship filters.
Properties:
date(str, optional): Exact date filter (YYYY-MM-DD)after(str, optional): Lower bound date filter (YYYY-MM-DD)before(str, optional): Upper bound date filter (YYYY-MM-DD)person_id(int, optional): Filter by person IDproject_id(int, optional): Filter by project IDtask_id(int, optional): Filter by task IDservice_id(int, optional): Filter by service IDpage_number(int, optional): Page number for paginationlimit(int, optional): Maximum number of entries to return (default: 50, max: 200)
list_people
Retrieve people/team members with optional pagination.
Properties:
page_number(int, optional): Page number for paginationpage_size(int, optional): Number of people to return per page (max: 200)
get_person
Retrieve a specific person by ID.
Properties:
person_id(int): The unique Productive person identifier
list_tasks
Retrieve tasks with optional filtering and pagination.
Properties:
project_id(int, optional): Filter tasks by Productive project IDuser_id(int, optional): Filter tasks by assignee/user IDpage_number(int, optional): Page number for paginationpage_size(int, optional): Page size for pagination (default: 50)sort(str, optional): Sort parameter (e.g., 'last_activity_at', '-last_activity_at', 'created_at', 'due_date')extra_filters(dict, optional): Additional Productive API filters (e.g.,{'filter[status][eq]': 1}for open tasks,{'filter[status][eq]': 2}for closed tasks)
get_task
Retrieve a specific task by its internal ID. Returns task details including title, description, status, dates, time tracking metrics (initial_estimate, worked_time, billable_time, remaining_time), and todo counts. Also includes enriched related data:
comments: the most recent comments (most recent first, up tocomment_limit)todos: up to 100 checklist items, withtodos_truncatedandtodos_notewhen more existattachments: each file'sidandname(filename)
Properties:
task_id(int): The unique Productive task identifier (internal ID, e.g., 14677418)comment_limit(int, optional): Number of most recent comments to include (default: 5, max: 200)
get_task_history
Retrieve the full history for a specific task, including status changes, assignment history, milestones, and activity summary.
Properties:
task_id(int): The unique Productive task identifier (internal ID, e.g., 14677418)hours(int, optional): Number of hours to look back for activity history (default: 720 = 30 days, max: 8760)
Returns:
status_history: Timeline of status changes with timestamps (from/to status and changed_at)assignment_history: Assignment changes showing who was assigned and when (assigned_to and changed_at)milestones: Key deliverables and completion markers from comments and activitiesactivity_summary: Counts of comments, changes, status updates, assignments, and milestones
Example:
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 hourslist_comments
Retrieve comments with optional filtering and pagination.
Properties:
project_id(int, optional): Filter comments by Productive project IDtask_id(int, optional): Filter comments by Productive task IDpage_number(int, optional): Page number for paginationpage_size(int, optional): Page size for paginationextra_filters(dict, optional): Additional Productive API filters (e.g.,{'filter[discussion_id]': '123'})
list_pages
Retrieve pages/documents with optional filtering and pagination.
Properties:
project_id(int, optional): Filter pages by Productive project IDcreator_id(int, optional): Filter pages by creator IDpage_number(int, optional): Page number for paginationpage_size(int, optional): Page size for pagination
get_page
Retrieve a specific page/document by ID, including full content body.
Returns the page body as readable HTML in body_html (converted from Productive's ProseMirror format). This HTML can be passed back to update_page to modify the page.
Properties:
page_id(int): The unique Productive page identifier
list_attachments
Retrieve attachments/files with optional filtering and pagination.
Properties:
page_number(int, optional): Page number for paginationpage_size(int, optional): Page size for paginationextra_filters(dict, optional): Additional Productive API filters
list_recent_activity
Get a summarized feed of recent activities and updates. Perfect for status updates.
Properties:
hours(int, optional): Number of hours to look back (default: 24, use 168 for a week)user_id(int, optional): Filter by specific user/person IDproject_id(int, optional): Filter by specific project IDactivity_type(int, optional): Filter by activity type (1: Comment, 2: Changeset, 3: Email)item_type(str, optional): Filter by item type (e.g., 'Task', 'Page', 'Deal', 'Workspace')event_type(str, optional): Filter by event type (e.g., 'create', 'copy', 'update', 'delete')task_id(int, optional): Filter by specific task IDmax_results(int, optional): Maximum number of activities to return (default: 100, max: 200)
list_todos
Retrieve todo checklist items with optional filtering and pagination.
Properties:
task_id(int, optional): Filter todos by Productive task IDpage_number(int, optional): Page number for paginationpage_size(int, optional): Page size for paginationextra_filters(dict, optional): Additional Productive API filters
quick_search
Quick search across projects, tasks, pages, and actions.
Properties:
query(str): Search query stringsearch_types(list[str], optional): List of types to search (action, project, task, page). Defaults to all.deep_search(bool, optional): Whether to perform deep search (default: True)page(int, optional): Page number for pagination (default: 1)per_page(int, optional): Results per page (default: 50)
Description: 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.
Response Format: Returns filtered results optimized for LLM consumption with only essential fields:
record_id: Unique identifier for the resourcerecord_type: Type of resource (project, task, page, etc.)title: Display title (with search highlights removed)subtitle: Additional context or descriptionicon_url: URL to the resource's icon/avatar (if available)status: Current status (active, closed, etc.)project_name: Name of the associated projectupdated_at: Last update timestampwebapp_url: Direct link to view the resource in Productive web interface
Examples:
quick_search("deployment") # Search for "deployment" across all content types
quick_search("meeting notes", search_types=["project"]) # Search only in projects
quick_search("this week summary", deep_search=False) # Quick search without deep scanget_todo
Retrieve a specific todo checklist item by ID.
Properties:
todo_id(int): The unique Productive todo checklist item identifier
Write Tools
create_task
Create a new task in Productive.
When READ_ONLY=true, this tool is blocked globally and returns a write-protection error.
Properties:
title(str, required): Task titleproject_id(int, required): Productive project ID where the task will be createddescription(str, optional): Task descriptionboard_id(int, optional): Board IDtask_list_id(int, optional): Task list IDassignee_id(int, optional): Assignee/person IDdue_date(str, optional): Due date (YYYY-MM-DD)status(str, optional):openorclosed(default:open)
update_task
Update an existing task in Productive. Only provided fields are modified (partial PATCH).
At least one field must be given. When READ_ONLY=true, this tool is blocked globally.
Properties:
task_id(int, required): Productive task ID to updatetitle(str, optional): New task titledescription(str, optional): New task descriptionassignee_id(int, optional): New assignee person ID. Use 0 or negative to unassign.due_date(str, optional): New due date (YYYY-MM-DD)status(str, optional): New status —openorclosedboard_id(int, optional): Move task to this boardtask_list_id(int, optional): Move task to this task list
delete_task
Permanently delete a task from Productive by its ID. This action is irreversible —
the task and all associated data will be removed. When READ_ONLY=true, this tool is
blocked globally.
Properties:
task_id(int, required): Productive task ID to delete
create_comment
Create a new comment on a task or project in Productive. A comment must be attached to
at least one of task or project. When READ_ONLY=true, this tool is blocked globally.
Properties:
body(str, required): Comment body text (HTML supported)task_id(int, optional): Productive task ID to attach the comment toproject_id(int, optional): Productive project ID to attach the comment to
update_comment
Update an existing comment in Productive. Only the body attribute can be modified.
When READ_ONLY=true, this tool is blocked globally.
Properties:
comment_id(int, required): Productive comment ID to updatebody(str, required): New comment body text (HTML supported)
delete_comment
Permanently delete a comment from Productive by its ID. This action is irreversible —
the comment will be removed from the task or project. When READ_ONLY=true, this tool
is blocked globally.
Properties:
comment_id(int, required): Productive comment ID to delete
create_time_entry
Create a new time entry in Productive for time tracking.
Logs time spent on tasks or services. Either task_id or service_id must be provided.
When READ_ONLY=true, this tool is blocked globally.
Properties:
date(str, required): Date for the time entry (YYYY-MM-DD)time(float, required): Time spent in hours (e.g., 2.5)person_id(int, required): Person ID who logged the timetask_id(int, optional): Task ID to associate the time entry withservice_id(int, optional): Service ID to associate the time entry withnote(str, optional): Optional note or description
update_time_entry
Update an existing time entry in Productive. Only provided fields are modified (partial PATCH).
At least one field must be given. When READ_ONLY=true, this tool is blocked globally.
Properties:
time_entry_id(int, required): Productive time entry ID to updatedate(str, optional): New date (YYYY-MM-DD)time(float, optional): New time in hoursperson_id(int, optional): New person IDtask_id(int, optional): New task IDservice_id(int, optional): New service IDnote(str, optional): New note
delete_time_entry
Permanently delete a time entry from Productive by its ID. This action is irreversible —
the time entry will be removed from time tracking records. When READ_ONLY=true, this tool
is blocked globally.
Properties:
time_entry_id(int, required): Productive time entry ID to delete
create_page
Create a new page/document in a Productive project.
Pages are documents that can contain rich text content and are organized within projects.
When READ_ONLY=true, this tool is blocked globally.
Properties:
title(str, required): Page titleproject_id(int, required): Productive project ID where the page will be createdcontent(str, optional): Page content as HTML markup (e.g.<h1>Title</h1><p>Body text</p>)
update_page
Update an existing page/document in Productive. Only provided fields are modified (partial PATCH).
At least one field must be given. When READ_ONLY=true, this tool is blocked globally.
Properties:
page_id(int, required): Productive page ID to updatetitle(str, optional): New page titlecontent(str, optional): New page content as HTML markup (e.g.<h1>Title</h1><p>Body text</p>)
delete_page
Permanently delete a page/document from Productive by its ID. This action is irreversible —
the page and all its content will be removed. When READ_ONLY=true, this tool is blocked globally.
Properties:
page_id(int, required): Productive page ID to delete
append_page_content
Append content to the end of an existing page/document in Productive without fetching its current body. Exactly one of markdown or html must be provided.
When READ_ONLY=true, this tool is blocked globally.
Properties:
page_id(int, required): Productive page ID to append content tomarkdown(str, optional): Markdown content to append (e.g.# New section\n\n- item one)html(str, optional): HTML content to append (e.g.<h2>New section</h2><p>Body text</p>)
create_todo
Create a new todo checklist item for a task in Productive.
Todos are checkbox items within tasks for granular tracking of work items.
When READ_ONLY=true, this tool is blocked globally.
Properties:
content(str, required): Todo item content/descriptiontask_id(int, required): Productive task ID to add the todo to
update_todo
Update an existing todo checklist item in Productive. Only provided fields are modified (partial PATCH).
At least one field must be given. When READ_ONLY=true, this tool is blocked globally.
Properties:
todo_id(int, required): Productive todo ID to updatecontent(str, optional): New todo contentcompleted(bool, optional): Mark todo as completed (true) or incomplete (false)
delete_todo
Permanently delete a todo checklist item from Productive by its ID. This action is irreversible —
the todo item will be removed from the task. When READ_ONLY=true, this tool is blocked globally.
Properties:
todo_id(int, required): Productive todo ID to delete
Output Format
The server supports three output formats configured via the OUTPUT_FORMAT environment variable:
Mode |
|
| Description |
| TOON | JSON dict | Both TOON for token efficiency and structured data for programmatic access |
| TOON |
| Pure TOON (Token-Optimized Object Notation) with no dual-format overhead |
| JSON string | JSON dict | Standard FastMCP JSON output |
TOON (Token-Optimized Object Notation) reduces token consumption by 30-60% compared to JSON. The hybrid mode is the recommended default: it exposes the TOON rendering as the message text while preserving the full JSON dict as structured output, so agents that rely on structured data can still parse it programmatically.
All tools return filtered data optimized for LLM processing:
LLM Optimizations:
Unwanted fields removed (e.g.,
creation_method_id,email_key,placementfrom tasks)HTML stripped from descriptions and comments
Empty/null values removed
Pagination links removed
List views use lightweight output (e.g.,
get_project_tasksexcludes descriptions and relationships)Web app URLs included: Each resource includes a
webapp_urlfield linking directly to the Productive web interface
Response Structure:
data: Main resource data (array for collections, object for single items)meta: Pagination and metadataincluded: Related resource data (when applicable)webapp_url: Direct link to view the resource in Productive (e.g.,https://app.productive.io/12345/tasks/67890)
Error Handling
The server provides comprehensive error handling:
401 Unauthorized: Invalid API token
404 Not Found: Resource not found
429 Rate Limited: Too many requests
500 Server Error: Productive API issues
All errors are logged via MCP context with appropriate severity levels.
Security
API tokens are loaded from environment variables
No sensitive data is logged
HTTPS is used for all API requests
Error messages don't expose internal details
License
MIT License.
Available Tools
18 toolsget_folderARead-only
Get folder details by folder ID.
Productive exposes folders through the /folders endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| folder_id | Yes | Productive folder ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
ReadOnlyHint annotation already covers the read-only nature; the description adds the endpoint but no additional behavioral details like error cases or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, though the second sentence adds minimal value; overall concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple get operation with an output schema present, so the description is sufficient without explaining return values; it adequately covers the essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes folder_id, and the description adds no extra parameter semantics; baseline 3 applies due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear and specific verb 'Get' with resource 'folder details' by ID, and it distinguishes from other get_* tools for different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternative guidance, but it is implied that this tool is for fetching a folder when you have its ID; lacks mention of when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageARead-only
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 body_html.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | The unique Productive page identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful behavioral context by specifying that the page body is returned as readable HTML in body_html. This goes beyond the structured annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, usage condition second, return format third. Every sentence serves a distinct function and there is no unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup tool with one fully documented parameter and an output schema, the description covers purpose, usage, and return behavior. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents page_id as 'The unique Productive page identifier' with 100% coverage, so the description does not need to add much. It does not introduce additional parameter meaning beyond what the schema already provides, matching the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a clear resource ('specific page/document by ID') and distinguishes itself by emphasizing 'full content body' versus metadata or titles. This makes it easy for an agent to tell it apart from list_pages and other sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: when the full content body of a specific page is needed, and clarifies that it is not for metadata or titles. It does not name specific alternative tools or provide explicit exclusions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personARead-only
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:
Full name, email, and contact information
Role, title, and organizational details
Activity timestamps (joined, last seen)
Custom fields and additional metadata
Avatar and profile information
| Name | Required | Description | Default |
|---|---|---|---|
| person_id | Yes | The unique Productive person identifier |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context about the returned fields (name, email, role, title, timestamps, custom fields, avatar), which is beyond the readOnlyHint annotation. However, it does not disclose any potential constraints or side effects, but since annotations already indicate safe read operation, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one lead sentence for purpose, one for usage guidelines, and a bullet list of returns. No extraneous information; every sentence adds value. Front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple read-by-ID with one required parameter, an output schema, and readOnlyHint annotation, the description is fully complete. It explains what fields are returned and when to use it, leaving no gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for its single parameter (person_id), and the description adds no additional semantic details beyond stating it is 'by ID'. Baseline score of 3 is appropriate as the schema already provides sufficient information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves detailed information about a specific team member by ID, using a specific verb ('Get') and resource ('person'). It distinguishes from the sibling tool 'list_people' by specifying that 'get_person' is for a single person while 'list_people' is for browsing multiple.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('when you need detailed information about a specific person') and when to use an alternative ('Use list_people when you need to browse or search multiple people'), providing clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskARead-only
Get detailed task information by its internal task ID (e.g., 14677418).
Returns task details including:
Title, description, status (open/closed), due date, and timestamps
Time tracking: initial estimate, remaining, billable, and worked time (in minutes)
Todo counts: total and open
comments: the most recent comments (up to
comment_limit, most recent first)todos: up to 100 checklist items, with
todos_truncatedandtodos_notewhen more existattachments: id and filename for each file attached to the task
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The unique Productive task identifier (internal ID) | |
| comment_limit | No | Number of most recent comments to include (default: 5, max: 200) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds valuable behavioral detail beyond that: comment ordering and limiting via comment_limit, todo truncation with todos_truncated and todos_note, and attachment results limited to id and filename. This gives the agent an accurate picture of response behavior without needing to guess.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the operation and then uses scannable bullets to enumerate return categories. Every line adds distinct information about task details, time tracking, todos, comments, or attachments. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for correct invocation: it specifies the required parameter format, the optional limit behavior, the return categories, and the truncation signals. The read-only annotation covers safety, and the existence of an output schema further reduces the burden. Nothing necessary for correct use is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning by clarifying that task_id is an internal Productive identifier with a concrete example, and by explaining that comment_limit controls how many most recent comments are returned. It avoids merely repeating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get detailed task information by its internal task ID.' It clearly distinguishes this from sibling tools like list_tasks (which lists many tasks) and get_task_history (which returns history rather than current task details). The example ID anchors the exact input expected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: call this tool when you already have an internal task ID and need full details for that single task. However, the description does not explicitly mention alternatives or when not to use it, such as using quick_search or list_tasks to first locate the task ID. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_historyARead-only
Get comprehensive history for a specific task.
Returns aggregated task history including:
Status history: Timeline of status changes with timestamps and responsible users
Assignment history: Who worked on the task and when assignments changed
Milestones: Key deliverables and completion markers from comments and activities
Activity summary: Counts of comments, changes, status updates, assignments, and milestones
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
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Number of hours to look back for activity history (default: 720 = 30 days) | |
| task_id | Yes | The unique Productive task identifier (internal ID) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating safe read-only behavior. The description goes beyond by detailing the returned data categories (status history, assignment history, etc.) and the time range parameter, adding valuable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points and clear examples, conveying essential information without redundancy. Every sentence adds value, and the format facilitates quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description need not detail return values. It covers the main use case, parameters, and expected categories of history. It is nearly complete, though it could mention any limitations or pagination behavior for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains both parameters (task_id and hours). The description does not add new semantic meaning beyond what the schema provides, though examples reinforce usage. Meets baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets comprehensive history for a task, with specific verb 'Get' and resource 'history for a specific task'. It distinguishes from sibling tools like get_task (task details) and list_tasks (list tasks) by focusing on historical data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving task history and provides examples showing how to specify time range. However, it does not explicitly state when not to use it or mention alternatives, leaving room for improvement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_todoARead-only
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:
Checkbox item text and completion status
Parent task with project and client details
Assignee and team member information
Due date relative to parent task timeline
Time estimates vs actual completion time
Related comments and file attachments
| Name | Required | Description | Default |
|---|---|---|---|
| todo_id | Yes | Productive todo ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses detailed return fields (checkbox text, parent task, assignee, due date, time estimates, comments, attachments) which goes beyond the readOnlyHint annotation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: a single-sentence purpose, a one-line usage guideline, and a bullet list of returns. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input (one parameter), presence of output schema, and read-only annotation, the description covers purpose, usage, and return details comprehensively. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (todo_id) with schema description 'Productive todo ID'. The description adds no extra semantics beyond the schema. With 100% schema description coverage, baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get a specific todo checklist item by ID' with a specific verb and resource. It distinguishes from sibling tools like list_todos and get_task by specifying it's for a single todo checklist item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use ('when you need full details of a specific todo') and lists what is returned. It implicitly excludes using for listing, but does not name alternatives like 'use list_todos instead'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_attachmentsARead-only
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:
File name, type, and size
Associated entity relationships (task, project, etc.)
Note: returns metadata only — actual file content is not included.
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Optional number of attachments per page (max 200) | |
| page_number | No | Page number for pagination | |
| extra_filters | No | Additional Productive query filters using API syntax |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that only metadata is returned (no file content) and mentions optional filtering and pagination. Annotations already indicate readOnlyHint=true, so no contradiction. Adds useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured. First line states core purpose, followed by usage hint and return details. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers essential aspects: what the tool does, when to use it, what it returns, and that pagination is available. Output schema exists, so return details are complete. Could mention how extra_filters work, but schema description partly addresses that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all 3 parameters with descriptions (100% coverage). The description does not add significant meaning beyond mentioning 'optional filtering', which is already implied by the parameters. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists attachment metadata with optional filtering. The verb 'list' and resource 'attachments' are precise. Distinguishes itself from sibling tools like list_tasks, list_people, etc., which operate on different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit scenario ('when you need to browse or search attachments') and clarifies that it returns metadata only, not file content. Does not list alternative tools but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commentsARead-only
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:
Comment text, author, and timestamp
Parent entity (project or task) with details
Discussion threads and replies
Attachments and file references
Mentions of team members or clients
Use extra_filters with filter[discussion_id][eq] to target a specific thread.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | Productive task ID to filter comments by | |
| page_size | No | Optional number of comments per page (max 200) | |
| project_id | No | Productive project ID to filter comments by | |
| page_number | No | Page number for pagination | |
| extra_filters | No | Additional Productive query filters using API syntax. Common filters: filter[project_id][eq] (ID), filter[task_id][eq] (ID), filter[discussion_id][eq] (ID). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already indicates it's a read-only operation. The description adds context about the returned fields (text, author, timestamps, attachments, mentions) and clarifies filtering options, including extra_filters for discussion threads. It does not contradict the annotation and provides useful behavioral details without needing to mention side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a clear purpose statement, a 'Use this when' section, a 'Returns' list, and a specific tip about extra_filters. It is somewhat wordy but each section earns its place. It is front-loaded with the core action, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a list tool, covering what it returns (comment metadata, parent entity, threads, attachments, mentions) and how to filter. Since there is no output schema, the description appropriately explains the return content. It includes a specific example of using extra_filters for discussion threads, which is sufficient for practical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100% (all five parameters have descriptions). The description adds slight value by mentioning 'filter by project or task' and specifically calling out 'extra_filters with filter[discussion_id][eq]', but these are already implied in the schema descriptions. Since coverage is high, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List comments with optional filtering by project or task.' It uses a specific verb ('list') and resource ('comments'), and distinguishes from sibling tools that list other entities like tasks or attachments. The purpose is explicit and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a 'Use this when' clause: 'You need full comment metadata... and want to filter by specific project, task, or discussion thread.' This gives clear context for when to use the tool. However, it does not mention alternatives or when not to use it, so it lacks explicit comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersARead-only
List folders in a project.
Productive exposes folders through the /folders endpoint.
Returns folder data including:
Folder ID and name
Archived status
Position/order within the project
Hidden flag and project relationship
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of folders to return (max 200) | |
| status | No | Folder status filter: 1 = active, 2 = archived | |
| project_id | Yes | Productive project ID to list folders for |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the readOnlyHint annotation by detailing the exact data returned (ID, name, archived status, etc.) and mentioning the endpoint, but does not contradict the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with about five lines, front-loads the main action, and includes only necessary details without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with an output schema, the description covers purpose, return fields, and the endpoint, making it complete for effective usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already describes all parameters. The description does not add additional parameter semantics, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List folders in a project' with a specific verb and resource, and lists the returned fields, differentiating it from sibling tools that handle other resources like tasks or people.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing folders but provides no explicit guidance on when to use this tool versus alternatives, nor does it mention when not to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesARead-only
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
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Optional number of pages per page (max 200) | |
| creator_id | No | Optional creator ID to filter pages by | |
| project_id | No | Optional project ID to filter pages by | |
| page_number | No | Page number for pagination | |
| extra_filters | No | Additional Productive query filters using API syntax. Use filter[parent_page_id][eq] to list direct subpages/subfolders of a folder page. Use filter[root_page_id][eq] to list ALL pages nested under a root doc. Other supported filters: filter[status], filter[id][eq], filter[full_query]. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint by specifying what is returned (titles, content, metadata, project relationships) and gives practical examples. It does not mention potential side effects, but since it's read-only, that is not an issue. The return format is disclosed, adding value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-line summary, usage guidance, context, and examples. Each sentence serves a purpose without fluff. The examples are compact and illustrate key filter combinations. It is concise yet comprehensive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, one nested object) and the presence of an output schema, the description covers the essential context: what it does, when to use it, return types, and usage examples. It does not explain error scenarios or limits, but those are not typically required. The description is complete enough for effective tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers all parameters with descriptions (100% coverage), so the baseline is 3. The tool description enhances this with concrete usage examples for extra_filters (parent_page_id and root_page_id), which clarifies how to combine parameters effectively, providing added value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists pages/documents with filters, and distinguishes it from siblings like get_page (for single page) and quick_search (presumably broader search). It also explicitly mentions discovering subpages/subfolders, which is a distinct capability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit 'Use this when' guidance, including browsing by project/creator and retrieving metadata without full content. It also mentions using it for subpage discovery. However, it does not name alternative tools (e.g., quick_search) for contrast, which would make it stronger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_peopleARead-only
List all team members with optional pagination.
Returns:
Person ID, name, and email
Role and title information
Last seen and join dates
Avatar and contact information
| Name | Required | Description | Default |
|---|---|---|---|
| page_size | No | Optional number of people per page (max 200) | |
| page_number | No | Page number for pagination |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds context beyond the readOnlyHint annotation by detailing specific return fields (ID, name, email, role, dates, etc.) and pagination behavior, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficient and front-loaded: a single sentence followed by a bulleted list of return fields, every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fairly complete for a simple list tool with optional pagination and output schema; minor omissions like sorting or ordering but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions, and the description merely hints at optional pagination without adding new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as listing team members with optional pagination, distinguishing it from siblings like get_person and other list_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives, nor any conditions or exclusions mentioned. Usage is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsARead-only
List all projects with basic information.
Returns project data including:
Project ID, name, and number
Creation and last activity timestamps
Archived status (if applicable)
Webapp URL for direct access
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful behavioral context by enumerating the returned fields (ID, name, timestamps, archived status, webapp URL). It does not discuss pagination or sorting, but for a zero-parameter read-only list tool with an output schema, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose, followed by a compact bullet list of return fields. Every line adds value, and there is no redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, read-only, output schema provided), the description covers what the caller needs to know about the result. It lacks explicit notes about potential result size or pagination, but this is a minor gap for a simple list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the schema coverage is 100% by definition. The description appropriately focuses on the output, which is more relevant here, so no additional parameter guidance is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('projects') and clearly distinguishes this from sibling tools like list_tasks or list_folders. It also specifies the scope ('all projects') and the nature of the returned data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: to get a basic overview of all projects. It does not explicitly mention when to prefer this over alternatives like quick_search or list_recent_activity, nor does it provide exclusions, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_activityARead-only
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
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | Number of hours to look back (default: 24, use 168 for a week) | |
| task_id | No | Optional: Filter by specific task ID | |
| user_id | No | Optional: Filter by specific user/person ID | |
| item_type | No | Optional: Filter by item type. Accepted values include: Task, Page, Project, Person, Discussion, TimeEntry, Section, TaskList, Dashboard, Team. Note: This list is not exhaustive. | |
| event_type | No | Optional: Filter by event type. Common values include: create, copy, edit, delete. Note: Use get_tasks with filter[status][eq]=2 to find closed tasks. | |
| project_id | No | Optional: Filter by specific project ID | |
| max_results | No | Optional maximum number of activities to return (max: 200) | |
| activity_type | No | Optional: Filter by activity type (1: Comment, 2: Changeset, 3: Email) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, and the description adds behavioral context beyond that: it says the feed is 'summarized' and returned in 'chronological order.' It also lists what types of activities are included. These details help set expectations without conflicting with the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear summary and then provides a list of examples. While the example list is lengthy (7 lines), each example is concise and directly shows parameter usage. The structure is efficient and avoids unnecessary verbosity, though it could be trimmed slightly without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 optional parameters and an output schema (not shown), the description does not need to detail return values. It explains the scope of activities, the time window, and provides extensive examples covering various filters. It is sufficiently complete for an agent to understand how to invoke it appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter is individually described. The description adds value by illustrating parameter combinations through examples (e.g., hours=168, project_id=343136). This demonstrates how parameters interact and clarifies practical usage beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get a summarized feed of recent activities and updates.' It also enumerates the types of content included (task updates, comments, new documents). While it doesn't explicitly contrast with sibling tools like get_task_history or list_comments, the emphasis on 'feed' and 'activities' makes its broad scope evident.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides numerous usage examples via code snippets (e.g., filtering by hours, project_id, user_id, activity_type). However, it lacks explicit guidance on when to choose this tool over alternatives. The only implicit hint is in the schema for event_type, which suggests using get_tasks for closed tasks, but that's not in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksARead-only
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:
filter[status][eq]=1: Open tasks
filter[status][eq]=2: Closed tasks
filter[workflow_status_category_id][eq]=3: Workflow closed status
filter[board_status][eq]=1: Active board tasks
Returns: Dictionary of tasks matching the provided filters
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort parameter (e.g., 'last_activity_at', '-last_activity_at', 'created_at', 'due_date'). Use '-' prefix for descending order. Defaults to '-last_activity_at' (most recent first). | -last_activity_at |
| user_id | No | Filter tasks by assignee/user ID | |
| page_size | No | Optional number of tasks per page (max 200) | |
| project_id | No | Filter tasks by project ID | |
| page_number | No | Page number for pagination | |
| extra_filters | No | Additional Productive query filters using API syntax. Common filters: filter[status][eq] (1: open, 2: closed), filter[due_date][gte] (date), filter[workflow_status_category_id][eq] (1: not started, 2: started, 3: closed). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so no contradiction. The description adds details on pagination behavior, default sort order, and extra filter syntax, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear structure: one-sentence summary, bullet details, examples, and return type. Every sentence adds information, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (6 params, nested objects) and presence of an output schema, the description covers filtering, pagination, and provides useful examples. It doesn't explain error handling or empty results, but these are minor omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the opt-in nature of parameters and providing concrete examples for extra_filters, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists tasks with optional filtering and pagination, using a specific verb and resource. It distinguishes from sibling tools like get_task and list_todos by its focus on listing multiple tasks with filters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context with 'All parameters are optional - omit to fetch all tasks' and examples. However, it does not explicitly contrast with alternatives like get_task for single-task retrieval, though the purpose implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_time_entriesARead-only
List time entries with optional date and relationship filters.
Returns logged work records and related references (person/service/task).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Optional date filter (YYYY-MM-DD) | |
| after | No | Optional lower bound date filter (YYYY-MM-DD) | |
| limit | No | Maximum number of time entries to return (max 200) | |
| before | No | Optional upper bound date filter (YYYY-MM-DD) | |
| task_id | No | Optional task ID filter | |
| person_id | No | Optional person ID filter | |
| project_id | No | Optional project ID filter | |
| service_id | No | Optional service ID filter | |
| page_number | No | Page number for pagination |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds that the tool returns 'logged work records and related references', providing context beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the purpose. Every word adds value, with no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered. The description mentions 'related references' which hints at the output structure. However, pagination behavior is not described (though parameters indicate it).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for all 9 parameters. The description adds a high-level summary of filters but no additional meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists time entries with optional date and relationship filters, specifying the verb 'list' and resource 'time entries'. It distinguishes itself from sibling tools which focus on other entities (e.g., tasks, people, folders).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool or its alternatives. Since there are no sibling tools for time entries, usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_todosARead-only
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:
Checkbox item text and completion status
Assignee information
Parent task details with project context
Due dates and priority relative to parent task
Estimated vs actual time for checklist items
Filter by task_id to get all checklist items for a specific task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | Productive task ID to filter todos by | |
| page_size | No | Optional number of todos per page (max 200) | |
| page_number | No | Page number for pagination | |
| extra_filters | No | Additional Productive query filters using API syntax. Common filters: filter[task_id][eq] (ID), filter[status][eq] (1: open, 2: closed), filter[assignee_id][eq] (ID). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description complements this by detailing the return fields (checkbox text, completion status, assignee, etc.), adding behavioral context beyond the annotation. No destructive actions are implied, and the description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, and includes a returns section and usage guidance without any redundant or verbose content. Every sentence contributes to clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (context signals indicate its existence), the description covers the key aspects: purpose, usage, return fields, and filtering. However, it does not mention pagination defaults or the absence of required parameters, though these are covered by the schema. Overall, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add significant meaning beyond the schema except for mentioning 'filter by task_id,' which is already in the schema. The extra_filters parameter is described in the schema with examples, so the description adds minimal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List todo checklist items with optional filtering by task,' using a specific verb and resource. It distinguishes from the sibling tool get_todo, which provides full details of a specific todo.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance: 'Use this when: You need to browse or filter checklist items across tasks... Use get_todo when you need full details of a specific todo.' This directly tells the agent when to use this tool versus an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workflow_statusesARead-only
List workflow statuses from Productive.
Useful for understanding valid task status values by workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of workflow statuses to return (max 200) | |
| category_id | No | Optional category filter: 1 = Not Started, 2 = Started, 3 = Closed | |
| workflow_id | No | Optional workflow ID to filter statuses |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds that it 'lists' statuses, consistent with read-only behavior. No contradictory or additional behavioral details are provided beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is extremely concise: two sentences that get straight to the point with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, existence of output schema, and annotations, the description adequately covers the context. It explains what the tool returns and its purpose, though more detail about default behavior could be added.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% coverage with parameter descriptions. The tool description does not add any extra meaning or context beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists workflow statuses from Productive, and highlights its utility for understanding valid task status values by workflow. Distinguishes itself from sibling tools which list other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used for understanding valid task statuses, which provides context on when to use it. However, it does not explicitly state when not to use it or name alternatives, though sibling tools are distinct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quick_searchARead-only
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
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| query | Yes | Search query string | |
| per_page | No | Results per page | |
| deep_search | No | Whether to perform deep search | |
| search_types | No | List of types to search (action, project, task, page). Defaults to all. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include readOnlyHint=true, so the safe-read aspect is covered. The description goes beyond by explaining the 'deep_search' parameter semantics and its default behavior, which adds behavioral context. It does not contradict annotations, and the description adds value by clarifying the search breadth and depth options.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear summary, return-section, and examples. Each sentence earns its place by defining purpose, explaining output, and providing practical usage. It is appropriately sized for the tool's complexity and front-loads the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and extensive annotations, so the description need not detail return values. Given the complexity (5 parameters, 1 required), the description covers purpose, usage examples, and behavior. The schema + annotations provide technical details, and the description adds qualitative guidance, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already has 100% coverage, so description baseline is 3. The description adds some value by showing examples of usage, but it does not provide additional details on parameters like page or per_page beyond what schema lists. The search_types parameter is explained briefly in schema, and description reinforces it via examples. Overall, schema covers semantics adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Quick search across projects, tasks, pages, and actions' with a specific verb and resource, and differentiates from siblings like list_projects and get_task by focusing on cross-type search. It also provides examples that reinforce its scope, making it distinct and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains it is optimized for quick lookups and general search queries, implying use cases. It gives examples with search_types to show filtering but does not explicitly state when NOT to use it or mention alternatives like list_tasks for specific searches. However, the examples provide clear context and scenario guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v0.2.8- Changed
get_task1 field changed- added
Input schema / properties / comment_limitAdded value: +{ + "default": 5, + "description": "Number of most recent comments to include (default: 5, max: 200)", + "type": "integer" +}
6 tool updates
v0.2.7- Added
get_folder - Added
list_comments - Added
list_pages - Added
list_projects - Added
list_recent_activity - Added
quick_search
21 tool updates
v0.2.0- Removed
get_attachments - Removed
get_comments - Changed
get_page1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Removed
get_pages - Removed
get_people - Changed
get_person1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Removed
get_projects - Removed
get_recent_activity - Changed
get_task1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_task_history1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Removed
get_tasks - Changed
get_todo1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Removed
get_todos - Added
list_attachments - Added
list_folders - Added
list_people - Added
list_tasks - Added
list_time_entries - Added
list_todos - Added
list_workflow_statuses - Removed
quick_search
13 tool updates
v1.0.0- Added
get_attachments - Removed
get_comment - Changed
get_comments2 fields changed- changed
Input schema / properties / extra_filters / descriptionPrevious value: -"Additional Productive query filters (e.g. {'filter[discussion_id]': '123'})"New value: +"Additional Productive query filters using API syntax. Common filters: filter[project_id][eq] (ID), filter[task_id][eq] (ID), filter[discussion_id][eq] (ID)." - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of comments per page (max 200)"New value: +"Optional number of comments per page (max 200)"
- Added
get_page - Added
get_pages - Added
get_people - Added
get_person - Added
get_recent_activity - Changed
get_task1 field changed- changed
Input schema / properties / task_id / descriptionPrevious value: -"Productive task ID"New value: +"The unique Productive task identifier (internal ID)"
- Added
get_task_history - Changed
get_tasks4 fields changed- changed
Input schema / properties / extra_filters / descriptionPrevious value: -"Additional Productive query filters (e.g. {'filter[status][eq]': 'open'})"New value: +"Additional Productive query filters using API syntax. Common filters: filter[status][eq] (1: open, 2: closed), filter[due_date][gte] (date), filter[workflow_status_category_id][eq] (1: not started, 2: started, 3: closed)." - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of tasks per page (max 200)"New value: +"Optional number of tasks per page (max 200)" - changed
Input schema / properties / project_id / descriptionPrevious value: -"Productive project ID to filter tasks by"New value: +"Filter tasks by project ID" - added
Input schema / properties / user_idAdded value: +{ + "default": null, + "description": "Filter tasks by assignee/user ID", + "type": "integer" +}
- Changed
get_todos2 fields changed- changed
Input schema / properties / extra_filters / descriptionPrevious value: -"Additional Productive query filters (e.g. {'filter[status]': '1'})"New value: +"Additional Productive query filters using API syntax. Common filters: filter[task_id][eq] (ID), filter[status][eq] (1: open, 2: closed), filter[assignee_id][eq] (ID)." - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of todos per page (max 200)"New value: +"Optional number of todos per page (max 200)"
- Added
quick_search
7 tool updates
- First observed
get_comment - First observed
get_comments - First observed
get_projects - First observed
get_task - First observed
get_tasks - First observed
get_todo - First observed
get_todos
TDQS
Each tool targets a distinct resource or action (e.g., tasks, todos, pages, people, comments, attachments). Quick search, activity feed, and entity-specific list/get operations are clearly differentiated with detailed descriptions, so there is no ambiguity in selection.
Naming follows a consistent 'list_*' and 'get_*' pattern for most tools, but 'quick_search' deviates slightly (adjective + noun rather than verb + noun). The pattern is otherwise uniform and readable, so the minor exception does not cause confusion.
With 18 tools, the set is slightly above the typical 3-15 range, but each tool corresponds to a specific entity or operation (list/get for projects, folders, tasks, todos, pages, people, etc.) and none feel redundant. The count is reasonable for a comprehensive read-only API.
The toolset covers listing and retrieving for most core entities (tasks, pages, people, comments, etc.) and includes cross-entity search and activity feeds. However, it is entirely read-only—there are no create, update, or delete operations, which may be a gap depending on the intended use case. Some entity-specific getters (e.g., get_comment, get_attachment) are missing, though list operations are present.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
A Model Context Protocol server for Wix AI tools
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
FlicenseBqualityDmaintenanceA Model Context Protocol server that provides AI agents with read-only access to Rossum API resources (queues, schemas, hooks, workspaces) for analysis purposes.61-- AlicenseBqualityDmaintenanceA Model Context Protocol server implementation compatible with Todoist API, allowing AI agents to interact with task management functionality through standardized MCP tools.51201MIT
- AlicenseNot gradedqualityCmaintenanceA unified Model Context Protocol server that provides a consistent interface for AI assistants to interact with productivity tools like Linear, GitHub, Slack, and Notion. It enables users to search, retrieve, and manage tasks and data across multiple workplace services from a single endpoint.20MIT
- AlicenseAqualityCmaintenanceAn MCP server for Productive.io that enables users to log time, inspect projects, and manage time entries using natural language commands. It features fuzzy project matching, local caching, and remembers default services per project for streamlined time tracking.14MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/druellan/Productive-Simple-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server