Skip to main content
Glama

Podio MCP Server

An MCP server for the Podio API. Any MCP client can list, create, read, update, delete and search Podio items, comments, webhooks and files.

Node.js 22+ License: MIT Tools: 20


Table of Contents


Related MCP server: Basecamp MCP Server

Quick Start

Prerequisites: Node.js 22+, Podio developer account (for API credentials), npm

# 1. Clone and enter the project
git clone https://github.com/Vuxified/podio-mcp-server.git
cd podio-mcp-server

# 2. Install dependencies
npm install

# 3. Install the pre-commit hook (auto-regenerates docs on commit)
npm run setup

# 4. Copy env template and fill in your Podio API credentials
cp .env.example .env
# Edit .env with your PODIO_CLIENT_ID and PODIO_CLIENT_SECRET

# 5. Authenticate with Podio (opens browser for OAuth2 login)
npm run auth

# 6. Start the server
npm start

Setup — Local (stdio)

The stdio transport is the default mode, for MCP clients that launch the server locally.

1. Create .env from the template:

cp .env.example .env

2. Fill in the required environment variables:

Variable

Description

PODIO_CLIENT_ID

From your Podio API key page (Settings > API Keys)

PODIO_CLIENT_SECRET

From your Podio API key page

PODIO_REDIRECT_URI

Must be exactly http://localhost:8888/callback

PODIO_TOKEN_PATH

Token file location (default: .podio-tokens.json)

Leave MCP_TRANSPORT empty or unset for stdio mode.

3. Authenticate:

npm run auth

This opens a browser window, completes the OAuth2 flow (including Google SSO), and saves tokens to the path specified by PODIO_TOKEN_PATH.

4. Build:

npm run build

5. Register with your MCP client:

Most clients take a JSON config like this:

{
  "mcpServers": {
    "podio": {
      "command": "node",
      "args": ["/absolute/path/to/podio-mcp-server/dist/index.js"],
      "env": {
        "PODIO_CLIENT_ID": "your_client_id",
        "PODIO_CLIENT_SECRET": "your_client_secret",
        "PODIO_REDIRECT_URI": "http://localhost:8888/callback",
        "PODIO_TOKEN_PATH": "/absolute/path/to/podio-mcp-server/.podio-tokens.json"
      }
    }
  }
}

Replace /absolute/path/to with the actual path to your clone.


Setup — Remote (HTTPS/EC2)

The remote mode runs the server on an EC2 instance behind Nginx with SSL, and connects via Streamable HTTP.

Prerequisites:

  • AWS CLI configured with appropriate credentials

  • SSH key pair for EC2 access

  • A domain with an A record pointing to your EC2 Elastic IP

1. Run the automated deploy script:

npm run deploy

This script automates the full deployment: EC2 instance provisioning, Node.js 22 installation, Nginx reverse proxy configuration, Certbot SSL certificates, and systemd service setup. Set DEPLOY_DOMAIN and CERTBOT_EMAIL before running:

DEPLOY_DOMAIN=mcp.example.com CERTBOT_EMAIL=you@example.com npm run deploy

2. Point your MCP client at the remote server:

{
  "mcpServers": {
    "podio-remote": {
      "type": "streamableHttp",
      "url": "https://mcp.example.com/mcp",
      "headers": { "Authorization": "Bearer <MCP_AUTH_TOKEN>" }
    }
  }
}

Transport switching: The MCP_TRANSPORT environment variable controls which transport is used. Omit or leave blank for stdio (local), set to http for Streamable HTTP (EC2/remote).


Architecture

MCP client
  │
  ▼
MCP Protocol (stdio or Streamable HTTP)
  │
  ▼
podio-mcp-server
├── src/server.ts        ← 20 tool registrations (Zod schemas)
├── src/auth/            ← OAuth2 flow + token manager
├── src/client/          ← Axios interceptors, rate limiting
├── src/types/           ← Podio API type definitions
└── src/utils/           ← Error handling, logging (stderr)
  │
  ▼
Podio REST API (api.podio.com)

Key design decisions:

  • OAuth2 authorization code flow — supports Google SSO (App auth does not)

  • Automatic token refresh with 8-hour TTL

  • All logging to stderr — stdout reserved for JSON-RPC over stdio

  • Rate limit metadata included in every tool response (_meta.rate_limit_remaining)

  • Stateless per-request HTTP transport for EC2 deployment (no session state needed)


Tool Reference

The server exposes 20 tools organized by Podio domain. Parameters, types, and descriptions are extracted directly from source code.

Utility

podio_health_check

Podio Health Check

Verify the MCP server can authenticate with Podio and make an API call. Returns the authenticated user's display name, email, and current rate limit status. Use this tool first to confirm the server is working before using other tools.

No parameters required.

Example:

// Request
{}

// Response (truncated)
{ "data": { "status": "ok", "user": { "name": "Jane Smith", "email": "jane@acme.com" } }, "_meta": { "rate_limit_remaining": 499, "rate_limit_total": 500 } }

Organizations

podio_list_organizations

List Organizations

Returns all organizations the authenticated user belongs to. Each org includes its name, type, and a list of spaces. Use this as the starting point to discover workspaces.

No parameters required.

Example:

// Request
{}

// Response (truncated)
{ "data": [{ "org_id": 12345, "name": "Acme Corp", "url": "https://podio.com/acmecorp", ... }], "_meta": { ... } }

podio_list_spaces

List Spaces

Returns all spaces (workspaces) the authenticated user can access within an organization. Each space includes its name and ID. Use space IDs to list apps.

Parameter

Type

Required

Description

org_id

number

Yes

Organization ID (from podio_list_organizations)

Example:

// Request
{ "org_id": 12345 }

// Response (truncated)
{ "data": [{ "space_id": 67890, "name": "Engineering", "org_id": 12345, ... }], "_meta": { ... } }

Apps

podio_list_apps

List Apps

Returns all apps within a space. Each app includes its name, ID, and status. Use app IDs to get field definitions or work with items.

Parameter

Type

Required

Description

space_id

number

Yes

Space ID (from podio_list_spaces)

include_inactive

boolean

No

Include inactive apps (default: false)

Example:

// Request
{ "space_id": 67890 }

// Response (truncated)
{ "data": [{ "app_id": 11111, "config": { "name": "Bug Tracker", "item_name": "Bug" }, ... }], "_meta": { ... } }

podio_get_app

Get App Details

Returns full app details including all field definitions with types, settings, and option IDs. IMPORTANT: For category fields, the settings.options array contains the option IDs needed for creating/updating items. Always call this before creating items to learn the field structure.

Parameter

Type

Required

Description

app_id

number

Yes

App ID (from podio_list_apps)

Example:

// Request
{ "app_id": 11111 }

// Response (truncated)
{ "data": { "app_id": 11111, "config": { "name": "Bug Tracker" }, "fields": [{ "field_id": 1, "type": "text", "label": "Title" }, ...] }, "_meta": { ... } }

Items

podio_create_item

Create Item

