Skip to main content
Glama

Productive.io MCP Server

License: MIT Productive-Simple-MCP 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

  1. Clone or download this repository

  2. Install dependencies:

pip install -r requirements.txt

or

uv venv && uv sync

Configuration

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 ID

  • status (int, optional): Folder status filter (1 active, 2 archived). Defaults to 1

  • limit (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 ID

  • category_id (int, optional): Filter by category (1 Not Started, 2 Started, 3 Closed)

  • 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 ID

  • project_id (int, optional): Filter by project ID

  • task_id (int, optional): Filter by task ID

  • service_id (int, optional): Filter by service ID

  • page_number (int, optional): Page number for pagination

  • limit (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 pagination

  • page_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 ID

  • user_id (int, optional): Filter tasks by assignee/user ID

  • page_number (int, optional): Page number for pagination

  • page_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 to comment_limit)

  • todos: up to 100 checklist items, with todos_truncated and todos_note when more exist

  • attachments: each file's id and name (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 activities

  • activity_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 hours

list_comments

Retrieve comments with optional filtering and pagination.

Properties:

  • project_id (int, optional): Filter comments by Productive project ID

  • task_id (int, optional): Filter comments by Productive task ID

  • page_number (int, optional): Page number for pagination

  • page_size (int, optional): Page size for pagination

  • extra_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 ID

  • creator_id (int, optional): Filter pages by creator ID

  • page_number (int, optional): Page number for pagination

  • page_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 pagination

  • page_size (int, optional): Page size for pagination

  • extra_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 ID

  • project_id (int, optional): Filter by specific project ID

  • activity_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 ID

  • max_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 ID

  • page_number (int, optional): Page number for pagination

  • page_size (int, optional): Page size for pagination

  • extra_filters (dict, optional): Additional Productive API filters

Quick search across projects, tasks, pages, and actions.

Properties:

  • query (str): Search query string

  • search_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 resource

  • record_type: Type of resource (project, task, page, etc.)

  • title: Display title (with search highlights removed)

  • subtitle: Additional context or description

  • icon_url: URL to the resource's icon/avatar (if available)

  • status: Current status (active, closed, etc.)

  • project_name: Name of the associated project

  • updated_at: Last update timestamp

  • webapp_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 scan

get_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 title

  • project_id (int, required): Productive project ID where the task will be created

  • description (str, optional): Task description

  • board_id (int, optional): Board ID

  • task_list_id (int, optional): Task list ID

  • assignee_id (int, optional): Assignee/person ID

  • due_date (str, optional): Due date (YYYY-MM-DD)

  • status (str, optional): open or closed (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 update

  • title (str, optional): New task title

  • description (str, optional): New task description

  • assignee_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 — open or closed

  • board_id (int, optional): Move task to this board

  • task_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 to

  • project_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 update

  • body (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 time

  • task_id (int, optional): Task ID to associate the time entry with

  • service_id (int, optional): Service ID to associate the time entry with

  • note (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 update

  • date (str, optional): New date (YYYY-MM-DD)

  • time (float, optional): New time in hours

  • person_id (int, optional): New person ID

  • task_id (int, optional): New task ID

  • service_id (int, optional): New service ID

  • note (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 title

  • project_id (int, required): Productive project ID where the page will be created

  • content (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 update

  • title (str, optional): New page title

  • content (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 to

  • markdown (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/description

  • task_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 update

  • content (str, optional): New todo content

  • completed (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

content (text)

structured_content

Description

hybrid (default)

TOON

JSON dict

Both TOON for token efficiency and structured data for programmatic access

toon

TOON

{ "toon": toonText }

Pure TOON (Token-Optimized Object Notation) with no dual-format overhead

json

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, placement from tasks)

  • HTML stripped from descriptions and comments

  • Empty/null values removed

  • Pagination links removed

  • List views use lightweight output (e.g., get_project_tasks excludes descriptions and relationships)

  • Web app URLs included: Each resource includes a webapp_url field linking directly to the Productive web interface

Response Structure:

  • data: Main resource data (array for collections, object for single items)

  • meta: Pagination and metadata

  • included: 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 tools
get_folderA
Read-only

Get folder details by folder ID.

Productive exposes folders through the /folders endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
folder_idYesProductive folder ID

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_pageA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_idYesThe unique Productive page identifier

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_personA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
person_idYesThe unique Productive person identifier

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_taskA
Read-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_truncated and todos_note when more exist

  • attachments: id and filename for each file attached to the task

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe unique Productive task identifier (internal ID)
comment_limitNoNumber of most recent comments to include (default: 5, max: 200)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_historyA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoNumber of hours to look back for activity history (default: 720 = 30 days)
task_idYesThe unique Productive task identifier (internal ID)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_todoA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
todo_idYesProductive todo ID

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_attachmentsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoOptional number of attachments per page (max 200)
page_numberNoPage number for pagination
extra_filtersNoAdditional Productive query filters using API syntax

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_commentsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idNoProductive task ID to filter comments by
page_sizeNoOptional number of comments per page (max 200)
project_idNoProductive project ID to filter comments by
page_numberNoPage number for pagination
extra_filtersNoAdditional 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

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_foldersA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of folders to return (max 200)
statusNoFolder status filter: 1 = active, 2 = archived
project_idYesProductive project ID to list folders for

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_pagesA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoOptional number of pages per page (max 200)
creator_idNoOptional creator ID to filter pages by
project_idNoOptional project ID to filter pages by
page_numberNoPage number for pagination
extra_filtersNoAdditional 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

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_peopleA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoOptional number of people per page (max 200)
page_numberNoPage number for pagination

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_projectsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_activityA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoNumber of hours to look back (default: 24, use 168 for a week)
task_idNoOptional: Filter by specific task ID
user_idNoOptional: Filter by specific user/person ID
item_typeNoOptional: Filter by item type. Accepted values include: Task, Page, Project, Person, Discussion, TimeEntry, Section, TaskList, Dashboard, Team. Note: This list is not exhaustive.
event_typeNoOptional: 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_idNoOptional: Filter by specific project ID
max_resultsNoOptional maximum number of activities to return (max: 200)
activity_typeNoOptional: Filter by activity type (1: Comment, 2: Changeset, 3: Email)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_tasksA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoSort 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_idNoFilter tasks by assignee/user ID
page_sizeNoOptional number of tasks per page (max 200)
project_idNoFilter tasks by project ID
page_numberNoPage number for pagination
extra_filtersNoAdditional 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

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_entriesA
Read-only

List time entries with optional date and relationship filters.

Returns logged work records and related references (person/service/task).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoOptional date filter (YYYY-MM-DD)
afterNoOptional lower bound date filter (YYYY-MM-DD)
limitNoMaximum number of time entries to return (max 200)
beforeNoOptional upper bound date filter (YYYY-MM-DD)
task_idNoOptional task ID filter
person_idNoOptional person ID filter
project_idNoOptional project ID filter
service_idNoOptional service ID filter
page_numberNoPage number for pagination

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_todosA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idNoProductive task ID to filter todos by
page_sizeNoOptional number of todos per page (max 200)
page_numberNoPage number for pagination
extra_filtersNoAdditional 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

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_statusesA
Read-only

List workflow statuses from Productive.

Useful for understanding valid task status values by workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of workflow statuses to return (max 200)
category_idNoOptional category filter: 1 = Not Started, 2 = Started, 3 = Closed
workflow_idNoOptional workflow ID to filter statuses

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev0.2.8
    • Changedget_task1 field changed
      • addedInput schema / properties / comment_limit
        Added value: +{
        +  "default": 5,
        +  "description": "Number of most recent comments to include (default: 5, max: 200)",
        +  "type": "integer"
        +}
  2. 6 tool updatesv0.2.7
    • Addedget_folder
    • Addedlist_comments
    • Addedlist_pages
    • Addedlist_projects
    • Addedlist_recent_activity
    • Addedquick_search
  3. 21 tool updatesv0.2.0
    • Removedget_attachments
    • Removedget_comments
    • Changedget_page1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Removedget_pages
    • Removedget_people
    • Changedget_person1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Removedget_projects
    • Removedget_recent_activity
    • Changedget_task1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedget_task_history1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Removedget_tasks
    • Changedget_todo1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Removedget_todos
    • Addedlist_attachments
    • Addedlist_folders
    • Addedlist_people
    • Addedlist_tasks
    • Addedlist_time_entries
    • Addedlist_todos
    • Addedlist_workflow_statuses
    • Removedquick_search
  4. 13 tool updatesv1.0.0
    • Addedget_attachments
    • Removedget_comment
    • Changedget_comments2 fields changed
      • changedInput schema / properties / extra_filters / description
        Previous 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)."
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of comments per page (max 200)"New value: +"Optional number of comments per page (max 200)"
    • Addedget_page
    • Addedget_pages
    • Addedget_people
    • Addedget_person
    • Addedget_recent_activity
    • Changedget_task1 field changed
      • changedInput schema / properties / task_id / description
        Previous value: -"Productive task ID"New value: +"The unique Productive task identifier (internal ID)"
    • Addedget_task_history
    • Changedget_tasks4 fields changed
      • changedInput schema / properties / extra_filters / description
        Previous 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)."
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of tasks per page (max 200)"New value: +"Optional number of tasks per page (max 200)"
      • changedInput schema / properties / project_id / description
        Previous value: -"Productive project ID to filter tasks by"New value: +"Filter tasks by project ID"
      • addedInput schema / properties / user_id
        Added value: +{
        +  "default": null,
        +  "description": "Filter tasks by assignee/user ID",
        +  "type": "integer"
        +}
    • Changedget_todos2 fields changed
      • changedInput schema / properties / extra_filters / description
        Previous 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)."
      • changedInput schema / properties / page_size / description
        Previous value: -"Number of todos per page (max 200)"New value: +"Optional number of todos per page (max 200)"
    • Addedquick_search
  5. 7 tool updates
    • First observedget_comment
    • First observedget_comments
    • First observedget_projects
    • First observedget_task
    • First observedget_tasks
    • First observedget_todo
    • First observedget_todos

TDQS

A4/5.0
Disambiguation5/5

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 Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that provides AI agents with read-only access to Rossum API resources (queues, schemas, hooks, workspaces) for analysis purposes.
    6
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    20
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/druellan/Productive-Simple-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server