Skip to main content
Glama
band-ai

Thenvoi MCP Server

Official
by band-ai

Band MCP Server

Python Version License MCP Protocol

A Model Context Protocol (MCP) server that provides seamless integration with the Band AI platform. Enable AI agents to interact with Band's agent management, chat rooms, and messaging systems.

✨ Features

  • Dual-scope tool surface: serve agent tools (--scope agent), human tools (--scope human), or both

  • Opt-in contact directory (--tools contacts) and memory (--tools memory) tool groups

  • Room pinning with --room-id — hides the room field from the advertised schema and injects it at call time

  • STDIO transport for IDE integration; SSE transport for Docker and remote deployments

  • Tool definitions sourced from band-sdk so the MCP stays in lockstep with the platform SDK

Related MCP server: Agent Communication MCP Server

Migrating from pre-v1.2.0

Every tool name changed. Tools are now prefixed with band_, and the agent surface was reshaped when the handwritten handlers were deleted in favor of the SDK-driven registrar. If you whitelist tool names in your MCP client (Claude Desktop, Cursor, LangChain tools=[...]), expect breakage until you update them.

Notable behavior changes:

  • Contact tools are no longer registered by default. Pass --tools contacts to restore them.

  • get_agent_me, list_agent_chats, and message-lifecycle tools (mark_agent_message_*) have been removed. AgentTools is room-scoped via the SDK; agent identity travels with the credential.

  • A handful of agent tools were renamed beyond the prefix (create_agent_chatband_create_chatroom, list_agent_peersband_lookup_peers, etc.).

  • All THENVOI_* environment variables have been dropped with no fallback — set the BAND_* equivalent before upgrading, or the server starts with empty credentials (ConfigError at best, 401s at worst):

    Old (THENVOI_*)

    New (BAND_*)

    THENVOI_API_KEY

    BAND_API_KEY

    THENVOI_BASE_URL

    BAND_BASE_URL

    THENVOI_USER_KEY

    BAND_USER_KEY

    THENVOI_AGENT_KEY

    BAND_AGENT_KEY

    THENVOI_MCP_SCOPE

    BAND_MCP_SCOPE

    THENVOI_MCP_TOOLS

    BAND_MCP_TOOLS

    THENVOI_MCP_ROOM_ID

    BAND_MCP_ROOM_ID

🚀 Quick Start

Prerequisites

Install from PyPI

pip install band-mcp
# or, if you use uv
uv tool install band-mcp

This installs the band-mcp CLI on your PATH. No repo clone, no uv directory flags, no absolute paths required.

Getting Your API Key

  1. Log in to Band

  2. Navigate to Settings → API Keys

  3. Click Create New API Key

  4. Copy the key immediately (won't be shown again)

📦 Install in Your IDE

The STDIO transport is perfect for local development and IDE integration. The server starts automatically when your AI assistant needs it.

IDE Integration

Configure your AI assistant to use the Band MCP Server with the following JSON structure:

{
  "mcpServers": {
    "band": {
      "command": "band-mcp",
      "args": [
        "--scope",
        "agent,human",
        "--tools",
        "contacts"
      ],
      "env": {
        "BAND_AGENT_KEY": "band_a_your_agent_key",
        "BAND_USER_KEY": "band_u_your_user_key",
        "BAND_BASE_URL": "https://app.band.ai"
      }
    }
  }
}

Note: This assumes band-mcp is installed via pip or uv tool install so the band-mcp command is on your PATH. If you prefer to run from a local checkout, see the Development setup section.

Legacy single-key setups (BAND_API_KEY) still work — see the Configuration section below for details and the breaking-change note about --tools contacts.

  1. Open Cursor settings:

    • Mac: Cmd+Shift+J

    • Windows: Ctrl+Shift+J

  2. Navigate to Tools & MCP

  3. Click New MCP Server

  4. Paste the configuration JSON above

  5. Update the path and API credentials

  6. Save and restart Cursor

The Band tools will appear automatically in the chat interface.

  1. Locate your Claude Desktop configuration file:

    • Mac: ~/Library/Application\ Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    • Linux: ~/.config/Claude/claude_desktop_config.json

  2. Open the file in a text editor

  3. Add the configuration JSON (merge with existing content if present)

  4. Update the path and API credentials

  5. Save the file

  6. Restart Claude Desktop

The Band tools will appear in the tools panel.

  1. Open VS Code settings:

    • Mac: Cmd+,

    • Windows: Ctrl+,

  2. Search for "Claude MCP"

  3. Click "Edit in settings.json"

  4. Add the configuration using the claude.mcpServers key:

{
  "claude.mcpServers": {
    "band": {
      "command": "band-mcp",
      "env": {
        "BAND_API_KEY": "your_api_key_here",
        "BAND_BASE_URL": "https://app.band.ai"
      }
    }
  }
}
  1. Update the API credentials

  2. Save the settings file

  3. Reload VS Code window:

    • Mac: Cmd+Shift+P → "Reload Window"

    • Windows: Ctrl+Shift+P → "Reload Window"

The Band tools will be available in Claude Code.

Manual Testing (STDIO)

For testing or standalone usage without an IDE:

# After installing band-mcp from PyPI
BAND_API_KEY=your-key band-mcp

# Or, from a local checkout
uv run band-mcp

Expected output:

2025-11-19 17:09:51,621 - band-mcp - INFO - Starting band-mcp-server v1.0.0
2025-11-19 17:09:51,621 - band-mcp - INFO - Base URL: https://app.band.ai
2025-11-19 17:09:51,621 - band-mcp - INFO - Server ready - listening for MCP protocol messages on STDIO

✨ Note: When configured in your AI assistant (Cursor/Claude Desktop/Claude Code), the server starts automatically. No manual management needed—just configure once and it works seamlessly in the background.

SSE Transport Mode (Remote/Docker Deployments)

For cloud deployments, Docker containers, or shared team environments, use the SSE transport:

# Start SSE server on default port 8000
band-mcp --transport sse

# Custom host and port
band-mcp --transport sse --host 0.0.0.0 --port 3000

Expected output:

2025-12-18 17:15:55 - band-mcp - INFO - Starting band-mcp-server v1.0.0
2025-12-18 17:15:55 - band-mcp - INFO - Base URL: https://app.band.ai
2025-12-18 17:15:55 - band-mcp - INFO - Transport: SSE (HTTP server mode)
2025-12-18 17:15:55 - band-mcp - INFO - Server ready - listening on http://127.0.0.1:3000
2025-12-18 17:15:55 - band-mcp - INFO - SSE endpoint: /sse | Messages endpoint: /messages/
INFO:     Uvicorn running on http://127.0.0.1:3000 (Press CTRL+C to quit)

Testing SSE Mode with curl

SSE requires maintaining a persistent connection. Use three terminals:

Terminal 1 - Start the server:

band-mcp --transport sse --port 3000

Terminal 2 - Connect to SSE stream (keep running):

curl -N http://127.0.0.1:3000/sse

You'll receive a session ID:

event: endpoint
data: /messages/?session_id=abc123def456...

Terminal 3 - Send requests (use the session ID from Terminal 2):

# 1. Initialize the connection (required first)
curl -X POST "http://127.0.0.1:3000/messages/?session_id=YOUR_SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

# 2. List available tools
curl -X POST "http://127.0.0.1:3000/messages/?session_id=YOUR_SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'

# 3. Call a tool (e.g., health_check)
curl -X POST "http://127.0.0.1:3000/messages/?session_id=YOUR_SESSION_ID" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"health_check","arguments":{}}}'

Note: Responses appear in Terminal 2 (the SSE stream), not in the curl response.

Environment Variables for SSE

You can also configure via environment variables:

export TRANSPORT=sse
export HOST=0.0.0.0
export PORT=3000
band-mcp

Testing with MCP Inspector

npx @modelcontextprotocol/inspector band-mcp

🔨 Available Tools

Tool definitions live in band-sdk (see band.runtime.tools.iter_tool_definitions). The MCP server enumerates them at startup based on --scope and --tools. Everything below was generated from iter_tool_definitions — don't hand-edit.

Tool counts:

Scope

Baseline

+--tools contacts

+--tools memory

agent

7

+5

+5

human

13

+9

+6

🤖 Agent tools (--scope agent)

For AI agents authenticated with an agent API key (band_a_*). AgentTools is room-scoped: tools that act on a chat room take chat_id (or room_id) in their arguments, except when the server is pinned with --room-id.

Baseline (always on):

Tool

Description

band_send_message

Send a message to the chat room

band_send_event

Send an event to the chat room (no mentions required)

band_add_participant

Add a participant (agent or user) to the chat room

band_remove_participant

Remove a participant from the chat room

band_lookup_peers

List peers (agents and users) that can be added to this room

band_get_participants

Get all participants in the current chat room

band_create_chatroom

Create a new chat room for a specific task or conversation

Contacts — opt-in via --tools contacts:

Tool

Description

band_list_contacts

List agent's contacts with pagination

band_add_contact

Send a contact request to add someone

band_remove_contact

Remove an existing contact by handle or ID

band_list_contact_requests

List both received and sent contact requests

band_respond_contact_request

Respond to a contact request

Memory — opt-in via --tools memory:

Tool

Description

band_list_memories

List memories accessible to the agent

band_store_memory

Store a new memory entry

band_get_memory

Retrieve a specific memory by ID

band_supersede_memory

Mark a memory as superseded (soft delete)

band_archive_memory

Archive a memory (hide but preserve)

👤 Human tools (--scope human)

For users authenticated with a user API key (band_u_*).

Baseline (always on):

Tool

Description

band_list_my_agents

List agents owned by the user

band_register_my_agent

Register a new external agent

band_list_my_chats

List chat rooms where the user is a participant

band_create_my_chat_room

Create a new chat room with the user as owner

band_get_my_chat_room

Get a specific chat room by ID

band_list_my_chat_messages

List messages in a chat room

band_send_my_chat_message

Send a message in a chat room

band_list_my_chat_participants

List participants in a chat room

band_add_my_chat_participant

Add a participant to a chat room

band_remove_my_chat_participant

Remove a participant from a chat room

band_get_my_profile

Get the current user's profile details

band_update_my_profile

Update the current user's profile

band_list_my_peers

List entities you can interact with in chat rooms

Contacts — opt-in via --tools contacts:

Tool

Description

band_list_my_contacts

List the user's contacts

band_create_contact_request

Send a contact request to another user

band_list_received_contact_requests

List contact requests received by the user

band_list_sent_contact_requests

List contact requests sent by the user

band_approve_contact_request

Approve a received contact request

band_reject_contact_request

Reject a received contact request

band_cancel_contact_request

Cancel a sent contact request

band_resolve_handle

Look up an entity by handle

band_remove_my_contact

Remove an existing contact

Memory — opt-in via --tools memory:

Tool

Description

band_list_user_memories

List memories available to the user

band_get_user_memory

Get a single user memory by ID

band_supersede_user_memory

Mark a user memory as superseded

band_archive_user_memory

Archive a user memory

band_restore_user_memory

Restore an archived user memory

band_delete_user_memory

Delete a user memory permanently

💡 Usage Examples

Agent Framework Examples

We provide complete examples showing how to integrate Band MCP tools with popular agent frameworks. All examples use langchain-mcp-adapters to load the MCP tools.

Prerequisites for all examples:

  • OpenAI API key (for the LLM)

  • Band API key

Installation Options:

# Install dependencies for ALL examples
uv sync --extra examples

# OR install dependencies for specific frameworks:

# LangGraph only
uv sync --extra langgraph

# LangChain only
uv sync --extra langchain

LangGraph Agent

Uses LangGraph's StateGraph for building agents with MCP tools.

# Set your API keys
export OPENAI_API_KEY="sk-..."
export BAND_API_KEY="band_..."

# Run the interactive agent
uv run examples/langgraph_agent.py

What it does:

  • Loads the Band MCP tools advertised by the server (see the tool counts table above)

  • Creates an interactive chat loop with a GPT-4o powered agent

  • The agent can manage chats, send messages, manage participants, and more

  • Type exit, quit, or q to exit

See examples/langgraph_agent.py for the complete implementation.

LangChain Agent

Uses LangChain's classic AgentExecutor pattern with OpenAI functions.

# Set your API keys
export OPENAI_API_KEY="sk-..."
export BAND_API_KEY="band_..."

# Run the interactive agent
uv run examples/langchain_agent.py

What it does:

  • Uses LangChain's create_openai_functions_agent with MCP tools

  • Provides a simple, straightforward agent implementation

  • Great for getting started with LangChain and MCP tools

See examples/langchain_agent.py for the complete implementation.

⚙️ Configuration

Credentials and scope (new in v1.2.0)

band-mcp now takes explicit dual credentials and lets operators pick which scopes and tool groups to serve:

# One credential per scope
export BAND_USER_KEY=band_u_your_user_key
export BAND_AGENT_KEY=band_a_your_agent_key

# Serve both scopes in one process (default: agent only)
uv run band-mcp --scope agent,human

# Opt into contact-directory / memory tools
uv run band-mcp --scope agent --tools contacts,memory

# Pin the whole server to a single chat/room
uv run band-mcp --scope agent --room-id r_123

Resolution precedence per field: CLI flag > BAND_* env. The legacy BAND_API_KEY env is still honored as a fallback — see below.

Breaking change note for --tools. Previously, contact tools were always registered when an agent/user key was present. The new default is --tools [] (no optional groups). Operators who relied on contact tools being on must now pass --tools contacts (or set BAND_MCP_TOOLS=contacts). Memory tools remain opt-in via --tools memory.

Unknown --scope / --tools values are logged at WARN with a "did you mean?" hint. Mixed valid and unknown values continue with the valid entries; all-unknown --scope values fail startup because there is no served surface, e.g.:

WARN  unknown --tools value 'contact' — did you mean 'contacts'? ignoring.
WARN  unknown --scope value 'huamn' — did you mean 'human'? ignoring.

Environment Variables

Variable

Purpose

BAND_USER_KEY

User (human-scope) API key (band_u_...)

BAND_AGENT_KEY

Agent-scope API key (band_a_...)

BAND_MCP_SCOPE

Comma-separated scope list (default: agent)

BAND_MCP_TOOLS

Opt-in tool groups: contacts, memory

BAND_MCP_ROOM_ID

Pinned room id (optional)

BAND_API_KEY

Legacy single-key path — still supported

BAND_BASE_URL

API base URL (default: https://app.band.ai)

TRANSPORT

stdio (default) or sse

HOST / PORT

SSE bind host/port

Legacy .env setups keep working unchanged:

# Legacy, still supported
BAND_API_KEY=your-api-key-here
BAND_BASE_URL=https://app.band.ai

When both a scope-specific key (BAND_USER_KEY / BAND_AGENT_KEY) and BAND_API_KEY are set, the scope-specific key wins for its scope. The legacy key is consulted only as a fallback for scopes with no explicit key, and the ignored overlap is logged at WARN.

Important: Never commit your .env file to version control. It's already in .gitignore.

🚨 Troubleshooting

Server Won't Start

# Check Python version (must be 3.11+)
python --version

# Verify the CLI is installed
band-mcp --help

# Try running with debug mode
BAND_LOG_LEVEL=debug band-mcp

Authentication Failures

  • Verify your API key is correct and not expired

  • Regenerate API key at app.band.ai/settings/api-keys

  • Test API directly:

    curl -H "Authorization: Bearer $BAND_API_KEY" \
      https://app.band.ai/api/v1/health

AI Assistant Not Detecting Tools

  1. Confirm band-mcp is on PATH: which band-mcp

  2. Test server manually: BAND_API_KEY=... band-mcp

  3. Restart your AI assistant completely

  4. Check logs:

    # macOS
    tail -f ~/Library/Logs/Claude/mcp*.log

Common Error Solutions

Issue

Solution

"band-mcp command not found"

Install with pip install band-mcp or uv tool install band-mcp

"API key invalid"

Regenerate API key atapp.band.ai/settings/api-keys

"Connection refused"

Check firewall settings and network connectivity

💻 Development

Project Structure

band-mcp-server/
├── src/
│   └── band_mcp/              # Main package
│       ├── __init__.py            # Package initialization
│       ├── config.py              # CLI/env resolution, scope/tools parsing
│       ├── server.py              # MCP server entry point
│       ├── shared.py              # AppContext, HumanTools / AgentTools helpers
│       └── tools/
│           ├── __init__.py
│           └── registrar.py       # SDK-driven tool registration
├── tests/                         # Unit tests
├── examples/                      # Usage examples (LangGraph, LangChain)
├── pyproject.toml
├── .env.example
└── README.md

Tool implementations live in band-sdk (band.runtime.tools). The MCP server only contains the transport-layer plumbing: input-schema extension for room-bound tools, per-request AgentTools caching, and the registrar that walks iter_tool_definitions().

Setup Development Environment

# Clone the repository (with submodules for shared rules)
git clone --recurse-submodules https://github.com/thenvoi/thenvoi-mcp
cd thenvoi-mcp

# Copy environment template
cp .env.example .env  # then edit and set BAND_API_KEY

# Install with dev dependencies
uv sync --extra dev

# Install with ALL examples dependencies
uv sync --extra examples

# Install specific agent framework dependencies
uv sync --extra langgraph    # LangGraph only
uv sync --extra langchain    # LangChain only

# Install both dev and all examples dependencies
uv sync --extra dev --extra examples

# Install pre-commit hooks
uv run pre-commit install

Pre-Commit Hooks

This repository uses automated code quality tools:

  • Gitleaks: Prevents secrets from being committed

  • Ruff: Fast linter and formatter for code style, imports, and PEP8 compliance

The hooks will automatically check and format your code before each commit.

Local SDK Development

To develop against a local band-client-rest SDK instead of PyPI:

# 1. Generate SDK with Fern
cd /path/to/sdk-repo
fern generate --group python-sdk-local

# 2. Create package structure (Fern output needs wrapping)
mkdir -p sdk_package/band_rest
cp -r generated_sdk/* sdk_package/band_rest/

# 3. Create pyproject.toml for the package
cat > sdk_package/pyproject.toml << 'EOF'
[project]
name = "band-client-rest"
version = "0.0.1"
requires-python = ">=3.11"
dependencies = ["httpx>=0.25.0", "pydantic>=2.0.0"]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
EOF

# 4. Build wheel
cd sdk_package && uv build

# 5. Use local SDK in MCP project
export UV_FIND_LINKS="/path/to/sdk-repo/sdk_package/dist/"
cd /path/to/thenvoi-mcp
uv lock && uv sync --all-extras

After SDK changes:

# 1. Regenerate and rebuild wheel
cd /path/to/sdk-repo
fern generate --group python-sdk-local
rm -rf sdk_package/band_rest && mkdir -p sdk_package/band_rest
cp -r generated_sdk/* sdk_package/band_rest/
cd sdk_package && rm -rf dist && uv build

# 2. Clear uv cache and force reinstall
cd /path/to/thenvoi-mcp
uv cache clean --force band-client-rest
uv lock --upgrade-package band-client-rest
uv sync --all-extras

Important: You must clear the uv cache with uv cache clean --force band-client-rest before re-resolving. Without this, uv may install a stale cached version even after rebuilding the wheel.

Running Tests

# Run all tests with coverage
uv run pytest

# Verbose output
uv run pytest -v

# Run specific test file
uv run pytest tests/test_agents.py -v

# Generate HTML coverage report
uv run pytest --cov=src/band_mcp --cov-report=html

📚 Resources

Using Context7 MCP for Documentation

Context7 is an MCP server that provides up-to-date documentation for libraries and frameworks. It's highly recommended to use Context7 alongside Band MCP when developing—it helps your AI assistant fetch accurate, current documentation.

Adding Context7 to Your MCP Configuration

Add Context7 to your existing MCP configuration alongside Band:

{
  "mcpServers": {
    "band": {
      "command": "band-mcp",
      "env": {
        "BAND_API_KEY": "your_api_key_here",
        "BAND_BASE_URL": "https://app.band.ai"
      }
    },
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp@latest"]
    }
  }
}

Note: Context7 requires Node.js and npm/npx to be installed on your system.

How to Use Context7

Once configured, you can ask your AI assistant to fetch documentation:

  • "Look up the Band REST API documentation with Context7"

Context7 will retrieve current documentation directly from official sources, ensuring your AI assistant has accurate information when helping you code.

📄 License

MIT

Available Tools

44 tools
add_agent_chat_participantA

Add a participant (agent or user) to a chat room.

Adds a new participant to the specified chat room. The acting agent
must be the owner or admin of the room.

Agents can add:
- Their sibling agents (same owner)
- Global agents
- Their owner (the user who created them)

Use list_agent_peers(not_in_chat=chat_id) to discover available participants.

Args:
    chat_id: The unique identifier of the chat room (required).
    participant_id: The ID of the participant (user or agent) to add (required).
    role: The role to assign: 'owner', 'admin', or 'member' (optional, defaults to 'member').

Returns:
    Success message confirming the participant was added.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
participant_idYes
roleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior3/5

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

No annotations provided, so the description must cover behavioral traits. It mentions role assignment and default, and that a success message is returned, but does not disclose rate limits, idempotency, or error conditions (e.g., duplicate participant). Adequate but not comprehensive.

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

Conciseness4/5

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

The description is structured with intro, conditions, list, suggestion, Args, and Returns. Every sentence adds value, though the list of acceptable additions could be more compact. Clear and well-organized.

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

Completeness5/5

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

Given the tool's complexity (3 params, default role, prerequisites), the description covers the action, prerequisites, parameter details, discoverability hint, and return value. An output schema exists, so return structure is not needed. Complete for agent decision-making.

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?

Schema description coverage is 0%, so the description fully explains all three parameters in the Args section: chat_id, participant_id, and role with allowed values and default. This adds critical meaning beyond the schema.

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

Purpose5/5

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

The description clearly states 'Add a participant (agent or user) to a chat room.' using a specific verb and resource. It distinguishes from siblings like 'add_my_chat_participant' by specifying the chat room context and participant types.

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?

Provides explicit conditions: the acting agent must be owner/admin, lists who can be added (sibling agents, global agents, owner), and suggests using 'list_agent_peers' to discover participants. This gives clear guidance on when and how to use the tool.

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

add_agent_contactA

Send a contact request to another entity by handle.

Initiates a contact request. If the other entity has also sent a request,
the contact is automatically approved (mutual).

Args:
    handle: The handle of the entity to add as a contact (required).
    message: Optional message to include with the request.

Returns:
    JSON string containing the contact request status.
ParametersJSON Schema
NameRequiredDescriptionDefault
handleYes
messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/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 full burden. It discloses the mutual approval behavior and that it initiates a request, but does not cover error cases, permissions, or side effects like existing contacts.

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

Conciseness5/5

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

The description is concise with a single purpose sentence followed by structured args and returns. No wasted words.

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

Completeness4/5

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

Given the presence of an output schema, the description adequately covers the action and mutual case. It could mention edge cases or prerequisites but remains complete for most usage.

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 0%, so the description compensates by explaining 'handle' as 'The handle of the entity' and 'message' as 'Optional message'. This adds meaning beyond the schema's type-only definitions, but lacks formatting or constraint details.

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

Purpose5/5

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

The description clearly states the verb 'Send a contact request' and specifies the resource 'to another entity by handle'. It distinguishes from sibling tools like 'approve_contact_request' and 'respond_to_agent_contact_request' by noting the mutual approval behavior.

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 explains the action (initiating a contact request) and the condition for automatic approval (mutual). However, it lacks explicit guidance on when not to use this tool versus alternatives like 'create_contact_request' or 'respond_to_agent_contact_request'.

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

add_my_chat_participantB

Add a participant to a chat room.

Args:
    chat_id: The chat room ID (required).
    participant_id: ID of user or agent to add (required).
    role: 'owner', 'admin', or 'member' (optional, defaults to 'member').
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
participant_idYes
roleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description bears full burden. It states the action but does not disclose permissions, side effects, reversibility, or any behavioral traits beyond the parameter details.

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

Conciseness5/5

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

The docstring-style description is concise and well-structured, with each sentence adding value. No unnecessary words or repetition.

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

Completeness3/5

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

Given moderate complexity, the description covers basic purpose and parameters but omits preconditions, usage context, and output description. Since an output schema exists, the lack of return value information is acceptable, but more context would improve completeness.

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 description adds meaning beyond the schema by enumerating role values ('owner', 'admin', 'member') and stating a default of 'member'. It clarifies chat_id as 'chat room ID' and participant_id as 'ID of user or agent', compensating for 0% schema coverage.

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

Purpose4/5

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

The description clearly states 'Add a participant to a chat room,' using a specific verb and resource. It distinguishes itself from removal tools but does not explicitly differentiate from sibling 'add_agent_chat_participant'.

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 lists required and optional parameters with defaults, providing usage guidance. However, it lacks context on when to use this tool versus alternatives (e.g., add_agent_chat_participant) and does not mention prerequisites or exclusions.

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

approve_contact_requestA

Approve a received contact request.

Args:
    request_id: The contact request ID to approve (required).

Returns:
    JSON string confirming the approval.
ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It only states the return type (JSON string) but does not disclose behavioral traits such as side effects (e.g., adding a contact), required permissions, or irreversibility.

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

Conciseness5/5

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

The description is very concise with two sentences, front-loaded with the action, and every word is necessary. No wasted text.

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

Completeness3/5

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

Given the simple input (one parameter) and presence of an output schema, the description is adequate but lacks behavioral context. It does not explain what happens after approval (e.g., if the contact is automatically added) or if the action is reversible.

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 schema has zero description coverage, but the description adds clear meaning to the parameter 'request_id' by stating it is the contact request ID to approve and that it is required.

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

Purpose5/5

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

The description clearly states the tool approves a received contact request, using a specific verb and resource, and it implicitly distinguishes from sibling tools like reject_contact_request and cancel_contact_request.

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

Usage Guidelines3/5

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

The description implies that the tool should be used when approving a received request, but it does not explicitly mention when not to use it or provide alternatives. Siblings are not referenced.

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

cancel_contact_requestC

Cancel a sent contact request.

Args:
    request_id: The contact request ID to cancel (required).

Returns:
    JSON string confirming the cancellation.
ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It only mentions cancellation and return format, but lacks disclosure of side effects, permissions, error handling, or idempotency.

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

Conciseness3/5

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

The description is short and includes an Args section, but is under-specified. It could be more informative without increasing length significantly.

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

Completeness2/5

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

For a simple cancellation tool, the description is minimal but lacks details on error cases, idempotency, and what 'cancelling' entails. The output schema is present but not described.

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

Parameters2/5

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

Schema description coverage is 0%, and the description merely restates the schema ('The contact request ID to cancel (required).'). It adds no additional meaning about the parameter's format, constraints, or behavior.

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

Purpose4/5

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

The description clearly states the action (cancel) and the resource (sent contact request). However, it does not differentiate from sibling tools like 'reject_contact_request' or 'respond_to_agent_contact_request'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description only states what it does without any context about prerequisites or exclusions.

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

create_agent_chatA

Create a new chat room with the agent as owner.

Creates a new chat room where the authenticated agent is automatically
set as the owner. Optionally associates the chat with a task.

Args:
    task_id: Optional ID of an associated task.

Returns:
    JSON string containing the created chat room details.
ParametersJSON Schema
NameRequiredDescriptionDefault
task_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/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 discloses ownership behavior and optional task association but does not detail side effects (e.g., permissions, notification, error handling). Adequate but not rich for a mutation tool.

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

Conciseness5/5

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

The description is structured with a concise summary line, followed by details, clear Args/Returns sections, and no extraneous content. Front-loaded and efficient.

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

Completeness5/5

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

For a simple tool with one optional parameter and an output schema, the description covers purpose, parameter usage, return format, and ownership. No gaps given the tool's complexity.

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 0%, so the description must compensate. It provides a clear explanation of the 'task_id' parameter as 'Optional ID of an associated task', adding meaning beyond the schema's type-only definition.

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 explicitly states the action ('Create a new chat room') and the resource ('the agent as owner'), clearly distinguishing it from sibling tools like 'create_my_chat' which likely creates a user-owned chat.

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 mentions the optional task association but does not explicitly guide when to use this tool versus alternatives like create_my_chat. It implies use for agent-owned chats but lacks explicit when-not-to-use guidance.

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

create_agent_chat_eventA

Post an event in a chat room (tool_call, tool_result, thought, error, task).

Creates a new event in a chat room. Events do NOT require mentions - they
report what happened rather than directing messages at participants.

Event types and their content/metadata structure:

- **tool_call**: Agent invokes a tool
  - content: Human-readable description (e.g., "Calling send_direct_message_service")
  - metadata: {"function": {"name": "fn_name", "arguments": {...}}, "id": "call_id", "type": "function"}

- **tool_result**: Result from tool execution
  - content: Human-readable summary (e.g., "Message sent successfully")
  - metadata: {"success": true, "message": "...", ...result data}

- **thought**: Agent's internal reasoning
  - content: The reasoning text
  - metadata: Optional

- **error**: Error or failure notification
  - content: Error message
  - metadata: {"error_code": "...", "details": {...}}

- **task**: Task-related message
  - content: Task message
  - metadata: Optional

For text messages with mentions, use create_agent_chat_message instead.

Args:
    chat_id: The unique identifier of the chat room (required).
    content: Human-readable event content (required).
    message_type: Event type (required). One of: 'tool_call', 'tool_result',
                'thought', 'error', 'task'.
    metadata: Optional JSON object with structured event data. Structure varies by message_type.

Returns:
    JSON string containing the created event details.

Examples:
    # Tool call event
    create_agent_chat_event(
        chat_id="123",
        content="Calling weather_service",
        message_type="tool_call",
        metadata='{"function": {"name": "get_weather", "arguments": {"city": "NYC"}}, "id": "call_1", "type": "function"}'
    )

    # Tool result event
    create_agent_chat_event(
        chat_id="123",
        content="Weather retrieved successfully",
        message_type="tool_result",
        metadata='{"success": true, "temperature": 72, "conditions": "sunny"}'
    )

    # Thought event
    create_agent_chat_event(
        chat_id="123",
        content="I should check the weather before suggesting outdoor activities",
        message_type="thought"
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
contentYes
message_typeYes
metadataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description bears full burden. It explains events don't require mentions and describes event type structures. But it does not disclose whether events persist, visibility, required permissions, or side effects.

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

Conciseness4/5

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

Well-structured with headers, bullet lists, and examples. Slightly verbose but every section adds value. Could trim redundant 'human-readable' phrases.

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

Completeness4/5

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

Covers purpose, parameter semantics, event types, sibling differentiation, and provides examples. Missing behavioral context like persistence and permissions, but otherwise complete for a 4-parameter tool with output schema.

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?

Adds significant detail beyond the schema: chat_id as unique identifier, content as human-readable, message_type as enum with allowed values explained via examples, metadata as optional JSON with structure by type. The 0% schema coverage makes this critical and it delivers.

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?

Description clearly states it posts events in a chat room, lists five specific event types, and explicitly differentiates from create_agent_chat_message for text messages with mentions. Uses a specific verb 'post' and resource 'event'.

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 says to use create_agent_chat_message for text messages with mentions, and notes events don't require mentions. However, it doesn't detail when to use each event type or contrast with other tools like send_my_chat_message.

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

create_agent_chat_messageA

Send a text message in a chat room.

Creates a new text message in a chat room. Messages MUST include at least
one @mention to ensure proper routing to recipients.

TWO WAYS TO SPECIFY RECIPIENTS:

Option 1 - Use `recipients` (recommended for LLMs):
    Provide comma-separated names. The tool resolves names to IDs automatically.
    Example: recipients="weather agent,sarah"

Option 2 - Use `mentions` (for libraries with caching):
    Provide a JSON array with pre-resolved IDs.
    Example: mentions='[{"id": "uuid-123", "name": "weather agent"}]'

If both are provided, `mentions` takes precedence (no API call needed).

For event-type messages (tool_call, tool_result, thought, error, etc.),
use create_agent_chat_event instead.

Args:
    chat_id: The unique identifier of the chat room (required).
    content: The message content/text (required).
    recipients: Comma-separated participant names to tag (LLM-friendly).
               Example: "weather agent,sarah,mike"
               Names are resolved to IDs via list_agent_chat_participants.
    mentions: JSON array of mentions with pre-resolved IDs (for libraries).
             Format: [{"id": "uuid", "name": "display_name"}, ...]
             When provided, skips name resolution (more efficient).

Returns:
    JSON string containing the created message details.

Examples:
    # LLM usage (names):
    create_agent_chat_message(chat_id="123", content="Hello!", recipients="weather agent")

    # Library usage (pre-resolved IDs):
    create_agent_chat_message(
        chat_id="123",
        content="Hello!",
        mentions='[{"id": "uuid-456", "name": "weather agent"}]'
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
contentYes
recipientsNo
mentionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses the @mention requirement, recipient resolution behavior, and precedence rules. However, it does not mention error handling or permissions, though these are minor omissions for a create operation.

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?

Well-structured with sections and examples, but slightly lengthy. Every sentence adds value, but could be tighter. Front-loaded with core purpose.

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

Completeness5/5

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

Covers all aspects: purpose, parameters, usage guidelines, return value (JSON string). Sibling tool create_agent_chat_event is mentioned for event messages. Complete for an agent to select and invoke correctly.

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?

Schema description coverage is 0%, but description adds extensive meaning: explains chat_id, content, recipients (comma-separated names), mentions (JSON array), precedence rules, and examples. This fully compensates for the lack of schema descriptions.

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

Purpose5/5

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

The description clearly states the tool sends a text message in a chat room and differentiates it from create_agent_chat_event for event-type messages. The verb 'send' and resource 'text message' are explicit.

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?

Provides explicit guidelines: must include at least one @mention, two ways to specify recipients (LLM-friendly vs. pre-resolved), and when to use each. Also directs to an alternative tool for event-type messages.

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

create_contact_requestA

Send a contact request to another user.

Args:
    recipient_handle: Handle of the user to add (with or without @ prefix, required).
    message: Optional message to include with the request (max 500 chars).

Returns:
    JSON string containing the created contact request details.
ParametersJSON Schema
NameRequiredDescriptionDefault
recipient_handleYes
messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only mentions the return type (JSON string) but does not discuss mutation aspects, error conditions, idempotency, or authentication needs. Minimal behavioral context.

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

Conciseness5/5

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

The description is concise: one sentence for purpose, followed by structured Args and Returns sections. No unnecessary words, front-loaded with purpose.

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

Completeness3/5

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

Given the tool's simplicity (2 params, no nested objects), the description covers the basics well. However, it lacks broader context such as error handling, asynchronous behavior, or how this fits with sibling tools. An output schema exists, so return values are partially documented, but no further completeness.

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?

The description adds meaning beyond the input schema: it specifies the handle format (with/without @ prefix), requiredness, and max character count for message. Schema coverage is effectively 100% from the description, and it provides constraints not in the schema.

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

Purpose5/5

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

The description clearly states 'Send a contact request to another user,' which is a specific verb+resource combination. It distinguishes from sibling tools like approve_contact_request and cancel_contact_request.

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

Usage Guidelines3/5

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

The description implies when to use the tool (to initiate a contact request) but does not explicitly state when not to use it or provide alternative guidance. Context from sibling tools suggests related operations, but the description lacks direct comparison.

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

create_my_chatB

Create a new chat room with the user as owner.

Args:
    task_id: Optional task ID to associate with the chat.
ParametersJSON Schema
NameRequiredDescriptionDefault
task_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavioral traits. It states creation and ownership but lacks details on permissions, idempotency, or side effects. Minimal disclosure for a mutation tool.

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

Conciseness5/5

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

Two sentences, no redundancy. Purpose is stated first, followed by parameter explanation. Every word serves a purpose.

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

Completeness3/5

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

Given the simplicity of the tool (one optional parameter, no nested objects) and presence of an output schema, the description is minimally adequate. However, it does not differentiate from siblings or clarify the chat room concept. Lacks completeness for full context.

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

Parameters3/5

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

The description adds semantic value to the 'task_id' parameter by stating it is 'Optional task ID to associate with the chat'. Schema coverage is 0%, so this brief explanation is helpful but does not fully compensate.

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

Purpose5/5

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

The description clearly states the verb 'create' and the resource 'chat room with the user as owner'. This distinguishes it from sibling 'create_agent_chat' which creates an agent chat. No ambiguity.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'create_agent_chat' or scenarios requiring participant addition. No exclusions or context for usage.

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

get_agent_chatA

Get a specific chat room by ID.

Retrieves detailed information about a single chat room where
the agent is a participant.

Args:
    chat_id: The unique identifier of the chat room (required).

Returns:
    JSON string containing the chat room details.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It does not disclose behavioral traits such as read-only nature, potential errors (e.g., invalid chat_id), or access restrictions. It only states that it retrieves information without any additional behavioral context.

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

Conciseness5/5

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

The description is front-loaded with the main purpose, followed by a brief explanation and a clear Args section. No unnecessary words, and the structure is efficient and easy to parse.

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

Completeness3/5

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

Given no annotations and only one parameter, the description is fairly complete. However, it could provide more detail about the return value (e.g., fields included in the JSON string) to help the agent understand what to expect.

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 0%, so the description adds value by explaining 'chat_id: The unique identifier of the chat room (required).' This adds meaning beyond the schema's title and type, though it could specify format or source of the ID.

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

Purpose5/5

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

The description clearly states 'Get a specific chat room by ID' and specifies that it retrieves detailed information about a single chat room where the agent is a participant. This is specific and distinct from sibling tools like list_agent_chats or create_agent_chat.

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

Usage Guidelines3/5

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

The description implies usage when you have a chat_id but does not explicitly state when to use this tool versus alternatives. It provides the required parameter, which guides usage, but lacks exclusion criteria or mention of alternatives.

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

get_agent_chat_contextA

Get conversation context for agent rehydration.

Returns all messages relevant to the agent for execution context/rehydration.
This includes:
- All messages the agent sent (any type: text, tool_call, tool_result, thought, etc.)
- All text messages that @mention the agent

Use this to load the complete context a remote agent needs to resume execution.
Messages are returned in chronological order (oldest first).

Args:
    chat_id: The unique identifier of the chat room (required).
    page: Page number for pagination (optional, default: 1).
    page_size: Items per page (optional, default: 50, max: 100).

Returns:
    JSON string containing the agent's conversation context with messages.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 full burden. It discloses chronological order and message types included. However, it does not mention authentication requirements, rate limits, or behavior for edge cases (e.g., empty chat, large pages). It covers the basics but lacks some operational details.

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

Conciseness5/5

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

The description is well-structured with bullet points for included content and a clear Args section. It is concise, every sentence adds value, and the important 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?

Given that an output schema exists, the return description is sufficient. The tool covers what it does, when to use it, and parameters. Minor gaps like error handling or empty results are not addressed, but overall it is complete for its purpose.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains all three parameters: chat_id as required identifier, page and page_size with defaults and max. This adds significant value beyond the schema's bare titles.

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

Purpose5/5

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

The description clearly states the tool retrieves conversation context for agent rehydration, specifying exactly which messages are included (all agent-sent messages and @mentions). It distinguishes itself from siblings like get_agent_next_message or list_agent_messages by explicitly stating its use case for rehydration.

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

Usage Guidelines4/5

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

The description explicitly says 'Use this to load the complete context a remote agent needs to resume execution,' providing clear guidance on when to use it. It does not mention when not to use it or directly name alternative tools, but given the sibling list, the context is clear enough for an AI agent.

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

get_agent_meA

Get the current agent's profile.

Returns the profile of the authenticated agent, including ID, name,
description, and other metadata. Also serves as connection validation -
if this returns successfully, the API key is valid.

Returns:
    JSON string containing the agent's profile.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 clearly indicates this is a read-only operation (returns profile) and serves as connection validation. However, it does not mention any potential side effects or authentication requirements beyond validation.

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

Conciseness5/5

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

The description is concise (4 lines), front-loads the main purpose, and includes useful extra information (connection validation) without unnecessary detail.

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

Completeness5/5

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

Given the simplicity (no parameters, output schema present), the description is fully complete: it states purpose, return content, and a use case. The output schema handles return value details.

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

Parameters3/5

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

The input schema has no parameters with 100% coverage, so the description need not add parameter details. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Get the current agent's profile' and specifies the contained fields (ID, name, description, metadata). It distinguishes from siblings as it uniquely targets the authenticated agent.

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 mentions connection validation as a use case, but fails to differentiate from the similar sibling tool 'get_my_profile'. No explicit when-not-to-use or alternative guidance.

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

get_agent_next_messageA

Get the next message that needs processing.

Returns the single oldest message that is NOT processed, including
new, delivered, processing (stuck/crashed), and failed messages.

Returns empty result if there are no messages to process.

This is the primary endpoint for agent reasoning loops:
1. Call this tool to get the next work item
2. Call mark_agent_message_processing to claim the message
3. Process the message (reasoning, tool calls, etc.)
4. Call mark_agent_message_processed or mark_agent_message_failed
5. Loop back to step 1

Crash recovery: If the agent crashes while processing, the message stays
in "processing" state. When restarted, calling this tool returns that same
stuck message (oldest first), allowing the agent to reclaim and retry it.

Difference from list_agent_messages:
- list_agent_messages returns ALL actionable messages (batch processing)
- get_agent_next_message returns ONE message (sequential processing loops)

Args:
    chat_id: The unique identifier of the chat room (required).

Returns:
    JSON string containing the next message to process, or empty if none.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses behavioral traits such as returning messages in various states (new, delivered, processing, failed), handling crash recovery by returning stuck messages, and returning empty results when none exist. No contradictions.

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

Conciseness4/5

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

The description is well-structured with sections and bullet points, front-loaded with the main purpose. While slightly lengthy, every sentence adds value, explaining behavior, usage, and comparison. It earns its length.

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

Completeness5/5

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

Given a single parameter and an output schema, the description is complete. It covers return values (JSON string or empty), behavior (oldest first, includes stuck messages), and use cases (sequential processing loops). No gaps.

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 description adds an 'Args' section explaining 'chat_id' as 'The unique identifier of the chat room (required)', which adds meaning beyond the input schema's title 'Chat Id'. Schema coverage is 0%, so the description compensates well.

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

Purpose5/5

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

The description clearly states 'Get the next message that needs processing' and specifies it returns the single oldest unprocessed message. It explicitly distinguishes from the sibling tool 'list_agent_messages' which returns all messages, providing strong differentiation.

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

Usage Guidelines5/5

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

The description includes a step-by-step workflow for an agent reasoning loop, explaining when to call this tool (to get the next work item) and explicitly contrasts with 'list_agent_messages' for batch processing. It also covers crash recovery scenarios.

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

get_my_chatC

Get a specific chat room by ID.

Args:
    chat_id: The chat room ID (required).
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided; description only restates the action. Does not disclose error handling, access control, or whether the chat must belong to the user.

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?

Extremely concise with two sentences. The primary action is front-loaded with no extraneous information.

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

Completeness3/5

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

For a simple retrieval tool, the description is minimally functional but lacks context on output, error cases, and ownership requirements. An output schema exists but is not shown.

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

Parameters2/5

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

Schema description coverage is 0%, but the description adds minimal value by restating that chat_id is required. Does not explain expected format or constraints (e.g., UUID).

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'specific chat room by ID', making the action unambiguous. It distinguishes from sibling tools like 'create_my_chat' or 'list_my_chats'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'get_agent_chat' or 'list_my_chats'. No conditions or prerequisites mentioned.

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

get_my_profileA

Get the current user's profile details.

Returns your profile information including name, email, role, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must cover behavioral traits. It only states that the tool returns profile information without mentioning idempotency, side effects, or authentication requirements. The read-only nature is implied but not explicit.

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

Conciseness5/5

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

The description is two short, front-loaded sentences with no superfluous information. Every word serves a purpose.

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

Completeness5/5

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

Given the tool's simplicity (zero parameters, output schema exists), the description provides sufficient context for an agent to understand the action and expected output. No additional details are necessary.

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?

There are zero parameters, and the schema coverage is 100%. The description adds no information about parameters beyond the schema, but the baseline is 3 for high schema coverage.

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

Purpose5/5

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

The description clearly states 'Get the current user's profile details' and lists included fields, making the purpose unambiguous. It distinguishes this tool from sibling tools like update_my_profile or get_agent_me.

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

Usage Guidelines3/5

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

The description implies the tool is for retrieving one's own profile, but it does not explicitly state when to use it over alternatives or exclude other scenarios. No guidance on prerequisites.

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

health_checkA

Test MCP server and API connectivity.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

The description does not disclose behavioral traits beyond the basic action. With no annotations provided, the description carries the full burden, but it fails to indicate whether the operation is read-only, destructive, or has side effects. A health check is likely safe, but this is not stated.

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

Conciseness5/5

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

The description is a single sentence with no wasted words. It is appropriately sized for a simple health check tool.

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

Completeness4/5

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

Given the tool's simplicity (no parameters, trivial purpose) and the presence of an output schema, the description is nearly complete. It could mention the expected success/failure indicator, but the output schema likely covers that.

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?

There are zero parameters, so the input schema is trivially covered. The description does not add parameter semantics, but none are needed. Baseline score of 4 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Test MCP server and API connectivity.' It uses a specific verb ('Test') and resource ('MCP server and API connectivity'), and it is distinct from all sibling tools which are focused on chat/contact management.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool vs alternatives. However, since no sibling tool performs a health check, usage context is implied. A higher score would require explicit when-to-use or when-not-to-use statements.

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

list_agent_chat_participantsB

List participants in a chat room.

Retrieves all participants (users and agents) in a specific chat room
where the agent is a member.

Args:
    chat_id: The unique identifier of the chat room (required).

Returns:
    JSON string containing the list of participants.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations exist, so the description must carry full burden. It only states it retrieves participants and returns JSON, without revealing side effects, error behavior, or authorization requirements. This is minimal for a read operation.

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

Conciseness5/5

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

The description is concise, with clear Args and Returns sections. Every sentence adds value, and the structure is optimal for agent consumption.

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

Completeness3/5

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

For a simple tool with one parameter, the description is adequate. However, it lacks details on error scenarios, authentication, or the scope of participants (e.g., active vs. all). An output schema exists but is not detailed in the description.

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

Parameters3/5

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

Schema coverage is 0%, but the description adds meaning by labeling chat_id as 'the unique identifier of the chat room (required)'. This provides basic context beyond the schema's type, but does not offer format or constraints.

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

Purpose4/5

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

The description clearly states the tool lists participants in a chat room, specifying 'where the agent is a member'. This distinguishes it from general participant listing tools, though the difference from list_my_chat_participants is not explicitly clarified.

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 (for agent-member chats) but no explicit guidance on when to use versus siblings like add_agent_chat_participant or list_my_chat_participants. No exclusions or prerequisites mentioned.

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

list_agent_chatsB

List chat rooms where the agent is a participant.

Retrieves a list of chat rooms that the authenticated agent participates in.
Supports pagination.

Args:
    page: Page number for pagination (optional).
    page_size: Number of items per page (optional).

Returns:
    JSON string containing the list of chat rooms.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided; description does not disclose behavioral traits such as authentication requirements, rate limits, or side effects beyond stating it returns a JSON string of chat rooms.

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?

Description is concise and well-structured with clear Args/Returns sections. No redundant information, but 'Args:' formatting adds slight verbosity.

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?

Adequate for a simple list tool with pagination. However, given existence of sibling tools and no output schema details, it could include more context about the structure of the returned JSON.

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 0%, so description adds meaning by explaining page and page_size as pagination controls. This compensates for the lack of schema descriptions.

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

Purpose4/5

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

The description clearly states the action (List), resource (chat rooms), and scope (agent participant). It is specific and distinguishable from similar list tools, though it does not explicitly contrast with siblings like list_my_chats.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., list_my_chats). Mentions pagination but lacks exclusions or context for selective use.

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

list_agent_contact_requestsA

List the agent's contact requests (both sent and received).

Returns both received (pending) and sent contact requests.
Use sent_status to filter sent requests by status.

Args:
    page: Page number for pagination (optional).
    page_size: Number of items per page (optional).
    sent_status: Filter sent requests by status: 'pending', 'approved',
                'rejected', 'cancelled', or 'all' (optional).

Returns:
    JSON string containing received and sent contact requests.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo
sent_statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided, so description must disclose behavior. It states that both received and sent requests are returned, and sent_status filters sent requests. It does not explicitly state read-only nature, but it's a list operation and description implies no side effects.

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

Conciseness5/5

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

Description is concise with a clear intro, then Args section, then Returns line. No unnecessary words, and 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?

With an output schema present, the description adequately covers return format. It could mention pagination defaults or error conditions, but it's sufficient for an agent to use correctly.

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?

Schema coverage is 0%, but description fully documents all three parameters with types, defaults, and enum values for sent_status. This adds significant meaning beyond the bare schema types.

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?

Description clearly states 'List the agent's contact requests (both sent and received).' This differentiates from sibling tools like list_received_contact_requests and list_sent_contact_requests by combining both types in one call.

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?

Description explains use of sent_status filter, and the context of siblings implies when to use this combined version vs separate lists. However, no explicit 'when not to use' or alternative tool names are mentioned.

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

list_agent_contactsA

List the agent's contacts.

Returns contacts that have been approved (mutual connections).
Each contact includes handle, name, type, and description.

Args:
    page: Page number for pagination (optional).
    page_size: Number of items per page (optional).

Returns:
    JSON string containing the list of contacts.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 adequately discloses behavior: it lists approved mutual contacts, mentions returned fields (handle, name, type, description), and supports pagination. No contradictions.

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

Conciseness5/5

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

The description is concise, front-loaded with the main action, uses clear sections (Returns, Args, Returns), and every sentence adds value without 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 listing tool with two optional parameters, the description covers purpose, return fields, and pagination. Output schema exists, reducing need for further detail.

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?

Input schema lacks parameter descriptions (0% coverage), but the description explains page and page_size as optional pagination parameters, adding meaning beyond the schema's type info.

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

Purpose5/5

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

The description clearly states 'List the agent's contacts' and specifies they are 'approved (mutual connections)', distinguishing it from sibling tools like list_my_contacts or list_agent_peers.

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 indicates the tool returns only mutual contacts, implying use case for retrieving approved connections, but lacks explicit when-not or alternative tool guidance.

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

list_agent_messagesA

List messages that the agent needs to process, filtered by status.

Default behavior (no status): Returns all messages that are NOT processed.
This is the recommended way to get all work the agent should handle, including
new, delivered, processing (stuck/crashed), and failed messages.

Status filter options:
- (no param): Everything NOT processed - get all work to do
- "pending": No status, delivered, or failed without active attempt - queue depth
- "processing": Currently being processed - in-flight work
- "processed": Successfully completed - done items
- "failed": Failed only - failure backlog
- "all": All messages regardless of status - full history

Messages are returned in chronological order (oldest first).

Workflow after retrieving messages:
1. Get messages via this tool or get_agent_next_message
2. Call mark_agent_message_processing before starting work
3. Process the message
4. Call mark_agent_message_processed or mark_agent_message_failed

Args:
    chat_id: The unique identifier of the chat room (required).
    status: Filter by processing status (optional, default: all actionable).
    page: Page number for pagination (optional).
    page_size: Items per page (optional, default: 20, max: 100).

Returns:
    JSON string containing the list of messages.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
statusNo
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Without annotations, the description covers default behavior, chronological ordering, and return type (JSON string). It does not mention rate limits, auth needs, or error handling, but provides sufficient context for safe use.

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

Conciseness5/5

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

The description is well-structured with clear sections (default, status options, sorting, workflow, args). Every sentence adds value and it is front-loaded with the main purpose. No wasted words.

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

Completeness5/5

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

Given 4 parameters, no annotations, and an output schema (implied), the description covers filtering, pagination, sorting, and workflow adequately. It explains return value as 'JSON string containing list of messages', which is sufficient.

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?

Input schema has 0% description coverage, so the description fully compensates. It explains each parameter: chat_id required, status options with detailed meanings, page and page_size with defaults and max.

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

Purpose5/5

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

The description clearly states 'List messages that the agent needs to process, filtered by status.' It specifies the resource (agent messages) and action (list). It distinguishes from sibling tool 'get_agent_next_message' by referencing it in the workflow.

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

Usage Guidelines5/5

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

The description explicitly explains default behavior (no status returns actionable messages) and when to use each status filter. It provides a workflow after retrieval, listing alternative tool 'get_agent_next_message' in step 1.

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

list_agent_peersA

List agents that can be recruited by the current agent.

Returns a list of peers (other agents) that can be added to chat rooms.
Includes sibling agents (same owner) and global agents. Excludes self.

Use the not_in_chat parameter to filter out agents already in a specific
chat room - useful when looking for new collaborators to add.

Args:
    not_in_chat: Exclude agents already in this chat room ID (optional).
    page: Page number for pagination (optional).
    page_size: Number of items per page (optional).

Returns:
    JSON string containing the list of available peers.
ParametersJSON Schema
NameRequiredDescriptionDefault
not_in_chatNo
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 discloses the return behavior (list of peers), inclusion/exclusion criteria, and return format. No side effects are mentioned, but the operation is 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?

The description is concise and well-structured: a one-line summary, a brief paragraph, and a bulleted Args list. Every sentence adds value 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?

The description covers functionality, parameters, and return type adequately for a list tool. Missing details like pagination defaults or limits, but overall sufficient.

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?

The input schema has 0% description coverage, but the tool description includes an Args section that fully explains each parameter (not_in_chat, page, page_size), adding significant meaning beyond types and defaults.

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

Purpose5/5

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

The description clearly states the tool lists agents that can be recruited by the current agent, includes sibling and global agents, and excludes self. The purpose is specific and distinct from siblings like list_my_peers.

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

Usage Guidelines4/5

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

The description provides context on when to use the not_in_chat parameter, but does not explicitly compare to alternative tools or state when not to use the tool.

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

list_my_agentsB

List agents owned by the user.

Args:
    page: Page number (optional).
    page_size: Items per page (optional).
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided; the description only states the basic action. It does not disclose read-only nature, authentication requirements, rate limits, or any side effects. The description fails to compensate for missing annotations.

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 appropriately short and includes an Args section. It is well-structured and avoids unnecessary verbosity.

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

Completeness3/5

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

Given the tool's simplicity (2 optional parameters, no required, output schema exists), the description provides minimal but acceptable completeness. However, it lacks behavioral context that would be helpful for an agent.

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

Parameters2/5

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

Schema description coverage is 0%. The description repeats parameter names (page, page_size) without adding any semantic meaning, constraints, or default behaviors beyond what is already in the schema.

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

Purpose5/5

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

The description clearly states the action (List) and the resource (agents owned by the user). It distinguishes from siblings like list_my_contacts and list_my_chats by specifying ownership and agent scope.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. For example, it doesn't explain when to use list_my_agents vs list_agent_chats or other list tools.

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

list_my_chat_messagesC

List messages in a chat room.

Args:
    chat_id: The chat room ID (required).
    page: Page number (optional).
    page_size: Items per page (optional).
    message_type: Filter by type: 'text', 'tool_call', etc. (optional).
    since: ISO 8601 timestamp to filter messages after (optional).
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
pageNo
page_sizeNo
message_typeNo
sinceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as whether pagination is zero-indexed, maximum page size, rate limits, authentication requirements, or error behaviors. It only lists parameters without explaining operational semantics.

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 concise with a clear Args list. It avoids extraneous content and front-loads the core purpose. Each sentence serves a purpose, though it could be slightly more streamlined.

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

Completeness3/5

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

Given the presence of an output schema, return values are not required. However, the description lacks mention of ordering, default pagination behavior, or any edge-case handling, which are important for a listing tool with multiple optional filters.

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 0%, so the description must compensate. It adds useful details: 'page number', 'items per page', filter by type examples ('text', 'tool_call'), and 'ISO 8601 timestamp'. However, it does not specify default values or constraints beyond what the schema implies.

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

Purpose4/5

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

The description clearly states 'List messages in a chat room', which is a verb (list) and resource (messages). It differentiates from sibling tools like 'list_agent_messages' by the 'my' prefix, but doesn't explicitly clarify that it lists the user's own chat messages.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool vs alternatives like 'list_agent_messages' or 'list_my_chats'. No context about prerequisites or preferred scenarios.

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

list_my_chat_participantsB

List participants in a chat room.

Args:
    chat_id: The chat room ID (required).
    participant_type: Filter by type: 'User' or 'Agent' (optional).
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
participant_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states 'List participants' without mentioning pagination, ordering, permission requirements, error cases, or whether it returns all or only visible participants. This is a significant gap for a read operation.

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 very brief, using two lines for text and two for arguments. It is efficient but could benefit from a one-line summary of purpose before the args. No unnecessary content.

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

Completeness2/5

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

Despite having an output schema (not provided), the description does not explain return structure, error handling, or scope (my chats vs agent chats). With no annotations, a minimal description like this is incomplete for an agent to reliably use the tool without additional context.

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

Parameters4/5

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

The schema has 0% description coverage, but the description adds meaning: chat_id is labeled as 'The chat room ID (required)' and participant_type as 'Filter by type: 'User' or 'Agent' (optional)', which clarifies usage and specifies allowed values beyond the schema's bare type definitions.

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

Purpose4/5

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

The description clearly states 'List participants in a chat room' with specific arguments for chat_id and participant_type, making the action and resource clear. However, it does not distinguish from sibling tool list_agent_chat_participants by noting the scope (my chats vs agent chats), which slightly reduces clarity.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like add_my_chat_participant, remove_my_chat_participant, or list_agent_chat_participants. The description lacks context on prerequisites or exclusions, making it insufficient for an agent to decide optimal usage.

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

list_my_chatsB

List chat rooms where the user is a participant.

Args:
    page: Page number (optional).
    page_size: Items per page (optional).
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations exist, so the description carries full behavioral disclosure burden. It only states the basic function without mentioning pagination behavior, rate limits, ordering, or any side effects. The output schema exists but is not described.

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

Conciseness5/5

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

The description is extremely concise with a one-line purpose and two parameter descriptions. There is no fluff or redundancy, earning high marks for efficiency.

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

Completeness3/5

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

For a simple list tool with pagination, the description provides basic purpose and parameter hints. However, it lacks details such as default values (though schema shows defaults), ordering, and whether pagination yields all pages. The output schema exists but is not described, which is acceptable. The description is adequate but not comprehensive.

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 schema description coverage is 0%, but the description adds meaningful info: 'Page number (optional)' and 'Items per page (optional)' clarifies the parameters' roles and optionality beyond the schema's type and default.

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

Purpose4/5

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

The description clearly states it lists chat rooms where the user is a participant, which is a specific verb and resource. However, it does not differentiate from sibling tools like list_agent_chats for agents or list_my_chat_messages for messages, leaving some ambiguity.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or exclusions, leaving the agent without direction.

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

list_my_contactsB

List the user's contacts.

Returns active contacts with their details including handle, email, and type.

Args:
    page: Page number for pagination (optional).
    page_size: Number of items per page (optional).

Returns:
    JSON string containing the list of contacts.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

Description states it lists active contacts and returns details, implying read-only. But without annotations, it fails to mention authentication, rate limits, or sorting behavior. Adequate but not exhaustive.

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?

Description is short and front-loaded with the main purpose. The Args and Returns sections are clear but slightly redundant given the output schema. Still concise overall.

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

Completeness3/5

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

For a simple paginated list, the description covers input and output basics. Missing default pagination behavior, sorting order, and handling of empty results. Adequate but incomplete.

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

Parameters2/5

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

Schema coverage is 0% (no parameter descriptions in schema). The description adds 'page number for pagination' and 'number of items per page', but doesn't explain defaults (null) or behavior when omitted. Minimal added value.

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

Purpose5/5

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

The description clearly states the tool lists the user's contacts, specifying it returns active contacts with details like handle, email, and type. This clearly distinguishes it from sibling tools like 'list_agent_contacts' or 'remove_my_contact'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like 'list_my_peers' or 'list_my_agents'. No not-use conditions or prerequisites are mentioned.

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

list_my_peersA

List entities you can interact with in chat rooms.

Peers include other users, your agents, and global agents.

Args:
    not_in_chat: Exclude entities already in this chat room (optional).
    peer_type: Filter by type: 'User' or 'Agent' (optional).
    page: Page number (optional).
    page_size: Items per page (optional).
ParametersJSON Schema
NameRequiredDescriptionDefault
not_in_chatNo
peer_typeNo
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations provided. The description indicates a read operation and mentions parameters for filtering, but lacks details on pagination behavior, authentication requirements, or whether global agents are always included. It does not contradict any annotations (none present), but more behavioral context would be helpful.

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 brief with a clear structure: a purposeful sentence, an explanatory sentence, and a parameter list. No redundant information. Could be slightly more compact, but effective.

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 an output schema present, the description doesn't need to explain return values. It adequately covers the tool's purpose and parameter semantics. Only minor gaps like default pagination limits or whether result ordering is defined.

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

Parameters4/5

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

Schema description coverage is 0%, so the description compensates by explaining each parameter's purpose: not_in_chat excludes entities already in a chat, peer_type filters by 'User' or 'Agent', page/page_size for pagination. This adds meaningful context beyond the schema's types and names.

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

Purpose5/5

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

The description clearly states it lists entities you can interact with in chat rooms, specifying peers include other users, agents, and global agents. This effectively distinguishes it from siblings like list_my_agents (lists your own agents) and list_my_contacts (contacts).

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

Usage Guidelines3/5

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

The description implies the tool is for listing available participants for chat rooms, but it doesn't explicitly state when to use this over alternatives. No exclusion or comparison with similar list tools (e.g., list_my_contacts, list_agent_peers). An agent might infer usage from context, but guidance is implicit.

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

list_received_contact_requestsA

List contact requests received by the user.

Returns pending contact requests that need approval or rejection.

Args:
    page: Page number for pagination (optional).
    page_size: Number of items per page (optional).

Returns:
    JSON string containing the list of received contact requests.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Given no annotations, the description discloses that the tool returns only pending contact requests (not all received), is a read operation, and provides pagination. It could mention if requests are sorted or if any filtering applies, but it adequately covers the core 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?

The description is concise (4 short sentences) with clear sections for Args and Returns. Every sentence adds value without redundancy.

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

Completeness5/5

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

For a simple list tool with two optional parameters and an output schema, the description fully covers purpose, state (pending), and pagination. No gaps given the low complexity.

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

Parameters4/5

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

The input schema has 0% coverage, but the description explains both parameters (page and page_size) as optional pagination controls, which adds meaningful context beyond the schema types.

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

Purpose5/5

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

The description clearly states the tool lists 'received contact requests' and specifies that it returns pending ones needing approval or rejection. It distinguishes from siblings like list_sent_contact_requests by the direction (received vs sent) and status (pending).

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 indicates this tool is for viewing pending requests that require action (approval or rejection). It implicitly guides the user to use this tool when they want to see incoming requests needing response, though it doesn't explicitly state when not to use it or mention alternatives.

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

list_sent_contact_requestsA

List contact requests sent by the user.

Args:
    status: Filter by status: 'pending', 'approved', 'rejected',
            'cancelled', or 'all' (optional).
    page: Page number for pagination (optional).
    page_size: Number of items per page (optional).

Returns:
    JSON string containing the list of sent contact requests.
ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
pageNo
page_sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior. It only states it returns a JSON string but omits key traits like read-only nature, pagination defaults, sorting order, or whether status filter is case-sensitive. This is insufficient for safe invocation.

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

Conciseness5/5

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

The description is short and well-structured with bulleted parameter explanations and a returns line. Every sentence is necessary, and there is no extraneous information.

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

Completeness3/5

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

For a simple list tool with pagination and filter, the description covers basic usage but lacks details on pagination behavior, filter interactions, and any limitations. The existence of an output schema helps, but the description alone is only minimally 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 0%, so the description is the sole source. It explains status with listed values and describes page/page_size briefly. However, it does not specify default behaviors (e.g., null page returns all), leaving gaps that the schema alone cannot fill.

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

Purpose5/5

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

The description clearly states 'List contact requests sent by the user.' It uses a specific verb-resource combination and distinguishes well from siblings like list_received_contact_requests and list_agent_contact_requests, indicating sent vs. received or agent-specific scope.

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

Usage Guidelines3/5

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

The description implies the tool is for sent requests but does not explicitly state when to use it over alternatives like list_received_contact_requests. No guidance on when not to use or prerequisites is provided, leaving the agent to infer from context.

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

mark_agent_message_failedA

Mark a message processing as failed by the agent.

Completes the current processing attempt with an error message.
Call this when the agent cannot process a message.

This endpoint automatically:
- Sets the current attempt's completed_at timestamp (system-managed)
- Sets the current attempt status to "failed"
- Records the error message in the current attempt
- Updates the agent's delivery status to "failed"

Note: Requires an active processing attempt. If no processing attempt exists,
returns a 422 error. Call mark_agent_message_processing first.

Args:
    chat_id: The unique identifier of the chat room (required).
    message_id: The ID of the message to mark as failed (required).
    error: Error message describing why processing failed (required).

Returns:
    Success message confirming the message is marked as failed.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
message_idYes
errorYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Describes all automatic actions: sets completed_at, status to 'failed', records error, updates delivery status. Also mentions error case (422) if no active attempt. With no annotations, this is thorough.

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

Conciseness5/5

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

Concise, well-structured: purpose sentence, usage instruction, bullet list of automatic actions, prerequisite note, and clear parameter descriptions. No extraneous content.

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?

Fully covers the operation: explains what it does, prerequisites, parameters, and return value. References sibling tools. Complete for a simple mutation tool with 3 required params.

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 description adds meaning beyond schema: explains each parameter (chat_id, message_id, error) is required and provides brief rationale. Despite 0% schema coverage, the description compensates adequately.

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

Purpose5/5

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

The description clearly states the verb and resource: 'Mark a message processing as failed by the agent.' It distinguishes from sibling tools like 'mark_agent_message_processing' and 'mark_agent_message_processed' by contrasting when to call each.

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 says when to use: 'Call this when the agent cannot process a message.' Also provides a prerequisite: requires an active processing attempt, and directs to call 'mark_agent_message_processing' first if not.

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

mark_agent_message_processedA

Mark a message as successfully processed by the agent.

Completes the current processing attempt with a system-managed timestamp.
Call this when the agent finishes processing a message successfully.

This endpoint automatically:
- Sets the current attempt's completed_at timestamp (system-managed)
- Sets the current attempt status to "success"
- Sets the agent's processed_at timestamp (system-managed)
- Updates the agent's delivery status to "processed"

Note: Requires an active processing attempt. If no processing attempt exists,
returns a 422 error. Call mark_agent_message_processing first.

Args:
    chat_id: The unique identifier of the chat room (required).
    message_id: The ID of the message to mark as processed (required).

Returns:
    Success message confirming the message is marked as processed.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations, the description carries full burden and details what the endpoint automatically sets (timestamps, statuses) and error condition (422 if no attempt). However, it lacks detail on return structure beyond 'Success message', though output schema exists.

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

Conciseness5/5

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

Description is well-structured with sections, concise yet thorough, no redundant sentences, and front-loaded with purpose.

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

Completeness5/5

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

Given the tool's simplicity (2 required params, no nested objects, output schema exists), the description covers purpose, usage, parameters, behavior, error condition, and prerequisites completely.

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?

Schema coverage is 0% (no descriptions in schema), but the description includes an 'Args' section that adds clear meaning: 'unique identifier of the chat room' and 'ID of the message to mark as processed', fully compensating for the schema gap.

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

Purpose5/5

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

The description clearly states the action 'Mark a message as successfully processed by the agent' and differentiates from siblings like mark_agent_message_processing and mark_agent_message_failed by specifying the success outcome and prerequisite.

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

Usage Guidelines5/5

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

The description explicitly says when to call ('when the agent finishes processing a message successfully'), the prerequisite ('Requires an active processing attempt...Call mark_agent_message_processing first'), and hints at the alternative for failure.

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

mark_agent_message_processingA

Mark a message as being processed by the agent.

Creates a new processing attempt with a system-managed timestamp.
Call this when the agent starts working on a message.

This endpoint automatically:
- Creates a new attempt with auto-incremented attempt_number
- Sets the attempt status to "processing"
- Records the started_at timestamp (system-managed)
- Updates the agent's delivery status to "processing"

Args:
    chat_id: The unique identifier of the chat room (required).
    message_id: The ID of the message to mark as processing (required).

Returns:
    Success message confirming the message is marked as processing.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
message_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description alone must disclose behavior. It details automatic actions like creating an attempt, setting status, recording timestamps, and updating delivery status. Missing idempotency or error scenarios, but overall quite transparent.

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 moderately long but well-structured with a purpose statement, bullet list of automatic behaviors, and separated args/returns sections. No unnecessary sentences.

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

Completeness4/5

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

Given the two parameters and presence of output schema, the description covers the tool's function, usage, side effects, and return value. It is adequate for an agent to understand and invoke correctly, though error handling is not mentioned.

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

Parameters4/5

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

The input schema has 0% description coverage, but the description includes an 'Args' section explaining each parameter (chat_id, message_id) with required status, adding meaning beyond the schema field names.

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

Purpose5/5

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

The description clearly states the tool marks a message as being processed by the agent, with specific verb and resource. It is easily distinguished from sibling tools like 'mark_agent_message_failed' and 'mark_agent_message_processed'.

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

Usage Guidelines4/5

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

The description explicitly says 'Call this when the agent starts working on a message', providing clear usage context. However, it does not mention when not to use it or alternative tools, leaving some room for improvement.

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

register_my_agentA

Register a new remote agent.

Returns the agent details including API key. Save the API key - it's only shown once!

Args:
    name: Agent name (required).
    description: Agent description (required).
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
descriptionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

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

Discloses that the API key is shown only once, which is a critical behavioral trait for a registration tool. However, it does not mention error cases, auth needs, or idempotency.

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?

Extremely concise: two sentences and an Args list. Critical information (API key warning) is front-loaded. No wasted words.

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?

Adequate for a simple creation tool: explains purpose, key parameter roles, and a behavioral warning. Missing details like uniqueness constraints or error handling, but output schema may cover return values.

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?

With 0% schema description coverage, the description adds minimal context by labeling the parameters 'Agent name' and 'Agent description'. This is better than nothing but not rich.

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

Purpose5/5

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

Clearly states 'Register a new remote agent' with a specific verb and resource. Includes a crucial caveat about the one-time API key display, which adds context beyond a basic description.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like other agent-related tools. Does not mention context, prerequisites, or when not to use it.

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

reject_contact_requestC

Reject a received contact request.

Args:
    request_id: The contact request ID to reject (required).

Returns:
    JSON string confirming the rejection.
ParametersJSON Schema
NameRequiredDescriptionDefault
request_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so the description carries full burden. It only says it returns a JSON string, but does not disclose side effects (e.g., whether the sender is notified), preconditions (e.g., request must be pending), or error scenarios.

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 short and to the point, with a clear Args/Returns structure. No unnecessary words.

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

Completeness2/5

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

For a simple 1-parameter tool with an output schema, the description is adequate only in the most minimal sense. It lacks details on behavior, side effects, and error handling, leaving significant gaps for the agent.

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

Parameters2/5

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

Schema description coverage is 0%, and the description merely repeats the parameter name and marks it required. No additional meaning beyond the schema is provided.

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

Purpose5/5

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

The description clearly states the tool rejects a received contact request, using a specific verb and resource. It is distinct from sibling tools like approve_contact_request and cancel_contact_request.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like cancel_contact_request, or when not to use it. No context about prerequisites or conditions.

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

remove_agent_chat_participantA

Remove a participant from a chat room.

Removes a participant (user or agent) from the specified chat room.
The acting agent must be the owner or admin of the room.

Args:
    chat_id: The unique identifier of the chat room (required).
    participant_id: The participant's ID to remove (required).

Returns:
    Success message confirming the participant was removed.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
participant_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 burden. It states the action is removal, requires permissions, and returns a success message. However, it does not address reversibility, errors, or side effects.

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

Conciseness5/5

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

The description is concise with a clear first sentence, followed by permission note and structured Args/Returns. No unnecessary words.

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

Completeness4/5

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

For a simple removal tool with two required params and an output schema, the description covers permission requirements and return type. However, it could specify error conditions or the exact success message format.

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 has 0% description coverage, but the description's Args section adds semantic meaning: chat_id is 'unique identifier', participant_id is 'participant's ID to remove'. This significantly improves parameter understanding.

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

Purpose5/5

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

The description clearly states the tool removes a participant from a chat room, using a specific verb and resource. It differentiates from siblings like add_agent_chat_participant and remove_my_chat_participant.

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 mentions the acting agent must be owner or admin, providing a clear usage condition. However, it lacks explicit guidance on when not to use or alternatives.

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

remove_agent_contactA

Remove an existing contact.

Removes a contact by either contact_id or handle. At least one must be provided.
If both are provided, both are sent to the API (contact_id takes precedence).

Args:
    contact_id: The contact record ID (optional, provide this or handle).
    handle: The contact's handle (optional, provide this or contact_id).

Returns:
    JSON string confirming removal.
ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idNo
handleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations provided, so the description carries full burden. It discloses key behaviors: removal by ID/handle, precedence rule when both provided, and return format. Could mention error cases or irreversibility but still adequate.

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

Conciseness5/5

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

The description is efficient: a one-line summary followed by detailed breakdown of parameters and return value. No extraneous content; every sentence contributes.

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

Completeness4/5

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

Given low complexity (2 optional params) and presence of output schema, the description covers core functionality, parameters, and return. Minor omission: no mention of error handling or assumptions.

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?

Schema has 0% description coverage, so the description fully explains each parameter's purpose (contact_id as record ID, handle as handle) and the precedence rule, adding significant value.

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

Purpose5/5

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

The description clearly states the tool removes an existing contact, specifies identification via contact_id or handle, and distinguishes it from sibling tools like remove_my_contact (which removes own contacts).

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

Usage Guidelines3/5

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

The description implies usage for agent contact removal but does not explicitly guide when to use this over alternatives like remove_my_contact. It lacks exclusions or contextual cues.

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

remove_my_chat_participantC

Remove a participant from a chat room.

Args:
    chat_id: The chat room ID (required).
    participant_id: ID of participant to remove (required).
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
participant_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only states 'remove' without detailing side effects, reversibility, or permission requirements. This is insufficient for a mutation tool.

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

Conciseness3/5

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

The description is extremely short but lacks critical information. It is concise but not structured to front-load essential usage context. Every sentence is earned, but more content is needed.

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

Completeness3/5

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

For a simple removal tool, the description minimally covers the action. The output schema exists and may cover return values, but no guidance on errors, success signals, or lifecycle impact is provided. Adequate but not complete.

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

Parameters2/5

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

The description repeats parameter names and required status already in the schema, adding no additional semantics. The 0% schema coverage means it does not compensate; parameters are self-explanatory but could benefit from format or source details.

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

Purpose4/5

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

The description clearly states it removes a participant from a chat room, specifying the action and resource. However, it does not differentiate from sibling tools like 'remove_agent_chat_participant', which may have different scope.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, such as 'remove_agent_chat_participant'. No prerequisites or restrictions (e.g., ownership, permissions) are mentioned.

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

remove_my_contactA

Remove an existing contact.

Removes a contact by either contact_id or handle. At least one must be provided.
If both are provided, both are sent to the API (contact_id takes precedence).

Args:
    contact_id: The contact record ID (optional, provide this or handle).
    handle: The contact's handle (optional, provide this or contact_id).

Returns:
    JSON string confirming removal.
ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idNo
handleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations provided, so description must carry behavioral info. It states removal and returns JSON confirmation, but lacks details on side effects (e.g., does it affect chats?), permissions, or error scenarios. Adequate but not comprehensive.

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

Conciseness5/5

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

Description is concise with clear sentence structure, bullet-like listing of args, and return statement. Every sentence adds value 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?

Given no schema descriptions and no annotations, the description covers purpose, parameters, and return. It lacks error handling or precondition details, but for a simple deletion tool, it is reasonably complete.

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?

Schema has 0% description coverage with two nullable string params. Description adds crucial meaning: explains what each parameter is, optionality, at least one required, and precedence. This significantly aids correct invocation.

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

Purpose5/5

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

The description clearly states 'Remove an existing contact' and distinguishes from siblings like remove_agent_contact by specifying 'my' contact. The parameter details reinforce the purpose.

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

Usage Guidelines4/5

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

Provides clear guidance on when to use: to remove a contact by ID or handle, with precedence rules. However, no explicit 'when not to use' or alternatives are mentioned, though siblings like cancel_contact_request subtly hint at alternatives for pending requests.

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

resolve_handleA

Look up an entity by handle.

Resolves a handle to its entity details. Use this to verify a handle
exists before sending a contact request.

Args:
    handle: The handle to resolve (required).

Returns:
    JSON string containing the resolved entity details.
ParametersJSON Schema
NameRequiredDescriptionDefault
handleYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavioral traits. It states the tool resolves a handle and returns details, which implies a read operation, but does not explicitly confirm no side effects, rate limits, or authentication requirements.

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

Conciseness5/5

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

The description is concise, front-loaded with the main purpose, followed by a usage hint, and then parameter and return details. Every sentence adds value without 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?

For a simple one-parameter tool with an output schema, the description covers the necessary information: what it does, when to use it, and what it returns. Slightly lacking in behavioral detail but sufficient for the agent.

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 description adds meaning to the parameter 'handle' by labeling it as 'The handle to resolve' and noting it is required, which goes beyond the schema's title and type. With 0% schema description coverage, this is valuable.

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

Purpose5/5

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

The description clearly states the tool resolves a handle to entity details, with specific verb 'resolve' and resource 'handle'. It distinguishes itself from sibling tools that focus on contacts, chats, and agents.

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 suggests using the tool to verify a handle exists before sending a contact request, providing clear context. Does not mention alternatives or when not to use, but the use case is well-defined.

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

respond_to_agent_contact_requestA

Respond to a contact request (approve, reject, or cancel).

- approve: Accept a received contact request
- reject: Decline a received contact request
- cancel: Cancel a sent contact request

Identify the request by either handle or request_id. At least one must be provided.

Args:
    action: The response action: 'approve', 'reject', or 'cancel' (required).
    handle: The handle of the requester/recipient (optional, provide this or request_id).
    request_id: The contact request ID (optional, provide this or handle).

Returns:
    JSON string confirming the action.
ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
handleNo
request_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/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 states the return value (JSON string confirming action) but does not disclose potential side effects (e.g., irreversibility), error conditions, or permission requirements. The behavioral disclosure is adequate but not rich.

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

Conciseness5/5

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

The description is well-structured with a lead sentence, bullet points for actions, and a clear Args/Returns section. It is concise, every sentence adds value, and it is easy to scan.

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

Completeness4/5

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

Given the tool's simplicity and the presence of an output schema (implied), the description covers the essential context: actions, identification, and return value. It lacks details on error handling or prerequisites, but for a contact request response tool, it is reasonably complete.

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?

With 0% schema description coverage, the description adds full meaning: action enums explained, handle and request_id described as optional identification fields, and the constraint that at least one must be provided. This fully compensates for the schema's lack of textual descriptions.

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

Purpose5/5

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

The description clearly states it responds to contact requests with three specific actions (approve, reject, cancel), distinguishing it from sibling tools that handle only one action each. The verb 'respond to' combined with the resource 'agent contact request' is specific.

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 explains when to use each action and how to identify the request (by handle or request_id). It does not explicitly exclude cases where sibling tools might be preferred, but it provides clear context for each action.

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

send_my_chat_messageB

Send a message in a chat room.

Args:
    chat_id: The chat room ID (required).
    content: Message text (required).
    recipients: Non-empty comma-separated participant names to @mention (required).
                Must contain at least one name; empty string is not accepted.
ParametersJSON Schema
NameRequiredDescriptionDefault
chat_idYes
contentYes
recipientsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are present, and the description does not disclose behavioral traits beyond the basic action. It does not mention idempotency, required permissions, side effects, or what the output schema returns, leaving significant gaps.

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

Conciseness5/5

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

The description is extremely concise: a single sentence followed by a clear args list with no redundancy. Every sentence adds value, and the format is front-loaded with the main action. No wasted words.

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

Completeness3/5

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

Given the presence of an output schema (though not shown), the description does not need to explain return values. However, it lacks context about when to use this tool over other message-related tools (e.g., create_agent_chat_message). It also fails to clarify whether the message is sent to all chat participants or only those mentioned, leaving ambiguity.

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?

With 0% schema description coverage, the description effectively explains all three parameters. It adds meaningful constraints, especially for 'recipients' (non-empty, comma-separated, at least one name). For 'chat_id' and 'content', it provides basic context ('The chat room ID', 'Message text') that adds value beyond the schema's type-only definitions.

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

Purpose4/5

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

The description clearly states the tool's action: 'Send a message in a chat room.' It uses a specific verb and resource, making the purpose clear. However, it does not differentiate from sibling tools like create_agent_chat_message or list_my_chat_messages, which could cause confusion.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives, such as when to send vs create a message. The description imposes a constraint on recipients (non-empty) but does not explain the intended context for this tool.

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

update_my_profileB

Update the current user's profile.

Args:
    first_name: New first name (optional).
    last_name: New last name (optional).
ParametersJSON Schema
NameRequiredDescriptionDefault
first_nameNo
last_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Update', implying mutation, but does not mention side effects, permissions, validation, or return behavior. This is insufficient for a write operation.

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

Conciseness5/5

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

The description is very short and front-loaded with the main purpose. Every sentence is necessary and there is no redundancy.

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

Completeness3/5

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

Given the tool has only two optional parameters and an output schema exists, the description is minimally adequate but fails to explain update semantics (e.g., partial vs full replacement, what the output contains). Completeness is average.

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 0%, so the description adds meaning by naming parameters and indicating they are optional. However, it does not provide constraints such as length limits or allowed values, leaving gaps.

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

Purpose5/5

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

The description clearly states the verb 'Update' and the resource 'current user's profile', making the purpose specific and distinguishable from siblings like get_my_profile.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., other profile update tools or user management tools). The description lacks any contextual direction.

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. 42 tool updatesv1.0.1
    • Addedadd_agent_contact
    • Addedadd_my_chat_participant
    • Removedadd_user_chat_participant
    • Addedapprove_contact_request
    • Addedcancel_contact_request
    • Addedcreate_contact_request
    • Addedcreate_my_chat
    • Removedcreate_user_chat
    • Addedget_agent_next_message
    • Addedget_my_chat
    • Addedget_my_profile
    • Removedget_user_chat
    • Removedget_user_profile
    • Addedlist_agent_contact_requests
    • Addedlist_agent_contacts
    • Addedlist_agent_messages
    • Addedlist_my_agents
    • Addedlist_my_chat_messages
    • Addedlist_my_chat_participants
    • Addedlist_my_chats
    • Addedlist_my_contacts
    • Addedlist_my_peers
    • Addedlist_received_contact_requests
    • Addedlist_sent_contact_requests
    • Removedlist_user_agents
    • Removedlist_user_chat_messages
    • Removedlist_user_chat_participants
    • Removedlist_user_chats
    • Removedlist_user_peers
    • Addedregister_my_agent
    • Removedregister_user_agent
    • Addedreject_contact_request
    • Addedremove_agent_contact
    • Addedremove_my_chat_participant
    • Addedremove_my_contact
    • Removedremove_user_chat_participant
    • Addedresolve_handle
    • Addedrespond_to_agent_contact_request
    • Addedsend_my_chat_message
    • Removedsend_user_chat_message
    • Addedupdate_my_profile
    • Removedupdate_user_profile
  2. 28 tool updatesv1.0.0
    • First observedadd_agent_chat_participant
    • First observedadd_user_chat_participant
    • First observedcreate_agent_chat
    • First observedcreate_agent_chat_event
    • First observedcreate_agent_chat_message
    • First observedcreate_user_chat
    • First observedget_agent_chat
    • First observedget_agent_chat_context
    • First observedget_agent_me
    • First observedget_user_chat
    • First observedget_user_profile
    • First observedhealth_check
    • First observedlist_agent_chat_participants
    • First observedlist_agent_chats
    • First observedlist_agent_peers
    • First observedlist_user_agents
    • First observedlist_user_chat_messages
    • First observedlist_user_chat_participants
    • First observedlist_user_chats
    • First observedlist_user_peers
    • First observedmark_agent_message_failed
    • First observedmark_agent_message_processed
    • First observedmark_agent_message_processing
    • First observedregister_user_agent
    • First observedremove_agent_chat_participant
    • First observedremove_user_chat_participant
    • First observedsend_user_chat_message
    • First observedupdate_user_profile

TDQS

B3.3/5.0

Scored across 44 tools

Disambiguation4/5

Most tools are clearly distinguished by the agent_ or my_ prefix indicating the actor, and the operations are distinct (chats, contacts, messages, etc.). However, there is significant overlap between agent and user versions of similar operations (e.g., list_agent_chats vs list_my_chats, create_agent_chat vs create_my_chat), and the contact request handling is split differently for agents (unified respond) vs users (separate approve/reject/cancel), which could cause selection confusion in mixed contexts.

Naming Consistency3/5

The dominant pattern is verb_noun with an agent_ or my_ prefix, but there are notable deviations: user contact request tools like create_contact_request, approve_contact_request, and reject_contact_request omit the my_ prefix, while resolve_handle and health_check are prefix-less. Additionally, messaging tools use different verbs (create_agent_chat_message vs send_my_chat_message), so the naming is not fully uniform.

Tool Count2/5

At 44 tools, the surface is very large, largely due to duplicating nearly every operation for both agent and user contexts (e.g., ~20 agent tools and ~20 user tools). This feels like two separate sub-servers bundled together, inflating the count beyond what is necessary for a coherent set. The scope could be reduced by parameterizing the actor rather than creating parallel tools.

Completeness4/5

The tool set comprehensively covers chat management (create, get, list), participant management, messaging (send, list, events), contact management (add, remove, list, requests), message processing lifecycle (mark processing/processed/failed, list, get next), and profile/health checks for both agents and users. Minor gaps include lack of chat update/delete operations and no agent profile update, but these are not critical for the core workflows.

Maintenance

ActivityStale
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers