Skip to main content
Glama
qpiai

Zoho Projects MCP Server

by qpiai

Zoho Projects MCP Server

A Model Context Protocol (MCP) server that provides integration with Zoho Projects API. This server enables AI assistants to interact with Zoho Projects for managing projects, tasks, issues, milestones, and more.

Features

Supported Operations

  • Portal Management

    • List all portals

    • Get portal details

  • Project Management

    • List projects

    • Get project details

    • Create new projects

    • Update existing projects

    • Delete projects (move to trash)

  • Task Management

    • List tasks (portal or project level)

    • Get task details

    • Create tasks

    • Update tasks

    • Delete tasks

  • Issue Management

    • List issues (portal or project level)

    • Get issue details

    • Create issues

    • Update issues

  • Phase/Milestone Management

    • List phases

    • Create phases

  • Search

    • Search across portal or project

    • Filter by module (projects, tasks, issues, milestones, forums, events)

  • User Management

    • List users in portal or project

Related MCP server: Todoist MCP Server

Prerequisites

  1. Node.js (v18 or higher)

  2. Zoho Projects Account with API access

  3. Zoho OAuth Credentials

Setup

1. Get Zoho OAuth Credentials (Detailed Guide)

Step 1: Create a Zoho Developer Application

  1. Go to Zoho API Console

  2. Click "Add Client" button

  3. Choose "Self Client" (recommended for personal use) or "Server-based Applications"

  4. Fill in the application details:

    • Client Name: e.g., "Zoho Projects MCP"

    • Homepage URL: Your website or http://localhost for testing

    • Authorized Redirect URIs: http://localhost:8080/callback (or your preferred redirect URL)

  5. Click "Create" and note down:

    • Client ID (e.g., 1000.XXXXXXXXXX)

    • Client Secret (keep this secure!)

Step 2: Generate Authorization Code

  1. Build the authorization URL with required scopes:

    https://accounts.zoho.{REGION}/oauth/v2/auth?
      scope=ZohoProjects.portals.ALL,ZohoProjects.projects.ALL,ZohoProjects.tasks.ALL,ZohoProjects.bugs.ALL,ZohoProjects.milestones.ALL,ZohoProjects.users.READ,ZohoSearch.securesearch.READ
      &client_id=YOUR_CLIENT_ID
      &response_type=code
      &access_type=offline
      &redirect_uri=YOUR_REDIRECT_URI

    Replace {REGION} with your region:

    • US: com

    • EU: eu

    • IN: in

    • AU: com.au

    • CN: com.cn

  2. Open this URL in your browser

  3. Log in to your Zoho account and authorize the application

  4. You'll be redirected to your redirect URI with a code parameter in the URL:

    http://localhost:8080/callback?code=1000.XXXXX.XXXXX&location=in&accounts-server=https://accounts.zoho.in
  5. Copy the code value (valid for ~2 minutes, use it immediately!)

Step 3: Exchange Code for Tokens

Use this curl command to get your access and refresh tokens:

curl -X POST https://accounts.zoho.{REGION}/oauth/v2/token \
  -d "code=YOUR_AUTHORIZATION_CODE" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "redirect_uri=YOUR_REDIRECT_URI" \
  -d "grant_type=authorization_code"

Response will contain:

{
  "access_token": "1000.xxxx.yyyy",
  "refresh_token": "1000.zzzz.aaaa",
  "expires_in": 3600,
  "api_domain": "https://www.zohoapis.in",
  "token_type": "Bearer"
}

Important: Save both tokens:

  • access_token: Valid for 1 hour (auto-refreshed by the server)

  • refresh_token: Long-lived, used to get new access tokens

Step 4: Find Your Portal ID

Method 1: From URL

  1. Go to your Zoho Projects in browser

  2. Look at the URL: https://projects.zoho.{REGION}/portal/{PORTAL_ID}/...

  3. The number after /portal/ is your Portal ID (e.g., 60028147039)

Method 2: Using API

curl -X GET https://projectsapi.zoho.{REGION}/api/v3/portals \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN"

Response will list all your portals with their IDs.

Step 5: Verify Credentials

Test your setup with this API call:

curl -X GET https://projectsapi.zoho.{REGION}/api/v3/portal/YOUR_PORTAL_ID/projects \
  -H "Authorization: Zoho-oauthtoken YOUR_ACCESS_TOKEN"

Expected: JSON response with your projects list If error: Check token, portal ID, and API domain match your region

Required Scopes Summary

Make sure your OAuth token has these scopes:

  • ZohoProjects.portals.ALL - Portal operations

  • ZohoProjects.projects.ALL - Project management

  • ZohoProjects.tasks.ALL - Task management

  • ZohoProjects.bugs.ALL - Issue/bug management

  • ZohoProjects.milestones.ALL - Milestone/phase management

  • ZohoProjects.users.READ - User information

  • ZohoSearch.securesearch.READ - Search functionality

2. Setup and Installation

Node.js Setup

Prerequisites:

  • Node.js (v18 or higher)

Steps:

  1. Clone and install:

git clone <repository-url>
cd zoho-mcp
npm install
npm run build
  1. Create .env file with your credentials (see Configuration section below)

  2. Run the server:

# Stdio server (for local MCP clients)
npm start

# HTTP server (for remote access)
npm run start:http

3. Configuration

Create a .env file in the project root with the following variables:

# OAuth credentials (required)
ZOHO_ACCESS_TOKEN=your_access_token_here
ZOHO_REFRESH_TOKEN=your_refresh_token_here
ZOHO_CLIENT_ID=your_client_id_here
ZOHO_CLIENT_SECRET=your_client_secret_here

# Portal configuration (required)
ZOHO_PORTAL_ID=your_portal_id_here

# API domain (optional, choose based on your region)
ZOHO_API_DOMAIN=https://projectsapi.zoho.com
ZOHO_ACCOUNTS_DOMAIN=https://accounts.zoho.com

# HTTP Server configuration (optional, for remote access)
HTTP_PORT=3001
ALLOWED_ORIGINS=http://localhost:3000
ALLOWED_HOSTS=127.0.0.1,localhost

Region-specific domains:

  • US: projectsapi.zoho.com / accounts.zoho.com

  • EU: projectsapi.zoho.eu / accounts.zoho.eu

  • IN: projectsapi.zoho.in / accounts.zoho.in

  • AU: projectsapi.zoho.com.au / accounts.zoho.com.au

  • CN: projectsapi.zoho.com.cn / accounts.zoho.com.cn

4. Configure Claude Desktop

Add to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

For Node.js Setup:

{
  "mcpServers": {
    "zoho-projects": {
      "command": "node",
      "args": ["/absolute/path/to/zoho-mcp/dist/index.js"],
      "env": {
        "ZOHO_ACCESS_TOKEN": "your_access_token_here",
        "ZOHO_REFRESH_TOKEN": "your_refresh_token_here",
        "ZOHO_CLIENT_ID": "your_client_id_here",
        "ZOHO_CLIENT_SECRET": "your_client_secret_here",
        "ZOHO_PORTAL_ID": "your_portal_id_here",
        "ZOHO_API_DOMAIN": "https://projectsapi.zoho.in",
        "ZOHO_ACCOUNTS_DOMAIN": "https://accounts.zoho.in"
      }
    }
  }
}

Usage Examples

Once configured, you can use Claude to interact with Zoho Projects:

List Projects

Can you list all my Zoho Projects?

Create a New Project

Create a new project called "Website Redesign" with description "Redesign company website" starting on 2025-01-15 and ending on 2025-03-31

List Tasks

Show me all tasks in project ID 1234567890

Create a Task

Create a high priority task called "Design homepage mockup" in project 1234567890, due on 2025-02-15
Search for "bug fix" in all modules

List Issues

Show me all issues in project 1234567890

Project Structure

zoho-projects-mcp-server/
├── src/
│   └── index.ts          # Main server implementation
├── dist/                  # Compiled JavaScript (generated)
├── package.json
├── tsconfig.json
└── README.md

Available Tools

The server provides the following MCP tools:

  1. list_portals - Get all portals

  2. get_portal - Get portal details

  3. list_projects - List all projects

  4. get_project - Get project details

  5. create_project - Create a new project

  6. update_project - Update a project

  7. delete_project - Delete a project

  8. list_tasks - List tasks

  9. get_task - Get task details

  10. create_task - Create a task

  11. update_task - Update a task

  12. delete_task - Delete a task

  13. list_issues - List issues

  14. get_issue - Get issue details

  15. create_issue - Create an issue

  16. update_issue - Update an issue

  17. list_phases - List phases/milestones

  18. create_phase - Create a phase

  19. search - Search portal or project

  20. list_users - List users

Troubleshooting

Authentication Issues

  • Ensure your access token is valid and not expired

  • Verify the token has the required scopes

  • Check that the portal ID is correct

API Errors

  • Check the Zoho API documentation for rate limits

  • Ensure you're using the correct API domain for your region

  • Verify that the user has appropriate permissions

Connection Issues

  • Restart Claude Desktop after configuration changes

  • Check the Claude Desktop logs for error messages

  • Verify the server path in the configuration

OAuth Token Management

Token Expiration

Access tokens expire after 1 hour (3600 seconds). This MCP server automatically refreshes tokens using the refresh token.

Manual Token Refresh

If you need to manually refresh your access token:

# For India region (accounts.zoho.in)
curl -X POST https://accounts.zoho.in/oauth/v2/token \
  -d "refresh_token=YOUR_REFRESH_TOKEN" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "grant_type=refresh_token"

# For other regions, use the appropriate accounts domain:
# US: https://accounts.zoho.com/oauth/v2/token
# EU: https://accounts.zoho.eu/oauth/v2/token
# AU: https://accounts.zoho.com.au/oauth/v2/token
# CN: https://accounts.zoho.com.cn/oauth/v2/token

Response example:

{
  "access_token": "1000.xxx.yyy",
  "scope": "ZohoProjects.portals.ALL ZohoProjects.projects.ALL...",
  "api_domain": "https://www.zohoapis.in",
  "token_type": "Bearer",
  "expires_in": 3600
}

Automatic Token Refresh

The MCP server automatically handles token refresh. Configure the following environment variables:

ZOHO_REFRESH_TOKEN=your_refresh_token_here
ZOHO_CLIENT_ID=your_client_id_here
ZOHO_CLIENT_SECRET=your_client_secret_here
ZOHO_ACCOUNTS_DOMAIN=https://accounts.zoho.in  # Match your region

The server will automatically refresh the access token before it expires.

API Reference

For detailed API documentation, visit: https://projects.zoho.com/api-docs

License

MIT

Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.

Support

For issues related to:

  • MCP Server: Open an issue in this repository

  • Zoho Projects API: Contact Zoho support or check their documentation

  • Claude Desktop: Check Anthropic's documentation

Available Tools

20 tools
create_issueD

Create a new issue

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
titleYesIssue title
descriptionNoIssue description
severityNoIssue severity
due_dateNoDue date (YYYY-MM-DD)

TDQS

D1.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It fails to mention whether creating an issue requires an existing project, what side effects occur, what the response contains, or any permissions needed. For a mutating operation, this is a severe transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, but this is under-specification rather than effective conciseness. It does not earn its place because it adds no information beyond the tool name, and it omits critical context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters, no annotations, and no output schema, the description is completely inadequate. It does not explain the significance of project_id and title, the severity enum, or what the outcome of a successful creation is, leaving an agent unable to correctly select and invoke the tool.

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 has 100% coverage with descriptions for all five parameters, so the baseline is 3. The description adds no parameter-specific meaning beyond what the schema already provides; it only says 'create a new issue' without elaborating on required fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create a new issue' is a tautological restatement of the tool name 'create_issue'. It provides no additional scope or context that would distinguish it from sibling tools such as update_issue or list_issues beyond the verb already present in the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given regarding when to use this tool versus alternatives. There is no mention of prerequisites like an existing project, relationship to other issue-related tools, or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_phaseC

Create a new phase/milestone

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
nameYesPhase name
start_dateNoStart date (YYYY-MM-DD)
end_dateNoEnd date (YYYY-MM-DD)
owner_zpuidNoOwner user ZPUID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'Create' which implies a write/mutation operation, but doesn't address permissions, side effects, error conditions, or what happens on success (e.g., returns a phase ID). For a creation tool with zero annotation coverage, this is a significant gap in transparency.

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 at just 4 words ('Create a new phase/milestone'), with zero wasted words. It's front-loaded with the core action and resource. Every word earns its place by clearly communicating the tool's purpose without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with 5 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what happens after creation, what permissions are needed, how it relates to existing phases, or what the tool returns. The agent would need to guess about important behavioral aspects not covered by the minimal description.

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 documents all 5 parameters with their types and descriptions. The description adds no additional parameter information beyond what's in the schema. This meets the baseline of 3 for high schema coverage, but doesn't provide extra context like parameter relationships or examples.

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 action ('Create') and resource ('new phase/milestone'), making the purpose immediately understandable. It distinguishes this from sibling tools like create_project or create_task by specifying the type of entity being created. However, it doesn't explicitly contrast with list_phases or other phase-related tools, keeping it from a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing project), when not to use it, or how it relates to sibling tools like list_phases or update_project. This leaves the agent without contextual usage instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_projectC

Create a new project

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name
descriptionNoProject description
start_dateNoStart date (YYYY-MM-DD)
end_dateNoEnd date (YYYY-MM-DD)
is_publicNoIs project public

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action of creating a project, without mentioning side effects, permissions, reversibility, or any constraints. This is insufficient for a mutation tool.

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 a single, short sentence with no fluff or unnecessary words. However, it is redundant with the tool name and does not earn its place by adding unique information, slightly reducing the score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, no output schema, no annotations), the description is far too minimal. It lacks information about return values, edge cases, or behavioral context that would help an agent use the tool 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 covers 100% of parameters with descriptions, so the baseline is 3. The description adds no additional semantic meaning beyond what the schema already provides, but it does not need to since the schema is thorough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Create a new project' essentially restates the tool name 'create_project' with no additional detail. It is a tautology that provides no insight beyond the name itself, failing to add value or clarify the tool's unique purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool, what prerequisites exist, or how it relates to sibling tools like update_project or list_projects. There is no context for appropriate usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_taskC

Create a new task in a project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
nameYesTask name
descriptionNoTask description
priorityNoTask priority
start_dateNoStart date (YYYY-MM-DD)
end_dateNoEnd date (YYYY-MM-DD)
assignee_zpuidNoAssignee user ZPUID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states it creates a task without disclosing behavioral traits like permissions needed, whether it's idempotent, error handling, or what happens on success (e.g., returns a task ID). This is inadequate for a mutation tool with zero annotation coverage.

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 a single, efficient sentence with no wasted words, making it easy to parse. It's appropriately sized and front-loaded with the core action, earning its place without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns, error conditions, or behavioral nuances, leaving significant gaps in understanding how to use it effectively in 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?

Schema description coverage is 100%, so the schema fully documents all 7 parameters. The description adds no additional meaning beyond implying creation, which is already clear from the tool name. Baseline score of 3 is appropriate as the schema does the heavy lifting.

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 action ('Create') and resource ('new task in a project'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'create_issue' or 'create_phase' which also create items in similar contexts, missing explicit distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'create_issue' or 'create_phase', nor does it mention prerequisites such as needing an existing project. It simply states what it does without context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_projectA

Delete a project (moves to trash)

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that deletion is not permanent ('moves to trash'), which is a meaningful behavioral trait. However, it does not mention side effects on associated projects/tasks, permission requirements, or how restoration occurs, leaving notable gaps.

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 a single, concise sentence that front-loads the action and adds a parenthetical clarification. Every word earns its place; no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter delete tool, the description is minimally adequate but lacks details about return values, error conditions, whether the deletion is cascading, and what 'trash' means for recovery (especially since no restore_project sibling exists). These gaps are significant given the lack of an output schema.

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 already provides a 100% description coverage for the single parameter (project_id: 'Project ID'). The tool description adds no further meaning or context to the parameter, so the baseline of 3 applies.

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 action ('Delete a project') and the resource affected, plus the behavioral nuance 'moves to trash'. It distinguishes this from sibling tools like delete_task and delete_phase by naming the specific resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/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 versus alternatives, nor any exclusions or prerequisites. The context is limited to the action itself, so the agent must infer usage from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_taskB

Delete a task

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
task_idYesTask ID

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state whether deletion is permanent, if the task can be restored (despite the existence of restore_task), or any side effects such as cascading deletion or auth requirements.

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 a single, clear sentence with no wasted words. It is front-loaded and appropriately sized for a simple delete operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations or output schema, the description is too sparse. It does not explain the consequence of the delete (e.g., whether it is soft or hard delete), what happens to associated data, or what the response indicates. This is incomplete for a destructive action.

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 covers 100% of parameters with basic descriptions, so the baseline is 3. The description adds no further meaning to task_id and project_id, but since the schema already documents them, no deduction is applied.

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 "Delete a task" uses a specific verb (delete) and resource (task), clearly stating what the tool does. It distinguishes from sibling delete tools by specifying the resource type, so there is no ambiguity about its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like delete_project or restore_task. There is no mention of prerequisites, constraints, or when deletion is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_issueB

Get details of a specific issue

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
issue_idYesIssue ID

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. 'Get details' clearly implies a read-only operation, but it does not disclose error handling, authorization needs, or response format. This is adequate for a simple getter but minimal.

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 a single, focused sentence with no redundant wording. It is front-loaded with the verb and resource, making it maximally efficient.

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?

For a low-complexity getter with fully documented parameters, the description is functional and sufficient for basic selection. However, the absence of annotations and output schema means a bit more context about expected return or use case would enhance completeness, though it is not critically lacking.

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 provides full descriptions for both parameters (project_id and issue_id), achieving 100% schema coverage. The description adds no parameter-level meaning beyond what the schema already states, so baseline 3 applies.

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 uses a specific verb ('Get') and resource ('specific issue'), clearly indicating a single-issue retrieval operation. It is unambiguous and inherently distinguishes from list_issues, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus list_issues or other get_* tools. The description states only what the tool does, not the context or conditions under which it should be selected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_portalB

Get details of a specific portal

ParametersJSON Schema
NameRequiredDescriptionDefault
portal_idYesPortal ID

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states 'Get details' without elaborating on the response structure, potential errors, or whether any permissions are required. This does not add meaningful context beyond the tool's name.

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?

A single, succinct sentence that is front-loaded with the key information. There is no redundant phrasing or extraneous content, making it highly concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and no output schema, so the description is minimally viable. However, it does not specify what 'details' include or how it relates to list_portals, leaving some ambiguity about the exact scope of information returned. Completeness is adequate but not thorough.

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 covers 100% of the parameter (portal_id) with a basic description 'Portal ID'. The description adds no further semantic detail, such as expected format or example values. Baseline score of 3 is appropriate given full 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 'Get details of a specific portal' uses a clear verb-resource pair, precisely identifying the action and target. It is easily distinguished from sibling tools like list_portals or get_project, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as list_portals (to discover portal IDs) or get_project. There is no mention of prerequisites or contexts where this tool is preferred, leaving the usage decision to the agent's inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_projectA

Get details of a specific project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are available, so the description carries the full burden for behavioral disclosure. It only says 'Get details' and does not mention whether the operation is read-only, requires specific permissions, or how it handles a non-existent project ID. This leaves the agent uncertain about important behavioral traits.

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 a single, front-loaded sentence with no redundant words. It efficiently conveys the core action and resource, making it appropriately concise for a simple get tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description is adequate but sparse. It does not describe the return format or error behavior, and with no annotations, contextual information is minimal. However, for a basic get operation, the description covers the essential purpose.

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 fully describes the only parameter (project_id) with clear meaning, achieving 100% schema description coverage. The tool description adds no additional parameter context, but since the schema already provides the necessary semantics, the baseline score applies.

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 the verb 'Get' with a specific resource 'details of a specific project', clearly indicating a retrieval operation for one project. This distinguishes it from sibling tools like list_projects (which lists all) and mutation tools such as create_project or update_project.

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 this is used when a single project's details are needed, but it does not explicitly state when to use it versus alternatives like list_projects or get_task. No exclusions or alternative tool references are provided, so usage guidance is solely implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_taskC

Get details of a specific task

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
task_idYesTask ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only implies a read operation ('Get details') but omits information about authentication, response format, failure behavior, or whether the task must exist.

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 a single, concise sentence that front-loads the verb and avoids superfluous content. It is efficient but could include a brief note about required identifiers without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (two parameters, no nested objects), the description is minimally adequate, but it does not explain what 'details' entails or what the response looks like. The absence of an output schema makes this lack of return information more significant.

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?

Both parameters are already documented in the schema with descriptions ('Task ID', 'Project ID'), achieving 100% schema coverage. The description adds no additional meaning or context beyond what the schema provides, so the baseline of 3 is appropriate.

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 action ('Get') and the resource ('details of a specific task'), making it easy to understand the tool's core purpose. It distinguishes itself from list_tasks by focusing on a single task, though it does not explicitly call out alternatives like get_task_by_prefix.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as list_tasks or get_task_by_prefix. It leaves the agent to infer usage context from the name and schema, which is insufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_issuesB

List issues from a project or portal

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID (optional for portal-level)
pageNoPage number
per_pageNoItems per page

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description must disclose behavioral traits. It does not mention pagination (despite page/per_page parameters), nor clarify that project_id is optional and lists portal-level issues when omitted. This is a gap for a list tool.

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?

One short sentence that gets straight to the point. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and no annotations; the description is too sparse. It should mention that it returns a paginated list of issues and how project_id scoping works, to fully guide the 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?

Schema coverage is 100%, so parameters are already described. The description's 'project or portal' phrase adds slight context aligning with project_id's description, but no new meaning about page/per_page.

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 'issues', with scope 'from a project or portal'. This clearly conveys the operation and distinguishes it from sibling tools like get_issue and create_issue.

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 issues but provides no explicit guidance on when to prefer this over get_issue or how it relates to list_projects/list_portals. No alternatives or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_phasesB

List phases/milestones from a project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
pageNoPage number
per_pageNoItems per page

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It indicates a read operation ('List') but does not mention that results are paginated or that it only applies to a single project. It does not describe any side effects or requirements beyond what is in 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no wasted words. It is appropriately front-loaded but could arguably state a bit more without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool and full schema coverage, the description is minimally adequate but leaves gaps: it does not mention pagination, that project_id is required, or what the response contains. Since there is no output schema, this could be improved.

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 already provides descriptions for all three parameters (project_id, page, per_page). The description adds no additional parameter semantics beyond the phrase 'from a project', and does not elaborate on pagination or filtering behavior.

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 action (List) and the resource (phases/milestones) and scopes it to a project, distinguishing it from sibling list tools like list_tasks or list_projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives. It does not mention any exclusions or when not to use, leaving the agent to infer from the tool name and context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_portalsA

Retrieve all Zoho Projects portals

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It indicates a read-only operation ('Retrieve all'), but does not disclose potential pagination, response size, or authentication requirements. For a simple list-all with no parameters, this is adequate but not rich.

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 a single, compact sentence with no redundant words. It front-loads the action and resource, achieving maximum conciseness.

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 params, no output schema), the description sufficiently communicates the action and scope. However, it does not describe the return structure or any pagination behavior, which would be a minor gap for richer context.

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 zero parameters and the schema is empty (100% coverage by default). The description implies no filtering is needed ('all portals'), aligning with the schema. Baseline for 0 params is 4, and the description adds slight semantic confirmation.

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 verb 'Retrieve' and the resource 'all Zoho Projects portals', making it unambiguous. This distinguishes it from siblings like get_portal (single portal) and list_projects (different resource).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus get_portal or list_projects. There are no explicit alternatives or exclusions, leaving the agent to infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsB

List all projects in a portal

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
per_pageNoItems per page

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description says 'List all projects' but the schema includes pagination parameters (page, per_page), meaning a single call does not necessarily return all projects. The lack of annotations places the burden on the description, which fails to disclose pagination behavior, portal selection, or read-only guarantees.

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 a single concise sentence that is easy to parse. However, it omits potentially relevant nuances like pagination and portal context, making it slightly under-specified rather than optimally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 two optional parameters, the description provides a basic understanding but lacks important context: it does not explain how the portal is selected (since no portal parameter exists), how pagination works to retrieve all projects, or what fields are returned. Given the absence of an output schema and annotations, more detail would improve 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%, with both parameters (page, per_page) already documented in the input schema. The description adds no parameter-specific meaning, so the baseline score of 3 applies.

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 clarifies scope ('in a portal'). It clearly distinguishes from siblings like list_portals and get_project, which are named differently and pertain to different resources or actions.

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 (when you need to list projects) but provides no explicit guidance on when to prefer this over alternatives like search or list_tasks. No exclusions or alternative tools are mentioned, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tasksB

List tasks from a project or portal

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID (optional for portal-level)
pageNoPage number
per_pageNoItems per page

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, and the description only states 'List tasks' without disclosing behavior such as pagination defaults, ordering, permissions, or whether results are scoped by portal/project. It adds minimal value beyond the tool's name.

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?

One short sentence front-loaded with the main action, no filler words. Appropriate length and structure for a simple list operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple listing nature, the description is adequate but sparse. It lacks any mention of return format or additional filters beyond what the schema provides, and with no output schema, the agent must infer the response structure.

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 provides 100% parameter coverage (page, per_page, project_id), and the description offers no additional parameter context. The phrase 'from a project or portal' hints at project_id's optionality but the schema already states that.

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 the specific verb 'List' with the resource 'tasks' and clearly states scope ('from a project or portal'), distinguishing it from sibling tools like list_issues and list_projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like search or get_task_by_prefix. It only states what it does, without clarifying exclusions or preferred use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_usersA

List users in a portal or project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoProject ID (optional for portal-level)

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only states 'List users', which implies read-only but does not mention potential pagination, required permissions, or any other side effects or return characteristics. The portal/project scoping is the only behavioral nuance disclosed.

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 a single, front-loaded sentence with no redundant words. It communicates both the action and the scoping in an efficient manner.

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 (one optional parameter, no output schema), the description covers the core purpose and scope adequately. However, it lacks any mention of return value structure or pagination, which would be helpful for an agent, so it is not a perfect 5.

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 covers the project_id parameter fully, including its optionality for portal-level, and the tool description reinforces this by mentioning 'portal or project'. No additional parameter-level detail is added beyond the schema, so 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 uses a specific verb+resource construction, 'List users in a portal or project', clearly identifying the resource and scope. This distinguishes it from sibling tools like list_portals and list_projects, 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?

The description provides clear context that the tool can be used for portal-level or project-level user listing, and the optional project_id parameter aligns with this dual scope. However, it does not explicitly state when not to use it or mention alternatives, though no overlapping user-listing siblings exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_issueD

Update an issue

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
issue_idYesIssue ID
titleNoIssue title
descriptionNoIssue description
severityNoIssue severity

TDQS

D1.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It fails to mention any side effects, permission requirements, updatable fields, or response behavior, leaving the agent with no insight into the tool's operational characteristics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise but under-specified. It repeats the tool name rather than adding useful context; it is not appropriately sized for a tool with 5 parameters and no other supporting documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/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, required fields, enum) and the absence of annotations and output schema, the description is completely inadequate. It leaves the agent without essential context about the update operation's scope and effects.

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 baseline is 3. The description adds no extra parameter semantics beyond the schema, but the schema already documents all parameters adequately, so no penalty is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update an issue' simply restates the tool name, offering no additional specificity about what updating an issue entails or how it differs from sibling update tools like update_task or update_project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, no exclusions, and no context about prerequisites or typical use cases. It is a bare statement with zero usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_projectB

Update an existing project

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
nameNoProject name
descriptionNoProject description
start_dateNoStart date (YYYY-MM-DD)
end_dateNoEnd date (YYYY-MM-DD)
statusNoProject status

TDQS

B3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It merely states 'update' without explaining mutation semantics, permission requirements, reversibility, or error behavior. This is insufficient for a write operation.

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 a single, concise sentence that gets straight to the point. It is front-loaded and contains no unnecessary words, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, a one-sentence description is insufficient. It fails to clarify whether this is a partial update or a full replacement, or what happens when the project doesn't exist. The schema helps but does not cover these behavioral aspects.

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 covers 100% of parameters with descriptions, so the baseline is 3. The description adds no parameter-specific information, but the schema already documents each field adequately.

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 'Update an existing project' has a specific verb (update) and resource (project). It clearly distinguishes from sibling tools like create_project, delete_project, get_project, and list_projects by the action it performs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or any context that would help an agent decide between update_project and other project-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_taskC

Update a task

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID
task_idYesTask ID
nameNoTask name
descriptionNoTask description
priorityNoTask priority
start_dateNoStart date (YYYY-MM-DD)
end_dateNoEnd date (YYYY-MM-DD)

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. 'Update a task' implies a mutation operation but reveals nothing about required permissions, whether updates are partial or complete, what happens to unspecified fields, error conditions, or response format. For a mutation tool with zero annotation coverage, this leaves critical behavioral aspects undocumented.

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 maximally concise with a single three-word phrase. There's no wasted language or unnecessary elaboration. While this conciseness comes at the expense of completeness, the description is perfectly structured for its minimal content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 7 parameters, no annotations, and no output schema, the description is severely inadequate. It doesn't explain what 'updating' entails operationally, what values can be changed, how the system responds, or any behavioral characteristics. The combination of mutation nature and lack of structured metadata demands more descriptive content than provided.

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 all parameters are documented in the schema itself. The description adds no parameter information beyond what's already in the schema - it doesn't explain relationships between parameters, provide examples, or clarify semantics. The baseline score of 3 reflects adequate parameter documentation coming entirely from the schema, not the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update a task' is essentially a tautology that restates the tool name with minimal additional information. While it does specify the resource ('task'), it lacks specificity about what aspects can be updated and doesn't differentiate from sibling update tools like update_issue or update_project. This provides only basic orientation without meaningful elaboration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like update_issue, update_project, and create_task available, there's no indication of when task updates are appropriate versus creating new tasks or updating other entities. No prerequisites, exclusions, or contextual recommendations are mentioned.

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.

  1. 20 tool updates
    • First observedcreate_issue
    • First observedcreate_phase
    • First observedcreate_project
    • First observedcreate_task
    • First observeddelete_project
    • First observeddelete_task
    • First observedget_issue
    • First observedget_portal
    • First observedget_project
    • First observedget_task
    • First observedlist_issues
    • First observedlist_phases
    • First observedlist_portals
    • First observedlist_projects
    • First observedlist_tasks
    • First observedlist_users
    • First observedsearch
    • First observedupdate_issue
    • First observedupdate_project
    • First observedupdate_task

TDQS

B3.3/5.0

Scored across 20 tools

Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Tools are organized by resource (issue, phase, project, task, portal, user) and action (create, get, list, update, delete, search), making it easy for an agent to select the right one. Overlap is minimal, such as list_issues vs. search, but their descriptions clarify distinct use cases.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern throughout, such as create_issue, get_project, list_tasks, update_task, and delete_project. There are no deviations in naming conventions, making the set predictable and easy to navigate for an agent.

Tool Count4/5

With 20 tools, the count is slightly high but reasonable for a project management domain covering multiple resources like issues, tasks, projects, portals, phases, and users. It feels comprehensive rather than bloated, though it borders on the upper limit of ideal scope.

Completeness5/5

The tool surface provides complete CRUD/lifecycle coverage for the domain, including create, get, list, update, and delete operations for key resources like issues, tasks, and projects. There are no obvious gaps, and tools like search and list_users add useful functionality, ensuring agents can handle typical workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    F
    maintenance
    Enables AI models to interact with Freshrelease project management platform through API integration. Supports creating and retrieving projects and tasks, managing status categories, and automating project operations through natural language.
    8
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI assistants to interact with ProjectHub for comprehensive project management through natural language. It provides 25 tools to manage tasks, workspaces, time tracking, notes, and discussions via the ProjectHub API.
    47
    16 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to manage Todocko application data, including tasks, projects, worklogs, and attachments. It supports comprehensive project management operations such as tracking activity, managing Kanban boards, and handling shared project synchronization.
    MIT