Creates a new item in a Podio app. The fields object maps field external_ids (or field_ids) to values. IMPORTANT: Call podio_get_app first to learn field types and option IDs. Field format varies by type: text='string', number=42, date={start:'YYYY-MM-DD'}, category=option_id (integer from app field settings), money={value:100,currency:'USD'}, app_reference=[item_id_1, item_id_2] (array of integer item IDs).

DUPLICATE DETECTION: Before creating, this tool automatically searches for potential duplicates using text field values. If duplicates are found, the item is NOT created — instead, the matches are returned with their item_ids. You MUST automatically use the existing item_ids from the matches instead of creating new items. Only use skip_duplicate_check=true if the user explicitly says to create a new/separate record despite the duplicate.

Parameter

Type

Required

Description

app_id

number

Yes

App ID to create the item in

fields

object

Yes

Field values keyed by external_id or field_id. Use podio_get_app to learn field types and option IDs. Examples: text='string', number=42, date={start:'2026-04-01'}, category=option_id, money={value:100,currency:'USD'}

tags

string[]

No

Optional tags to apply to the item

silent

boolean

No

If true, no notifications are generated (default: false)

skip_duplicate_check

boolean

No

If true, skip duplicate detection and create immediately (default: false)

Example:

// Request
{ "app_id": 11111, "fields": { "title": "Fix login page" } }

// Response (truncated)
{ "data": { "item_id": 99999, "title": "Fix login page" }, "_meta": { ... } }

podio_get_item

Get Item

Retrieves a Podio item by ID. Optionally pass a fields array of external_ids or field_ids to return only specific fields (reduces response size). Does NOT mark the item as viewed (preserves notifications).

Parameter

Type

Required

Description

item_id

number

Yes

The Podio item ID

fields

string[]

No

Optional list of field external_ids or field_ids to include. If omitted, all fields are returned. Use this to reduce response size.

Example:

// Request
{ "item_id": 99999 }

// Response (truncated)
{ "data": { "item_id": 99999, "title": "Fix login page", "fields": [{ "field_id": 1, "type": "text", "label": "Title", "values": [{ "value": "Fix login page" }] }, ...] }, "_meta": { ... } }

podio_update_item

Update Item

Updates field values on an existing Podio item. Only include fields you want to change in the fields object — omitted fields are left unchanged. Same field format as podio_create_item.

Parameter

Type

Required

Description

item_id

number

Yes

The Podio item ID to update

fields

object

Yes

Field values to update, keyed by external_id or field_id. Only include fields you want to change — omitted fields are left unchanged.

silent

boolean

No

If true, no notifications are generated (default: false)

Example:

// Request
{ "item_id": 99999, "fields": { "priority": 1 } }

// Response (truncated)
{ "data": { "item_id": 99999, "title": "Fix login page" }, "_meta": { ... } }

podio_delete_item

Delete Item

Permanently deletes a Podio item. This cannot be undone. Returns confirmation of deletion.

Parameter

Type

Required

Description

item_id

number

Yes

The Podio item ID to delete

silent

boolean

No

If true, no notifications are generated (default: false)

Example:

// Request
{ "item_id": 99999 }

// Response (truncated)
{ "data": { "deleted": true }, "_meta": { ... } }

podio_filter_items

Filter Items

Filters items in a Podio app by field conditions. Returns paginated results with total count. Use numeric field_ids as filter keys (from podio_get_app). Supports sorting by 'created_on', 'last_edit_on', or a field_id. NOTE: This endpoint has a stricter rate limit (250/hr vs 1000/hr standard). Text fields cannot be filtered — use search tools instead.

Parameter

Type

Required

Description

app_id

number

Yes

App ID to filter items in

filters

object

No

Field filters as object. Keys are numeric field_ids (as strings). Values depend on field type: category=[option_id, ...], number={from:X,to:Y}, date={from:'YYYY-MM-DD',to:'YYYY-MM-DD'}, app_reference=[item_id, ...]. Built-in filters: created_on, created_by. NOTE: Text fields cannot be filtered — use Podio search instead.

limit

number

No

Max items to return (default: 30, max: 500)

offset

number

No

Number of items to skip for pagination (default: 0)

sort_by

string

No

Sort field: 'created_on', 'last_edit_on', or a numeric field_id as string

sort_desc

boolean

No

Sort descending (default: true)

fields

string[]

No

Optional list of field external_ids or field_ids to include in each item. Reduces response size.

Example:

// Request
{ "app_id": 11111, "filters": { "priority": [1] }, "limit": 5 }

// Response (truncated)
{ "data": { "total": 42, "filtered": 3, "items": [{ "item_id": 99999, "title": "Fix login page", ... }, ...] }, "_meta": { ... } }

podio_list_views

List Views

Lists all saved views for a Podio app. Returns view IDs, names, and item counts. Use view IDs with podio_filter_items_by_view to filter items using a saved view's criteria.

Parameter

Type

Required

Description

app_id

number

Yes

App ID to list views for

include_standard_views

boolean

No

Include built-in views like 'All items' (default: true)

Example:

// Request
{ "app_id": 11111 }

// Response (truncated)
{ "data": [{ "view_id": 5555, "name": "Critical Bugs", "type": "standard", ... }], "_meta": { ... } }

podio_filter_items_by_view

Filter Items by View

Filters items using a saved Podio view's criteria. The view defines the filter conditions — you only need to specify pagination and sorting. Use podio_list_views first to discover available view IDs.

Parameter

Type

Required

Description

app_id

number

Yes

App ID containing the view

view_id

number

Yes

View ID (from podio_list_views)

limit

number

No

Max items to return (default: 30, max: 500)

offset

number

No

Number of items to skip for pagination (default: 0)

sort_by

string

No

Sort field: 'created_on', 'last_edit_on', or a numeric field_id

sort_desc

boolean

No

Sort descending (default: true)

fields

string[]

No

Optional list of field external_ids or field_ids to include. Reduces response size.

Example:

// Request
{ "app_id": 11111, "view_id": 5555, "limit": 10 }

// Response (truncated)
{ "data": { "total": 20, "filtered": 20, "items": [{ "item_id": 99999, "title": "Fix login page", ... }, ...] }, "_meta": { ... } }

Comments

podio_add_comment

Add Comment

Adds a text comment to a Podio item. Returns the new comment ID. Comments appear in the item's activity stream and notify followers.

Parameter

Type

Required

Description

item_id

number

Yes

The Podio item ID to comment on

text

string

Yes

Comment text (plain text or rich text HTML)

Example:

// Request
{ "item_id": 99999, "text": "Escalated to Critical" }

// Response (truncated)
{ "data": { "comment_id": 77777 }, "_meta": { ... } }

podio_get_comments

Get Comments

Retrieves all comments on a Podio item, sorted ascending by creation time. Each comment includes the author, timestamp, and text. Use limit/offset for pagination on items with many comments.

Parameter

Type

Required

Description

item_id

number

Yes

The Podio item ID to get comments for

limit

number

No

Max comments to return (default: 50)

offset

number

No

Number of comments to skip (default: 0)

Example:

// Request
{ "item_id": 99999 }

// Response (truncated)
{ "data": [{ "comment_id": 77777, "value": "Escalated to Critical", "created_by": { "name": "Jane Smith" }, ... }], "_meta": { ... } }

Webhooks

podio_create_webhook

Create Webhook

Creates a webhook on a Podio app or space. The webhook URL must be a publicly-reachable HTTPS endpoint you control (port 80 or 443). After creation, Podio sends a verification code to your URL. Your webhook receiver must call POST https://api.podio.com/hook/{hook_id}/verify/validate with {code} to activate the webhook. Valid event types for apps: item.create, item.update, item.delete. For spaces: app.create, task.create, task.update, task.delete, member.add, member.remove.

Parameter

Type

Required

Description

ref_type

`"app"

"space"`

Yes

ref_id

number

Yes

App ID or Space ID to create the webhook on

url

string

Yes

Publicly-reachable webhook URL (must be HTTPS, port 80 or 443)

type

string

Yes

Event type: 'item.create', 'item.update', 'item.delete' (for apps), or 'app.create', 'task.create', etc. (for spaces)

Example:

// Request
{ "ref_type": "app", "ref_id": 11111, "url": "https://hooks.example.com/podio", "type": "item.create" }

// Response (truncated)
{ "data": { "hook_id": 3333, "status": "inactive", "type": "item.create", "url": "https://hooks.example.com/podio" }, "_meta": { ... } }

podio_list_webhooks

List Webhooks

Lists all webhooks registered on a Podio app or space. Returns each webhook's ID, status (active/inactive), event type, and URL.

Parameter

Type

Required

Description

ref_type

`"app"

"space"`

Yes

ref_id

number

Yes

App ID or Space ID

Example:

// Request
{ "ref_type": "app", "ref_id": 11111 }

// Response (truncated)
{ "data": [{ "hook_id": 3333, "type": "item.create", "url": "https://hooks.example.com/podio", "status": "active", ... }], "_meta": { ... } }

podio_delete_webhook

Delete Webhook

Permanently deletes a webhook by ID. This stops all event deliveries to the webhook URL. Cannot be undone.

Parameter

Type

Required

Description

hook_id

number

Yes

Webhook ID (from podio_create_webhook or podio_list_webhooks)

Example:

// Request
{ "hook_id": 3333 }

// Response (truncated)
{ "data": { "deleted": true }, "_meta": { ... } }

Files

podio_attach_file

Attach File to Item

Uploads a local file and attaches it to a Podio item in one operation. Provide the absolute file path on disk and the target item ID. The file is uploaded via multipart to Podio's file API, then attached to the item. Returns the file ID, name, size, and download link. Maximum file size: 100MB.

Parameter

Type

Required

Description

file_path

string

Yes

Absolute path to the file on disk (e.g., /Users/me/report.pdf)

item_id

number

Yes

The Podio item ID to attach the file to

filename

string

No

Override filename (defaults to the file's basename)

Example:

// Request
{ "item_id": 99999, "file_path": "/tmp/report.pdf" }

// Response (truncated)
{ "data": { "file_id": 44444, "name": "report.pdf", "size": 102400 }, "_meta": { ... } }

podio_search_global

Search Globally

Searches across all accessible Podio content by keyword. Returns items, tasks, files, and other objects matching the query, each with a title, type, direct link, and app/space/org context. IMPORTANT: Results contain titles and context only — use podio_get_item to retrieve full field values. Max 20 results per call; use offset for pagination. NOTE: Rate-limited at 250 calls/hour (vs 1000/hour for other tools). This is the only way to search text fields — podio_filter_items cannot do text search.

Parameter

Type

Required

Description

query

string

Yes

Keyword or phrase to search for

ref_type

`"item"

"task"

"file"

limit

number

No

Max results to return (default: 20, max: 20)

offset

number

No

Pagination offset (default: 0)

Example:

// Request
{ "query": "login page", "limit": 5 }

// Response (truncated)
{ "data": [{ "type": "item", "id": 99999, "title": "Fix login page", "app": { "name": "Bug Tracker" }, ... }], "_meta": { ... } }

podio_search_app

Search in App

Searches within a specific Podio app by keyword. Returns items and tasks matching the query, each with a title, type, and direct link. IMPORTANT: Results contain titles only — use podio_get_item to retrieve full field values. Max 20 results per call; use offset for pagination. NOTE: Rate-limited at 250 calls/hour.

Parameter

Type

Required

Description

app_id

number

Yes

App ID to search within (from podio_list_apps)

query

string

Yes

Keyword or phrase to search for

ref_type

`"item"

"task"

"file"

limit

number

No

Max results to return (default: 20, max: 20)

offset

number

No

Pagination offset (default: 0)

Example:

// Request
{ "app_id": 11111, "query": "login page", "limit": 5 }

// Response (truncated)
{ "data": [{ "type": "item", "id": 99999, "title": "Fix login page", ... }], "_meta": { ... } }

Permission and access notes:

  • All tools require valid OAuth2 tokens — run npm run auth before use

  • podio_filter_items: Stricter rate limit (250 calls/hour vs standard 1000)

  • podio_search_global / podio_search_app: 250 calls/hour; results contain titles only

  • podio_create_webhook: Webhook URL must be HTTPS, publicly reachable on port 80 or 443

  • podio_attach_file: Max 100MB; requires read access to the local file path


Workflow Examples

Example 1 — Discover a workspace

1. podio_list_organizations
   → find "Acme Corp" (org_id: 12345)

2. podio_list_spaces({ org_id: 12345 })
   → find "Engineering" (space_id: 67890)

3. podio_list_apps({ space_id: 67890 })
   → find "Bug Tracker" (app_id: 11111)

4. podio_get_app({ app_id: 11111 })
   → see fields: Title (text), Priority (category, options: 1=Low, 2=Medium, 3=Critical), Assignee (contact)

Example 2 — Search and update

1. podio_search_app({ app_id: 11111, query: "login page broken" })
   → find item 99999

2. podio_get_item({ item_id: 99999 })
   → read current field values

3. podio_update_item({ item_id: 99999, fields: { priority: 3 } })
   → escalate to Critical

4. podio_add_comment({ item_id: 99999, text: "Escalated to Critical — affecting all users" })
   → comment posted, followers notified

Example 3 — Create and attach

1. podio_create_item({ app_id: 11111, fields: { title: "New deployment checklist" } })
   → item_id: 55555 created

2. podio_attach_file({ item_id: 55555, file_path: "/tmp/checklist.pdf" })
   → file uploaded and attached

3. podio_add_comment({ item_id: 55555, text: "Checklist attached for review" })
   → comment posted

Limitations

  • Single Podio account. One OAuth token file per server process. There is no multi-user or per-request auth to Podio.

  • Podio rate limits apply. 1000 calls/hour for most endpoints, 250/hour for filter and search. The server reports the remaining budget in _meta but does not queue or retry for you.

  • Search returns titles only. podio_search_global and podio_search_app return at most 20 hits per call. Use podio_get_item for field values.

  • Field formats are strict. Podio rejects values in the wrong shape. Call podio_get_app first to learn field types and category option IDs.

  • Destructive tools are exposed. podio_delete_item, podio_delete_webhook and the update tools act immediately with no confirmation step. Gate them in your client if that matters.

  • Remote auth is a single shared bearer token (MCP_AUTH_TOKEN). If it is unset, the HTTP endpoint is open, so only leave it blank for local development.

  • Tokens are stored as plain JSON at PODIO_TOKEN_PATH. Keep that file out of version control and chmod 600 it on servers.

  • The deploy script targets AWS EC2 + Amazon Linux 2023 + Nginx/Certbot. Other hosts need manual setup.

  • No automated test suite yet.


Contributing

  1. After modifying tools in src/server.ts: Run npm run docs to regenerate the Tool Reference section in README.md.

  2. Pre-commit hook: Run npm run setup after cloning to install the hook. It automatically runs npm run docs before commits that touch src/ — keeping the README in sync without manual effort.

  3. TypeScript: Strict mode is enabled. All runtime logs must go to stderr (never stdout — it corrupts the stdio JSON-RPC stream).

  4. Build: Run npm run build to compile TypeScript before testing with an MCP client.


Built with the Model Context Protocol

Available Tools

20 tools
podio_add_commentAdd CommentB

Adds a text comment to a Podio item. Returns the new comment ID. Comments appear in the item's activity stream and notify followers.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesComment text (plain text or rich text HTML)
item_idYesThe Podio item ID to comment on

TDQS

B3.4/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 usefully discloses the return value (new comment ID) and side effects (activity stream visibility, follower notifications), but omits permission requirements, rate limits, and whether the text is editable or deletable after posting.

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?

Three short, front-loaded sentences. The first states the action, the second the return value, and the third a key side effect. Every sentence earns its place with no redundancy.

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 simple two-parameter tool with a fully described schema and no output schema, the description covers purpose, return value, and notification behavior. It is nearly complete, missing only auth/permission context that would be useful for a write operation.

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 both item_id and text are already well documented in the input schema. The description adds no parameter-specific syntax, format, or constraint details beyond what the schema provides, making the baseline of 3 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?

States a specific verb and resource: 'Adds a text comment to a Podio item.' The purpose is unambiguous and clearly distinct from sibling tools like podio_get_comments, but it does not explicitly name or contrast with alternatives to earn a 5.

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?

Provides no when-to-use guidance, prerequisites, or exclusions. It describes what happens after posting (appears in activity stream, notifies followers) but does not help an agent choose this tool over alternatives such as podio_get_comments or other item mutations.

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

podio_attach_fileAttach File to ItemA

Uploads a local file and attaches it to a Podio item in one operation. Provide the absolute file path on disk and the target item ID. The file is uploaded via multipart to Podio's file API, then attached to the item. Returns the file ID, name, size, and download link. Maximum file size: 100MB.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesThe Podio item ID to attach the file to
filenameNoOverride filename (defaults to the file's basename)
file_pathYesAbsolute path to the file on disk (e.g., /Users/me/report.pdf)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations the description carries the full burden and does reasonably well: it discloses the two-step mechanic (multipart upload to the file API, then attach), the 100MB size cap, and the returned fields. It omits auth/permission requirements and failure behavior, keeping it short of a 5.

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?

Front-loaded with the action, then the mechanics, then the return shape and limit. Mostly every sentence earns its place, though the 'Provide the absolute file path... and the target item ID' sentence largely repeats what the schema already declares.

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?

There is no output schema, so the description usefully names the return payload (file ID, name, size, download link), and the size cap plus two-step flow cover the essentials for a low-complexity 3-parameter tool. Permission/auth expectations are the only notable omission.

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 schema already documents all three parameters including the filename override default. The description restates the absolute-path and item-ID requirements without adding format or constraint detail beyond the schema, 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?

States a specific verb+resource pair ('Uploads a local file and attaches it to a Podio item in one operation'), and no sibling tool competes for this action, so the agent can select it unambiguously.

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 gives invocation context ('Provide the absolute file path on disk and the target item ID') but never states when to prefer this over alternatives or any prerequisites/exclusions, e.g. whether the item must already exist. Usage is implied rather than guided.

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

podio_create_itemCreate ItemA

Creates a new item in a Podio app. The fields object maps field external_ids (or field_ids) to values. IMPORTANT: Call podio_get_app first to learn field types and option IDs. Field format varies by type: text='string', number=42, date={start:'YYYY-MM-DD'}, category=option_id (integer from app field settings), money={value:100,currency:'USD'}, app_reference=[item_id_1, item_id_2] (array of integer item IDs).

DUPLICATE DETECTION: Before creating, this tool automatically searches for potential duplicates using text field values. If duplicates are found, the item is NOT created — instead, the matches are returned with their item_ids. You MUST automatically use the existing item_ids from the matches instead of creating new items. Only use skip_duplicate_check=true if the user explicitly says to create a new/separate record despite the duplicate.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional tags to apply to the item
app_idYesApp ID to create the item in
fieldsYesField values keyed by external_id or field_id. Use podio_get_app to learn field types and option IDs. Examples: text='string', number=42, date={start:'2026-04-01'}, category=option_id, money={value:100,currency:'USD'}
silentNoIf true, no notifications are generated (default: false)
skip_duplicate_checkNoIf true, skip duplicate detection and create immediately (default: false)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and discloses important behavior: automatic duplicate detection, that matches block creation, and how to force creation via skip_duplicate_check. It does not disclose permissions required, success response shape, or other mutation side effects beyond duplicate handling.

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 purpose and well organized into field-format and duplicate-detection blocks. Some field examples duplicate the schema almost verbatim, so it is slightly longer than strictly necessary, but the content is useful for a nested fields object.

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 nested, mutation-oriented tool with no annotations and no output schema, the description is largely complete: it explains field formatting, the get_app prerequisite, and duplicate behavior. It leaves gaps around success return values and permission/auth requirements, which are relevant because no annotations or output schema cover them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is already 100%, the description adds meaningful field-value semantics beyond the schema, including app_reference as an array of integer item IDs and the need to fetch app field settings before supplying category option IDs. The duplicate-check guidance also clarifies the behavior of skip_duplicate_check beyond its schema description.

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: "Creates a new item in a Podio app." This clearly distinguishes creation from sibling operations such as podio_update_item, podio_get_item, and podio_delete_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?

It gives strong prerequisites and conditional behavior: call podio_get_app first to learn field types, and do not create when duplicates are found unless skip_duplicate_check is explicitly justified. It does not explicitly name podio_update_item as the alternative for modifying an existing record, which keeps it from a 5.

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

podio_create_webhookCreate WebhookA

Creates a webhook on a Podio app or space. The webhook URL must be a publicly-reachable HTTPS endpoint you control (port 80 or 443). After creation, Podio sends a verification code to your URL. Your webhook receiver must call POST https://api.podio.com/hook/{hook_id}/verify/validate with {code} to activate the webhook. Valid event types for apps: item.create, item.update, item.delete. For spaces: app.create, task.create, task.update, task.delete, member.add, member.remove.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublicly-reachable webhook URL (must be HTTPS, port 80 or 443)
typeYesEvent type: 'item.create', 'item.update', 'item.delete' (for apps), or 'app.create', 'task.create', etc. (for spaces)
ref_idYesApp ID or Space ID to create the webhook on
ref_typeYesObject type to hook: 'app' or 'space'

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it discloses the mandatory post-creation verification handshake (POST /hook/{hook_id}/verify/validate with {code}), without which the webhook would silently stay inactive, plus the URL reachability constraint. It omits auth/permission requirements and duplicate-creation behavior.

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?

Front-loaded with the purpose, then constraints, then the critical verification step, then event-type reference. Four sentences, each carrying distinct operational information, with no filler.

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 4-required-param creation tool with no annotations and no output schema, the description covers the essential behavioral loop (create → receive code → validate) and valid type values. It leaves privilege requirements and the shape of the creation response implicit, but nothing critical blocks correct invocation.

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 parameters are already documented in the schema. The description's event-type enumerations and HTTPS/port constraint largely mirror the schema text rather than adding new meaning, so this sits at 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?

States a specific verb ('Creates') and resource ('a webhook on a Podio app or space'), and the sibling names podio_list_webhooks and podio_delete_webhook make the create scope unambiguous. An agent can distinguish it from the read/delete webhook tools immediately.

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 gives clear conditions for use (must own a publicly-reachable HTTPS endpoint on port 80/443) and enumerates the valid event types per ref_type, which effectively routes the agent toward app vs space configuration. It stops short of naming alternatives or when-not-to-use, so it falls just below the top band.

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

podio_delete_itemDelete ItemA

Permanently deletes a Podio item. This cannot be undone. Returns confirmation of deletion.

ParametersJSON Schema
NameRequiredDescriptionDefault
silentNoIf true, no notifications are generated (default: false)
item_idYesThe Podio item ID to delete

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose the two traits that matter most for a delete: the operation is permanent and irreversible, and it returns a deletion confirmation. It omits authorization/permission requirements and whether related data (comments, files) is also removed.

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?

Three short sentences, front-loaded with the destructive verb and the irreversibility warning, then the return value. No filler and nothing repeated from the name.

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 two-parameter delete with no output schema, the description covers action, irreversibility, and response shape, which is most of what an agent needs. Permission requirements and cascade behavior remain unstated, keeping it below 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?

Schema description coverage is 100%, so both item_id and silent are already documented in the schema. The description adds no extra parameter meaning (no ID format, no side effects of silent), so the baseline of 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?

States a specific verb and resource ('Permanently deletes a Podio item'), which is enough to separate it from sibling mutations like podio_update_item and from podio_delete_webhook. It stops short of naming or contrasting any sibling explicitly, so a 5 isn't warranted.

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?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives (e.g., clearing fields via podio_update_item rather than removing the record). The agent must infer the appropriate context entirely 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.

podio_delete_webhookDelete WebhookA

Permanently deletes a webhook by ID. This stops all event deliveries to the webhook URL. Cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
hook_idYesWebhook ID (from podio_create_webhook or podio_list_webhooks)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that the operation is permanent, irreversible ('Cannot be undone'), and that it stops all event deliveries to the webhook URL. It does not cover permission/auth requirements or return behavior, but the destructive consequence is clearly surfaced.

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?

Three short sentences, front-loaded with the action and immediately followed by consequences. Every sentence earns its place with no padding.

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 single-parameter destructive tool with no output schema, the description supplies the essential context: permanence and the effect on event delivery. Only auth/permission expectations are unstated, a minor gap for this level of complexity.

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% and the schema already tells the agent the hook_id comes from podio_create_webhook or podio_list_webhooks. The description's 'by ID' adds nothing beyond the structured field, so the baseline 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?

States a specific verb ('deletes') and resource ('webhook') with the lookup key ('by ID'), making it immediately distinguishable from sibling podio_create_webhook and podio_list_webhooks. An agent can tell what the tool does without opening the schema.

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?

Usage is only implied: the agent infers you call this when a webhook is no longer needed. There is no explicit when-to-use framing, no prerequisites, and no mention of alternatives (e.g., that listing webhooks first is a way to obtain the ID). Adequate but with a clear gap.

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

podio_filter_itemsFilter ItemsA

Filters items in a Podio app by field conditions. Returns paginated results with total count. Use numeric field_ids as filter keys (from podio_get_app). Supports sorting by 'created_on', 'last_edit_on', or a field_id. NOTE: This endpoint has a stricter rate limit (250/hr vs 1000/hr standard). Text fields cannot be filtered — use search tools instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax items to return (default: 30, max: 500)
app_idYesApp ID to filter items in
fieldsNoOptional list of field external_ids or field_ids to include in each item. Reduces response size.
offsetNoNumber of items to skip for pagination (default: 0)
filtersNoField filters as object. Keys are numeric field_ids (as strings). Values depend on field type: category=[option_id, ...], number={from:X,to:Y}, date={from:'YYYY-MM-DD',to:'YYYY-MM-DD'}, app_reference=[item_id, ...]. Built-in filters: created_on, created_by. NOTE: Text fields cannot be filtered — use Podio search instead.
sort_byNoSort field: 'created_on', 'last_edit_on', or a numeric field_id as string
sort_descNoSort descending (default: true)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose real behavioral traits: a stricter endpoint-specific rate limit (250/hr vs 1000/hr standard) and that results are paginated with a total count. It omits auth/scope requirements and any error behavior, which is why it stops short of a 5.

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?

Five tight sentences, zero filler, and the core purpose plus the highest-risk constraint (text fields cannot be filtered) are front-loaded before the operational notes. The rate-limit warning is placed last where it belongs.

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?

With no output schema, the description does cover the return shape ('paginated results with total count'), the filter-key constraint, and the rate limit for a 7-parameter nested-object tool. Auth requirements and behavior on invalid field_ids remain unstated, leaving a small gap.

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 the baseline is 3 and the schema already documents filter value shapes and sort options. The description adds genuine value on top by stating filter keys must be numeric field_ids and telling the agent where to obtain them (podio_get_app), plus which sort keys are legal.

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?

States a specific verb and resource ('Filters items in a Podio app by field conditions') and immediately bounds the mechanism (field conditions, not full-text), which separates it from podio_search_app and from podio_filter_items_by_view. An agent can pick this tool without opening the schema.

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?

Gives an explicit when-not with a redirect: 'Text fields cannot be filtered — use search tools instead', plus a provenance pointer ('numeric field_ids ... from podio_get_app'). It never names podio_filter_items_by_view as the alternative for saved-view filtering, so the sibling routing is only half covered.

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

podio_filter_items_by_viewFilter Items by ViewA

Filters items using a saved Podio view's criteria. The view defines the filter conditions — you only need to specify pagination and sorting. Use podio_list_views first to discover available view IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax items to return (default: 30, max: 500)
app_idYesApp ID containing the view
fieldsNoOptional list of field external_ids or field_ids to include. Reduces response size.
offsetNoNumber of items to skip for pagination (default: 0)
sort_byNoSort field: 'created_on', 'last_edit_on', or a numeric field_id
view_idYesView ID (from podio_list_views)
sort_descNoSort descending (default: true)

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 full behavioral burden. It discloses the important trait that filtering criteria are opaque and view-defined, but says nothing about permissions/scopes, result shape, or whether the view's criteria can be overridden or combined with additional filters.

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?

Three short sentences, front-loaded with the core behavior, followed by the mechanism and the prerequisite. Every sentence earns its place with no filler.

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 read-only list tool with a fully documented schema but no output schema and no annotations, the description covers the essential mechanics well. It stops short of describing what is returned or any limits beyond what the schema states, which is a minor gap.

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 seven parameters are already documented in the schema; baseline 3 applies. The description reinforces that only pagination and sorting need to be supplied but adds no format or constraint detail beyond the 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?

States a specific verb (filters) and resource (items) with the distinguishing mechanism: a saved Podio view supplies the criteria. This differentiates it from podio_filter_items in practice, though it never names that sibling, so the contrast must be inferred.

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?

Gives a clear prerequisite workflow ('Use podio_list_views first to discover available view IDs') and clarifies the division of labor: the view supplies filter conditions, the caller supplies pagination/sorting. No explicit when-not guidance, but the usage context is unambiguous.

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

podio_get_appGet App DetailsA

Returns full app details including all field definitions with types, settings, and option IDs. IMPORTANT: For category fields, the settings.options array contains the option IDs needed for creating/updating items. Always call this before creating items to learn the field structure.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesApp ID (from podio_list_apps)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it discloses the shape of the response (field types, settings, option IDs) and a tool-specific gotcha about category fields' settings.options. It does not state that this is a non-mutating read or mention permission/auth requirements, but the return semantics are well explained.

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 sentences, front-loaded with what is returned, then the critical usage rule. Slightly redundant, since 'learn the field structure' restates the earlier field-definition mention, and the all-caps IMPORTANT banner is heavier than needed, but there is little waste.

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?

There is no output schema, so the description must convey return values, and it does so concretely, including the category-field option ID detail an agent needs before writing items. Missing only peripheral information such as error behavior or auth requirements, which is minor for a read-only lookup.

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% and the single app_id parameter is already documented in the schema, including its provenance ('from podio_list_apps'). The description adds no format or constraint detail beyond the schema, so the baseline 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?

States a specific verb and resource ('Returns full app details') and enumerates exactly what comes back: field definitions with types, settings, and option IDs. This distinguishes it from sibling lookups like podio_list_apps, which only list app IDs.

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?

Gives an explicit precondition: 'Always call this before creating items to learn the field structure,' which tells the agent when this tool is required rather than optional. It stops short of naming alternatives or stating when this call is unnecessary, but the primary usage trigger is unambiguous.

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

podio_get_commentsGet CommentsA

Retrieves all comments on a Podio item, sorted ascending by creation time. Each comment includes the author, timestamp, and text. Use limit/offset for pagination on items with many comments.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax comments to return (default: 50)
offsetNoNumber of comments to skip (default: 0)
item_idYesThe Podio item ID to get comments for

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full disclosure burden. It does disclose sort order (ascending by creation time), returned fields (author, timestamp, text), and pagination behavior, but says nothing about authentication requirements, rate limits, or whether it is strictly read-only.

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 tight sentences with no filler; the core action and result shape are front-loaded and the pagination note follows. Every clause earns its place.

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?

There is no output schema, and the description compensates by naming the fields returned and their order. Combined with complete schema coverage on all three parameters, an agent has what it needs, though an explicit read-only statement would round it out.

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% and each parameter (limit, offset, item_id) is already documented with defaults, so the baseline is 3. The description's mention of limit/offset adds the pagination intent but no syntax or default detail beyond the 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?

States a specific verb and resource ('Retrieves all comments on a Podio item') plus ordering, so the agent knows exactly what comes back. It does not explicitly name the sibling it complements (podio_add_comment), but the read-vs-write distinction is unambiguous from the verb.

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 only guidance is 'Use limit/offset for pagination on items with many comments', which is a usage hint rather than a when-to-use/when-not rule. No conditions distinguishing this from podio_get_item or other read tools are given, so selection guidance is only implied.

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

podio_get_itemGet ItemA

Retrieves a Podio item by ID. Optionally pass a fields array of external_ids or field_ids to return only specific fields (reduces response size). Does NOT mark the item as viewed (preserves notifications).

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoOptional list of field external_ids or field_ids to include. If omitted, all fields are returned. Use this to reduce response size.
item_idYesThe Podio item ID

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose a non-obvious side effect: the item is NOT marked as viewed, preserving notifications. That is genuinely valuable behavioral context an agent could not infer. It stops short of covering auth requirements, error behavior, or the returned payload shape.

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?

Three short sentences, no filler. The core purpose leads, with the optional parameter and the notification side effect following in a logical order. Every sentence earns its place.

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 simple two-parameter read tool with full schema coverage and no output schema, the description covers purpose, the optional narrowing parameter, and the key non-obvious side effect. Only the absence of any hint about failure modes or return contents keeps it from being fully 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 both parameters are already documented, including the 'reduce response size' rationale for fields. The description largely restates that, adding the external_id/field_id distinction that the schema also carries, so it meets but does not exceed 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?

States a specific verb and resource ('Retrieves a Podio item by ID'), which cleanly separates it from list/filter siblings like podio_filter_items and podio_list_apps. The agent knows exactly what it gets back without opening the schema.

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?

Usage is only implied by the 'by ID' framing; there is no explicit statement of when to prefer this over podio_filter_items or podio_filter_items_by_view. The fields-array advice is parameter guidance rather than when-to-use guidance.

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

podio_health_checkPodio Health CheckA

Verify the MCP server can authenticate with Podio and make an API call. Returns the authenticated user's display name, email, and current rate limit status. Use this tool first to confirm the server is working before using other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose that the tool authenticates and makes a live API call plus what it returns (display name, email, rate limit status). It never states whether the call is side-effect-free or whether it consumes rate limit quota, which is the one meaningful gap for a diagnostic 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?

Three short sentences, front-loaded with the core action, then the return payload, then the usage instruction. Every sentence earns its place with no 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?

With no output schema, the description compensates by naming the returned fields (display name, email, rate limit status). For a zero-parameter, no-annotation diagnostic tool, nothing an agent needs in order to call it 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?

The tool takes zero parameters, so the baseline of 4 applies. There is nothing for the description to clarify beyond the empty schema, and it correctly adds no parameter noise.

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?

States a specific verb and resource: verifying that the MCP server can authenticate with Podio and make an API call. This is unambiguous and clearly distinct from every sibling tool, none of which is a diagnostic/health check.

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?

Explicitly prescribes when to use it: 'Use this tool first to confirm the server is working before using other tools.' That is clear sequencing guidance. It stops short of a 5 only because there are no real alternatives to exclude, so no when-not guidance is offered.

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

podio_list_appsList AppsA

Returns all apps within a space. Each app includes its name, ID, and status. Use app IDs to get field definitions or work with items.

ParametersJSON Schema
NameRequiredDescriptionDefault
space_idYesSpace ID (from podio_list_spaces)
include_inactiveNoInclude inactive apps (default: false)

TDQS

A3.6/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, and it does disclose the return shape (name, ID, status) for each app. However, it says nothing about pagination, ordering, permissions/auth requirements, or whether inactive apps are omitted by default (that is only in the schema). Useful but incomplete behavioral context for a read 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?

Three short sentences, front-loaded with the core behavior and with zero filler. The output-shape and downstream-usage notes each add distinct value rather than restating the name.

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 simple read-only listing tool with no output schema, the description covers purpose, return fields, and downstream usage, which is nearly sufficient. It leaves minor gaps around pagination and default exclusion of inactive apps, though the latter is handled by the 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?

Schema coverage is 100%, so both parameters (space_id, include_inactive) are already documented in the schema, which sets the baseline at 3. The description's "within a space" and mention of "status" loosely echo these parameters but add no format or default detail beyond the 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?

States a specific verb and resource ("Returns all apps within a space") and scopes it to a space, which cleanly separates it from podio_list_spaces and the singular podio_get_app. It stops short of naming those siblings explicitly, so the differentiation is inferable rather than stated.

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 sentence "Use app IDs to get field definitions or work with items" explains what to do with the output, which implies this is a discovery step, but it never says when to choose this tool over podio_get_app or podio_list_spaces, nor any preconditions. Usage is implied rather than guided.

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

podio_list_organizationsList OrganizationsA

Returns all organizations the authenticated user belongs to. Each org includes its name, type, and a list of spaces. Use this as the starting point to discover workspaces.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/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 usefully discloses scope (only orgs the authenticated user belongs to, implying an auth requirement) and the response shape (name, type, spaces), but says nothing about pagination, ordering, or whether an empty result is possible.

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 short sentences, front-loaded with what it returns and followed by the routing hint. No filler or restated boilerplate.

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 no-parameter discovery tool with no output schema, the description does the necessary work by sketching the return (name, type, spaces) and its role as an entry point. Only pagination/volume behavior is left unstated.

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 takes zero parameters, so there is nothing for the description to disambiguate; the schema is trivially complete. Baseline 4 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?

States a specific verb and resource (list organizations) plus the scope (those the authenticated user belongs to), and enumerates the returned fields (name, type, spaces). It is clearly distinguishable from sibling list tools such as podio_list_spaces and podio_list_apps.

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?

"Use this as the starting point to discover workspaces" gives a clear context for when to reach for this tool versus the more granular space/app listers. It stops short of explicit when-not or prerequisite conditions.

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

podio_list_spacesList SpacesA

Returns all spaces (workspaces) the authenticated user can access within an organization. Each space includes its name and ID. Use space IDs to list apps.

ParametersJSON Schema
NameRequiredDescriptionDefault
org_idYesOrganization ID (from podio_list_organizations)

TDQS

A3.6/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 disclosure burden. It does add value by stating the result set is scoped to spaces the authenticated user can access and that each entry carries a name and ID, but it omits pagination, ordering, rate-limit, or permission-failure behavior for a list 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?

Three short sentences, front-loaded with the resource and scope, then the return shape, then the downstream workflow. Every sentence carries information and none is redundant.

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?

With no output schema, the description usefully outlines the return payload (name and ID per space), and the single required parameter is fully covered by the schema. It is close to complete for a simple read-only list tool, missing only pagination/result-size expectations.

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 single org_id parameter is already documented with its provenance ('from podio_list_organizations'). The description only reinforces that spaces are grouped 'within an organization,' adding no syntax or format detail beyond the schema, so the 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 names a specific verb+resource ('Returns all spaces (workspaces)') and scopes it to the authenticated user within an organization, which distinguishes it from the app/item siblings. It stops short of explicitly contrasting itself with podio_list_organizations or podio_list_apps, but the resource is unambiguous.

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?

There is no explicit when-to-use statement or when-not-to-use exclusion. Usage is only implied through the workflow hint 'Use space IDs to list apps,' which tells the agent where the output feeds next but not when this tool should be chosen over alternatives.

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

podio_list_viewsList ViewsA

Lists all saved views for a Podio app. Returns view IDs, names, and item counts. Use view IDs with podio_filter_items_by_view to filter items using a saved view's criteria.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_idYesApp ID to list views for
include_standard_viewsNoInclude built-in views like 'All items' (default: true)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses the return payload (view IDs, names, item counts), but says nothing about pagination, permission requirements, or whether standard views differ structurally from custom ones. Adequate but with clear gaps for a read-only listing 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?

Three short sentences: what it does, what it returns, and how to use the result. Front-loaded and every sentence earns its place with no repetition.

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?

With no output schema, the description correctly compensates by enumerating the returned fields, and the two-parameter schema is fully covered. The only minor gap is not mentioning that standard views can be excluded by default behavior, though the schema already documents 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?

Schema description coverage is 100%, so both app_id and include_standard_views are already documented with their purposes and default. The description adds no parameter-level detail beyond what the schema provides, which is the expected baseline of 3.

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?

States a specific verb and resource ("Lists all saved views for a Podio app") and goes further to name the returned fields, so the agent knows exactly what it gets. It also distinguishes itself from the downstream sibling by naming podio_filter_items_by_view as the consumer of its output.

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 gives a clear downstream recipe: take the view IDs and pass them to podio_filter_items_by_view. It does not state when to prefer this over podio_filter_items or podio_search_app, but the intended role in the workflow is unambiguous.

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

podio_list_webhooksList WebhooksB

Lists all webhooks registered on a Podio app or space. Returns each webhook's ID, status (active/inactive), event type, and URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
ref_idYesApp ID or Space ID
ref_typeYesObject type: 'app' or 'space'

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden itself. It discloses the return fields (ID, status, event type, URL), which is genuinely useful, but says nothing about permissions, pagination, rate limits, or ordering for a list 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?

Two tight sentences: the first states what is listed and where, the second states what comes back. Nothing is wasted and the key information is front-loaded.

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 simple two-parameter read tool with fully covered schema descriptions and no output schema, the description is nearly sufficient, especially since it summarizes the return shape. Only pagination and result-size behavior are left unspecified.

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 ref_id and the ref_type enum already documented, so the baseline is 3. The description reinforces that the target is an app or space but adds no format or syntax detail beyond the 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 uses a specific verb and resource ('Lists all webhooks registered on a Podio app or space') and states the scoping entities. It is clearly distinguishable from the sibling create_webhook and delete_webhook tools, though it never names them explicitly.

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?

There is no explicit when-to-use or when-not-to-use guidance, nor any mention of alternatives. The agent must infer from the name alone that this is the inspection path for existing webhooks rather than creation or deletion.

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

podio_search_appSearch in AppA

Searches within a specific Podio app by keyword. Returns items and tasks matching the query, each with a title, type, and direct link. IMPORTANT: Results contain titles only — use podio_get_item to retrieve full field values. Max 20 results per call; use offset for pagination. NOTE: Rate-limited at 250 calls/hour.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default: 20, max: 20)
queryYesKeyword or phrase to search for
app_idYesApp ID to search within (from podio_list_apps)
offsetNoPagination offset (default: 0)
ref_typeNoRestrict results to a specific content type (optional)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does substantial work: it discloses the return shape (title, type, direct link), the titles-only limitation, the hard 20-result cap, the pagination mechanism, and a 250 calls/hour rate limit. Missing only auth/permission expectations and whether ref_type changes the returned fields.

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?

Four short sentences, front-loaded with the core purpose and then the constraints, with no filler. The 20-result cap and offset note duplicate the schema, which is the only mild waste.

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?

With no output schema, the description usefully describes what comes back and warns that only titles are returned, plus caps and rate limits. It says results are 'items and tasks' while ref_type also permits file and status, leaving a small inconsistency about what content types can surface.

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 limit, offset, query, app_id and ref_type are already documented in the schema. The description restates the 20-result cap and offset pagination but adds no syntax, format, or defaulting nuance beyond the schema; 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?

States a specific verb and resource ('Searches within a specific Podio app by keyword') and scopes it to an app, which implicitly separates it from a global search. It never names the sibling podio_search_global, so an agent must infer the app-vs-global split rather than being told.

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?

Gives clear conditional guidance: results are titles only, so use podio_get_item for full field values, and use offset for pagination. It stops short of naming exclusions or contrasting with podio_filter_items / podio_search_global, so the when-not-to-use case is left implicit.

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

podio_search_globalSearch GloballyA

Searches across all accessible Podio content by keyword. Returns items, tasks, files, and other objects matching the query, each with a title, type, direct link, and app/space/org context. IMPORTANT: Results contain titles and context only — use podio_get_item to retrieve full field values. Max 20 results per call; use offset for pagination. NOTE: Rate-limited at 250 calls/hour (vs 1000/hour for other tools). This is the only way to search text fields — podio_filter_items cannot do text search.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default: 20, max: 20)
queryYesKeyword or phrase to search for
offsetNoPagination offset (default: 0)
ref_typeNoRestrict results to a specific content type (optional)

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden, and it delivers: results are titles/context only, max 20 per call, offset-based pagination, and a rate limit of 250 calls/hour versus 1000 for other tools. It stops just short of describing ordering or ref_type behavior nuances, but the operational envelope is well 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?

Purpose is front-loaded, followed by return shape, the retriever handoff, pagination, and the rate-limit caveat. Each sentence carries distinct information despite some mild emphasis repetition around 'titles and context only'.

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?

With no output schema, the description steps in to describe the returned fields (title, type, direct link, app/space/org context) and their limitations. Combined with pagination, rate limits, and the sibling handoff, an agent has everything needed to call 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?

Schema description coverage is 100%, so the baseline is 3. The description reiterates the 20-result cap and offset pagination that the schema already states, adding no syntax or format detail beyond the structured fields.

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?

States a specific verb (searches) and resource (all accessible Podio content by keyword), and names the return payload. It also distinguishes itself from siblings by asserting it is 'the only way to search text fields' and contrasting with podio_filter_items.

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?

Explicitly routes the agent: use podio_get_item to retrieve full field values, and notes podio_filter_items cannot do text search. Covers when-to-use and which sibling to pick instead, leaving little to inference.

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

podio_update_itemUpdate ItemA

Updates field values on an existing Podio item. Only include fields you want to change in the fields object — omitted fields are left unchanged. Same field format as podio_create_item.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesField values to update, keyed by external_id or field_id. Only include fields you want to change — omitted fields are left unchanged.
silentNoIf true, no notifications are generated (default: false)
item_idYesThe Podio item ID to update

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 usefully discloses non-obvious partial-update semantics ('omitted fields are left unchanged'), which is real behavioral value. However, it says nothing about side effects like notifications/webhook triggers, permission requirements, or whether updates are reversible.

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 sentences, zero filler, and the key partial-update constraint is front-loaded right after the purpose. Nothing needs trimming and nothing important is buried.

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 mutation tool with no annotations and no output schema, the description covers the core update semantics but omits side effects, auth/permission expectations, and error behavior (e.g., what happens if item_id is invalid). Adequate but with clear 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?

Schema description coverage is 100%, so all three parameters (item_id, fields, silent) are already documented in the schema, establishing a baseline of 3. The description's only addition is the cross-reference that fields use the same format as podio_create_item, which is helpful but marginal.

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?

States a specific verb and resource ('Updates field values on an existing Podio item') and scopes it to existing records, which separates it from podio_create_item. It stops short of explicitly contrasting itself with other item-mutating siblings such as podio_delete_item, but the intent is unambiguous.

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?

Usage is implied by 'existing' item versus the create path, and it cross-references podio_create_item for field formatting. There is no explicit when-to-use/when-not guidance, no mention of prerequisites (item must exist, app permissions), and no routing among the other item tools.

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 updatesv1.0.0
    • First observedpodio_add_comment
    • First observedpodio_attach_file
    • First observedpodio_create_item
    • First observedpodio_create_webhook
    • First observedpodio_delete_item
    • First observedpodio_delete_webhook
    • First observedpodio_filter_items
    • First observedpodio_filter_items_by_view
    • First observedpodio_get_app
    • First observedpodio_get_comments
    • First observedpodio_get_item
    • First observedpodio_health_check
    • First observedpodio_list_apps
    • First observedpodio_list_organizations
    • First observedpodio_list_spaces
    • First observedpodio_list_views
    • First observedpodio_list_webhooks
    • First observedpodio_search_app
    • First observedpodio_search_global
    • First observedpodio_update_item

TDQS

A3.8/5.0

Scored across 20 tools

Disambiguation4/5

Most tools target clearly distinct Podio resources and actions (orgs, spaces, apps, items, comments, webhooks). The filter/search group (filter_items, filter_items_by_view, search_global, search_app) could be initially confused, but descriptions explicitly differentiate inputs, scope, and text-search limitations.

Naming Consistency5/5

All 20 tools use the podio_ prefix with a consistent snake_case verb_noun pattern (list_, get_, create_, update_, delete_, filter_, search_, add_, attach_). No mixed conventions or deviations.

Tool Count4/5

20 tools is slightly high but reasonable for Podio's broad surface (orgs, spaces, apps, items, comments, webhooks, search). Each tool covers a distinct operation with no obvious redundancy, though the webhook and comment groups could arguably be consolidated.

Completeness3/5

Core item lifecycle (create/get/update/delete/filter/search) is well covered. However, notable gaps remain: no task management tools despite search returning tasks, no app create/update/delete, no file retrieval/download/delete, and no comment update/delete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers